开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
在上一篇文章中,我们简单介绍了Redis常用的五种数据类型,这篇文章讲详细介绍一下String数据类型常用的一些命令;
set命令
set name value
创建一个字符串数据;
示例:
redis> set name "tom"
OK
get命令
get name
获取指定的字符串数据;
示例:
redis> get name
tom
getrange命令
getrange name start end
相当于字符串切片,和java中的substring()方法类似;
示例:
redis> set name "tom"
OK
redis> getrange name 0 1
to
getset命令
getset name value
设置name的值,同时返回name对应的旧值;
示例:
redis> set name "tom"
OK
redis> getset name "jerry"
tom
redis> get name
jerry
redis> getset hello "world"
null
如果name有值的话,返回旧值,如果没有值的话,返回null;
setbit命令与getbit命令
setbit name offset value
getbit name offset
setbit设置name指定偏移量上的bit;getbit获取name指定偏移量上的bit;
示例:
redis> setbit bitmap 0 1
0
redis> getbit bitmap 0
1
这两个命令通常用来操作bitmap;
mset命令
mset name1 value1 name2 value2 ......
设置多个字符串数据;
示例:
redis> mset user "zouwei" password "my_password123456"
OK
mget命令
mget name1 name2
查询多个指定的字符串数据;
示例:
redis> mget user password
0 zouwei
1 my_password123456
setnx命令
setnx name value
只有name不存在时才能设置成功,否则就失败;
示例:
redis> setnx lock_key uid_123456
1
redis> setnx lock_key uid_123456
0
redis> del lock_key
1
redis> setnx lock_key uid_123456
1
从示例中可以印证,第二次执行该命令时,并没有成功,只有删除该name后,再执行setnx命令才成功了;
该命令一般应用在分布式环境下,抢占分布式锁;
setex命令|psetex
# 以秒为单位
setex name ex value
# 以毫秒为单位
psetex name ex value
setex给指定的value设置一个过期时间,时间单位:秒;psetex和setex作用一样,单位是毫秒;
示例:
redis> setex auth_code 60 "987625"
OK
redis> ttl auth_code
53
redis> psetex authcode 60000 "327654"
OK
redis> ttl authcode
49
给auth_code设置了60秒的过期时间,60秒倒计时后将被删除;我们可以通过ttl命令查看对应的auth_code还剩多长时间过期;
setrange命令
setrange name offset value
setrange命令使用value替换掉偏移量offset后面的字符串;
示例:
redis> set name "jerry"
OK
redis> setrange name 3 "tom"
6
redis> get name
jertom
append命令
append name value
在指定的字符串后面追加value值;
示例:
redis> set name "tom"
OK
redis> append name "_appendValue"
15
redis> get name
tom_appendValue
append命令的返回值是追加后的字符串的长度;
strlen命令
strlen name
查看指定name对应的字符串的长度;
示例:
redis> set name "tom"
OK
redis> strlen name
3
incr命令与incrby命令
# 自增命令,每次加1
incr name
# 自增命令,每次加step
incrby name step
name对应的值必须要是数字类型,且必须是整型;
示例:
redis> set age 19
OK
redis> incr age
20
redis> get age
20
redis> incrby age 10
30
redis> get age
30
这两个命令都是原子化的操作,常用于分布式应用下获取自增的编号;
incrbyfloat命令
incrbyfloat name value
这就是浮点类型数据的递增;
示例:
redis> set weight 119.6
OK
redis> incrbyfloat weight 5.3
124.9
decr命令与decrby命令
# 递减命令,每次减1
decr name
# 递减命令,每次减step
decrby name step
与上面的incr、incrby命令类似,这两个命令是用来递减的;
示例:
redis> set age 30
OK
redis> decr age
29
redis> decrby age 10
19
redis> get age
19
decr命令与decrby命令同样是原子化的操作;