大家都知道String类型是Redis数据库常用的一种,今天学习了一下对String类型数据的操作命令,做一下记录,
我们在Redis基本操作命令学习(一)中学习的操作命令都可以用来操作String类型数据。
1.批量添加、获取key(mget key1 key2 key3 … / mset key1 value1 key2 value2 …)
127.0.0.1:6379> mset demo1 google demo2 baidu demo3 kuake
OK
127.0.0.1:6379> keys *
1) "demo3"
2) "demo1"
3) "demo2"
127.0.0.1:6379> mget demo1 demo2 demo3
1) "google"
2) "baidu"
3) "kuake"
2.设置key的有效期( set key value [ex 秒数] / [px 毫秒数] [nx ] / [ xx] )
nx:表示key不存在时执行,当key已存在时不执行
xx:表示不管key是否存在都会执行;如果key已存在,则会把此key覆盖;如果key不存在,则新建key
127.0.0.1:6379> set demo1 google px 300000 nx
OK
127.0.0.1:6379> pttl demo1 // 查看key的有效期
(integer) 294152
127.0.0.1:6379> set demo1 google px 300000 nx // key已存在,再次执行key时会执行失败
(nil)
127.0.0.1:6379> set demo1 google px 300000 xx // key已存在,再次执行key时会把之前的key覆盖
OK
127.0.0.1:6379> pttl demo1
(integer) 296960
127.0.0.1:6379> set demo2 baidu ex 100 nx
OK
127.0.0.1:6379> get demo2
"baidu"
127.0.0.1:6379> pttl demo2
(integer) 87889
127.0.0.1:6379> ttl demo2
(integer) 82
127.0.0.1:6379> ttl demo2
(integer) 80
3.在key数据末尾做追加操作( append key value)
127.0.0.1:6379> set demo BaiDu // 先新建一个key
OK
127.0.0.1:6379> get demo
"BaiDu"
127.0.0.1:6379> append demo -360 // 在key为demo的数据末尾追加上 -360
(integer) 9 // 返回追加后key代表的数据的总长度
127.0.0.1:6379> get demo
"BaiDu-360" // 数据追加成功
4.用新值替换并返回原来的key值( getset key newValue)
127.0.0.1:6379> getset demo google // 用新值 google 代替原值 BaiDu-360,后并把原值返回
"BaiDu-360"
127.0.0.1:6379> get demo // 查看demo值确实被更新了
"google"
5.对key值做截取操作( getrange key start stop )
字符串左侧下标从0开始,右侧下标从-1开始,start :代表起始下标,
stop:代表结束下标,截取时起始位置和结束位置的下标都包含在截取范围内
如果 start > stop ,则返回空字符串
如果 start >= length ,则返回空字符串
如果 stop >= length ,则截取至字符串结尾
如果 start 在 stop 右侧,则返回空字符串
总之:start 始终在 stop 左侧且不超过字符串长度(length)时,可以正常返回数据
127.0.0.1:6379> append demo -alibaba // 先追加数值,以便看到更明确的进行截取操作
(integer) 14
127.0.0.1:6379> get demo
"google-alibaba"
----------------------
value值: g o o g l e - a l i b a b a
下标: 0 1 2 3 4 5 6 7 8 9 10 11 12 13
下标: -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1
----------------------
127.0.0.1:6379> getrange demo 2 6
"ogle-"
127.0.0.1:6379> getrange demo 5 9
"e-ali"
127.0.0.1:6379> getrange demo 5 5
"e"
127.0.0.1:6379> getrange demo 5 4 // stop 大于start返回空
""
127.0.0.1:6379> getrange demo -1 3 // start 在 stop 右侧,则返回空字符串
""
127.0.0.1:6379> getrange demo 3 -5
"gle-ali"
127.0.0.1:6379> getrange demo 14 14 // start 和stop 大于length
""
127.0.0.1:6379> getrange demo 0 -14
"g"
127.0.0.1:6379> getrange demo 2 -14
""
127.0.0.1:6379> getrange demo -14 -5
"google-ali"
6.对key的value值做替换操作( setrange key offset newValue)
offset :被替换值的下标,只能为正数,不能为负数(只能从字符串左侧开始查找,不能从右侧开始)
如果 offset > length时,则会自动在字符串末尾添加\x00(相当于’\x00’代表一个字符)
127.0.0.1:6379> get demo
"google-alibaba"
127.0.0.1:6379> setrange demo 1 H
(integer) 14 // 返回值为key对应值的总长度
127.0.0.1:6379> get demo
"gHogle-alibaba"
127.0.0.1:6379> setrange demo -4 B // 下标不能为负数
(error) ERR offset is out of range
127.0.0.1:6379> setrange demo 17 B
(integer) 18 // 返回替换后字符串新的长度
127.0.0.1:6379> get demo
"gHogle-alibaba\x00\x00\x00B"
7.对value值进行自增或自减操作( incr key、 incrby key num、 decr key、decrby key num )
注:value值必须是数值,不能是字母或汉字或其他
127.0.0.1:6379> set demo3 5
OK
127.0.0.1:6379> incr demo3 // incr表示自增1
(integer) 6
127.0.0.1:6379> incr demo3
(integer) 7
127.0.0.1:6379> incrby demo3 5 // incrby 表示增加指定的数值
(integer) 12
127.0.0.1:6379> incrby demo3 5
(integer) 17
127.0.0.1:6379> decr demo3 // decr 表示自减1,自减1后value值为16
(integer) 16
127.0.0.1:6379> decr demo3
(integer) 15
127.0.0.1:6379> decrby demo3 4 // decrby 表示减去指定的数值
(integer) 11
127.0.0.1:6379> set demo4 a
OK
127.0.0.1:6379> get demo4
"a"
127.0.0.1:6379> incr demo4 // 不能对字母进行自增操作
(error) ERR value is not an integer or out of range
8.对value值位进行操作(setbit key offset value / getbit key offset)
注意:当offset值大于字符串长度时 或者操作的key不存在时,返回0;
value取值为 0 或 1;
更多的是用来操作value值为二进制数的key
127.0.0.1:6379> set demo4 a
OK
127.0.0.1:6379> get demo4
"a"
----------------
解析: a的二进制数是 0110 0001
-----------------
127.0.0.1:6379> getbit demo4 0
(integer) 0
127.0.0.1:6379> getbit demo4 1
(integer) 1
127.0.0.1:6379> getbit demo4 2
(integer) 1
127.0.0.1:6379> getbit demo4 3
(integer) 0
127.0.0.1:6379> getbit demo4 4
(integer) 0
127.0.0.1:6379> getbit demo4 5
(integer) 0
127.0.0.1:6379> getbit demo4 6
(integer) 0
127.0.0.1:6379> getbit demo4 7
(integer) 1
127.0.0.1:6379> setbit demo4 1 0
(integer) 1
127.0.0.1:6379> get demo4
"!"
9.查看字符串长度(strlen)