Redis 笔记 —— 字符串String
适合用 String 存储的情况
- 每次需要访问大量的字段
- 存储的结构具有多层嵌套的时候
1. SET
SET:用于设置。
常用的可选参数:
- EX seconds : 将键的过期时间设置为 seconds 秒。 执行 SET key value EX seconds 的效果等同于执行 SETEX key seconds value 。
- PX milliseconds : 将键的过期时间设置为 milliseconds 毫秒。 执行 SET key value PX milliseconds 的效果等同于执行 PSETEX key milliseconds value 。
- NX : 只在键不存在时, 才对键进行设置操作。 执行 SET key value NX 的效果等同于执行 SETNX key value 。
- XX : 只在键已经存在时, 才对键进行设置操作。
练习:
设置键值对:
> GET key
nul
> SET key "xxm"
OK
> get key
xxm
对已存在的键进行设置:
> set xxm 123
OK
> get xxm
123
> set xxm 456
OK
> get xxm
456
使用 EX 选项:
> set xxm 123 EX 10
OK
> get xxm
123
> get xxm
null
其中第二条 get 指令是在 10 秒之后执行的,因此 xxm 的值变成了 null。
使用 PX 选项:
> set xxm 123 PX 5000
OK
> get xxm
123
> get xxm
nul
其中第二条 get 指令是在 5000 毫秒之后执行的,因此 xxm 的值变成了 null。
使用 NX 选项:
> set xxm 4567 NX
OK
> set xxm 456755 NX
null
> get xxm
4567
使用 NX 选项时,当 key 不为空时,不会改变对应的 value。
使用 XX 选项:
127.0.0.1:6379> get xxm
"1"
127.0.0.1:6379> set xxm 234 XX
OK
127.0.0.1:6379> get xxm
"234"
127.0.0.1:6379> get xuxumiao
(nil)
127.0.0.1:6379> set xuxumiao 2345 XX
(nil)
127.0.0.1:6379> get xuxumiao
(nil)
2. GET
如果 key 不存在,那么就会返回特殊值 nil ,否则返回 key 的值。
如果 key 的值并非字符串类型,那么则会返回一个错误,因为 get 命令只能用于字符串值。
127.0.0.1:6379> get key
"xxm"
127.0.0.1:6379> get abc
(nil)
3. GETSET
先进行一次 get,再 set。
如果键 key 没有旧值, 也即是说, 键 key 在被设置之前并不存在, 那么命令返回 nil 。
127.0.0.1:6379> GETSET xxm 123
"234"
#有旧值,因此显示的是旧值
127.0.0.1:6379> get xxm
"123"
127.0.0.1:6379> get waha
(nil)
#无旧值,因此显示的是 (nil)
127.0.0.1:6379> getset waha 123
(nil)
127.0.0.1:6379> get waha
"123"
4. STRLEN
返回字符串值的长度
127.0.0.1:6379> set xxm THISISREDIS
OK
127.0.0.1:6379> strlen xxm
(integer) 11
5. APPEND
当某个 key 已经存在,并且它的值是一个字符串, APPEND 命令将把 value 追加到键 key 现有值的末尾,并且返回追加后的长度。
127.0.0.1:6379> get xxm
"THISISREDIS"
127.0.0.1:6379> append xxm version2.0
(integer) 21
127.0.0.1:6379> get xxm
"THISISREDISversion2.0"
6. SETRANGE
从偏移量 offset 开始, 用 value 参数覆写(overwrite)键 key 储存的字符串值。最后返回长度。
127.0.0.1:6379> get xxm
"123456789"
127.0.0.1:6379> setrange xxm 5 aaaaa
(integer) 10
127.0.0.1:6379> get xxm
"12345aaaaa"
7. GETRANGE
截取字符串类型的值的指定部分, 字符串的截取范围由 start 和 end 两个偏移量决定 (包括 start 和 end 在内)。
127.0.0.1:6379> set xxm 123456789
OK
127.0.0.1:6379> get xxm
"123456789"
127.0.0.1:6379> getrange xxm 0 4
"12345"
127.0.0.1:6379> getrange xxm -3 -2
"78" #负数索引
127.0.0.1:6379> getrange xxm 0 -1
"123456789" #从第一个到最后一个
127.0.0.1:6379> getrange xxm 0 10000
"123456789" #超过部分自动忽略
8. INCR 和 DECR
INCR 命令是一个针对字符串的增加操作。 因为 Redis 并没有专用的整数类型, 所以键 key 储存的值在执行 INCR 命令时会被解释为十进制 64 位有符号整数。
127.0.0.1:6379> set xxm 20
OK
127.0.0.1:6379> incr xxm
(integer) 21
127.0.0.1:6379> get xxm
"21" #以字符串的形式储存
9. MSET 和 MGET
同时为多个 key 设置值、取值。
127.0.0.1:6379> MSET name xxm gender male age 28
OK
127.0.0.1:6379> mget name gender age
1) "xxm"
2) "male"
3) "28"
10. MSETNX
当所有的 key 都不存在时,才会执行批量 set,即使只有一个给定键已经存在,MSETNX命令也会拒绝执行对所有键的设置操作。
127.0.0.1:6379> msetnx name xxm2 skill java weight 75
(integer) 0
127.0.0.1:6379> get skill
(nil) #因为name已存在,所以并没有设置任何一个value
11.INCRBY DECRBY
为键 key 储存的数字值加上、减去增量 increment
127.0.0.1:6379> set xxm 100
OK
127.0.0.1:6379> incrby xxm 20
(integer) 120
127.0.0.1:6379> get xxm
"120"
127.0.0.1:6379> decrby xxm 40
(integer) 80
127.0.0.1:6379> get xxm
"80"
12. INCRBYFLOAT
为键key储存的值加上浮点数增量 increment。
127.0.0.1:6379> get xxm
"1.2"
127.0.0.1:6379> incrbyfloat xxm 2.2
"3.4"
127.0.0.1:6379> get xxm
"3.4"
127.0.0.1:6379> incrbyfloat xxm -1.1
"2.3"
127.0.0.1:6379> get xxm
"2.3"
|