【Redis学习】String字符串
Redis学习笔记:
https://blog.csdn.net/2301_80220607/category_13051025.html?spm=1001.2014.3001.5482
前言:
字符串类型是 Redis 最基础的数据类型,关于字符串需要特别注意:首先 Redis 中所有的键的类型都是字符串类型,而且其他几种数据结构也都是在字符串类型基础上构建的,例如列表和集合的元素类型是字符串类型,所以字符串类型能为其他 4 种数据结构的学习奠定基础。其次,字符串类型的值实际可以是字符串(包含一般格式的字符串或者类似 JSON、XML 格式的字符串)、数字(可以是整型或者浮点型)、甚至是二进制流数据(例如图片、音频、视频等)。不过一个字符串的最大值不能超过 512 MB。
目录
1.1 常见命令
1.1 SET
1.2 GET
1.3 MGET
1.4 MSET
1.5 SETNX
2. 计数命令
2.1 INCR
2.2 INCRBY
2.3 DECR
2.4 DECRBY
2.5 INCRBYFLOAT
3. 其它命令
3.1 APPEND
3.2 GETRANGE
3.3 SETRANGE
3.4 STRLEN
4.String内部编码
5. 典型使用场景
1.1 常见命令
1.1 SET
将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,⽆论原来的数据类型是什么。之 前关于此 key 的 TTL 也全部失效。
语法:
SET key value [expiration EX seconds|PX milliseconds] [NX|XX]
时间复杂度:O(1)
选项:
SET 命令⽀持多种选项来影响它的⾏为:
- EX seconds⸺使⽤秒作为单位设置 key 的过期时间。
- PX milliseconds⸺使⽤毫秒作为单位设置 key 的过期时间。
- NX ⸺只在 key 不存在时才进⾏设置,即如果 key 之前已经存在,设置不执⾏。
- XX ⸺只在 key 存在时才进⾏设置,即如果 key 之前不存在,设置不执⾏。
注意:由于带选项的 SET 命令可以被 SETNX 、 SETEX 、 PSETEX 等命令代替,所以之后的版本 中,Redis 可能进⾏合并。
返回值:
- 如果设置成功,返回 OK。
- 如果由于 SET 指定了 NX 或者 XX 但条件不满⾜,SET 不会执⾏,并返回 (nil)。
1.2 GET
获取 key 对应的 value。如果 key 不存在,返回 nil。如果 value 的数据类型不是 string,会报错。
语法:
GET key
- 时间复杂度:O(1)
- 返回值:key 对应的 value,或者 nil 当 key 不存在。
1.3 MGET
⼀次性获取多个 key 的值。如果对应的 key 不存在或者对应的数据类型不是 string,返回 nil。
语法:
MGET key [key ...]
- 时间复杂度:O(N),N 是 key 数量
- 返回值:对应 value 的列表
1.4 MSET
⼀次性设置多个 key 的值。
语法:
MSET key value [key value ...]
- 时间复杂度:O(N) N 是 key 数量
- 返回值:永远是 OK
1.5 SETNX
设置 key-value 但只允许在 key 之前不存在的情况下。
语法:
SETNX key value
- 时间复杂度:O(1)
- 返回值:1 表⽰设置成功。0 表⽰没有设置。
2. 计数命令
2.1 INCR
将 key 对应的 string 表⽰的数字加⼀。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对 应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:
INCR key
- 时间复杂度:O(1)
- 返回值:integer 类型的加完后的数值。
2.2 INCRBY
将 key 对应的 string 表⽰的数字加上对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如 果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:
INCRBY key decrement
- 时间复杂度:O(1)
- 返回值:integer 类型的加完后的数值。
2.3 DECR
将 key 对应的 string 表⽰的数字减⼀。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对 应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:
DECR key
- 时间复杂度:O(1)
- 返回值:integer 类型的减完后的数值。
2.4 DECRBY
将 key 对应的 string 表⽰的数字减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如 果 key 对应的 string 不是⼀个整型或者范围超过了 64 位有符号整型,则报错。
语法:
DECRBY key decrement
- 时间复杂度:O(1)
- 返回值:integer 类型的减完后的数值。
2.5 INCRBYFLOAT
将 key 对应的 string 表⽰的浮点数加上对应的值。如果对应的值是负数,则视为减去对应的值。如果 key 不存在,则视为 key 对应的 value 是 0。如果 key 对应的不是 string,或者不是⼀个浮点数,则报 错。允许采⽤科学计数法表⽰浮点数。
语法:
INCRBYFLOAT key increment
- 时间复杂度:O(1)
- 返回值:加/减完后的数值。
3. 其它命令
3.1 APPEND
如果 key 已经存在并且是⼀个 string,命令会将 value 追加到原有 string 的后边。如果 key 不存在, 则效果等同于 SET 命令。
语法:
APPEND KEY VALUE
- 时间复杂度:O(1). 追加的字符串⼀般⻓度较短, 可以视为 O(1).
- 返回值:追加完成之后 string 的⻓度。
3.2 GETRANGE
返回 key 对应的 string 的⼦串,由 start 和 end 确定(左闭右闭)。可以使⽤负数表⽰倒数。-1 代表 倒数第⼀个字符,-2 代表倒数第⼆个,其他的与此类似。超过范围的偏移量会根据 string 的⻓度调整 成正确的值。
语法:
GETRANGE key start end
- 时间复杂度:O(N). N 为 [start, end] 区间的⻓度. 由于 string 通常⽐较短, 可以视为是 O(1)
- 返回值:string 类型的⼦串
3.3 SETRANGE
覆盖字符串的⼀部分,从指定的偏移开始。
语法:
SETRANGE key offset value
- 时间复杂度:O(N), N 为 value 的⻓度. 由于⼀般给的 value ⽐较短, 通常视为 O(1).
- 返回值:替换后的 string 的⻓度。
3.4 STRLEN
获取 key 对应的 string 的⻓度。当 key 存放的类似不是 string 时,报错。
语法:
STRLEN key
- 时间复杂度:O(1)
- 返回值:string 的⻓度。或者当 key 不存在时,返回 0。
4.String内部编码
字符串类型的内部编码有3种:
- int:8个字节的长整型
- embstr:小于等于39个字节的字符串
- raw:大于39个字节的字符串
整形类型示例如下:
127.0.0.1:6379> set key 111
OK
127.0.0.1:6379> object encoding key
"int"
短字符串类型示例:
127.0.0.1:6379> set key aaa
OK
127.0.0.1:6379> object encoding key
"embstr"
长字符串类型示例:
127.0.0.1:6379> set key aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
OK
127.0.0.1:6379> object encoding key
"raw"
5. 典型使用场景
- 缓存功能
- 计数功能
- 共享会话(Session)
- 手机验证码
感谢各位大佬观看,创作不易,还望各位大佬点赞支持!!!