Redis数据类型—String类型

119 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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设置一个过期时间,时间单位:秒;psetexsetex作用一样,单位是毫秒;

示例:

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

与上面的incrincrby命令类似,这两个命令是用来递减的;

示例:

redis> set age 30
OK
redis> decr age
29
redis> decrby age 10
19
redis> get age
19

decr命令与decrby命令同样是原子化的操作;