Redis 03 String


应用场景:计数器、统计多单位的数量、粉丝数、对象缓存存储

赋值

直接赋值

set

127.0.0.1:6379> set hello "Hello World"
OK

不存在才赋值

setnx

127.0.0.1:6379> setnx hello "Hello"
(integer) 0
127.0.0.1:6379> get hello
"Hello World"

由于 hello 已经有值赋值没有成功。

127.0.0.1:6379> setnx hello1 "Hello"
(integer) 1
127.0.0.1:6379> get hello1
"Hello"

不存在的 key 才能赋值。

批量赋值

mset

127.0.0.1:6379> mset hello1 "Hello1" hello2 "Hello2"
OK
127.0.0.1:6379> get hello1
"Hello1"
127.0.0.1:6379> get hello2
"Hello2"

原子性批量赋值

msetnx

127.0.0.1:6379> msetnx hello2 "Hello World2" hello3 "Hello World3"
(integer) 0
127.0.0.1:6379> get hello2
"Hello2"
127.0.0.1:6379> get hello3
(nil)

设置对象

set 对象

127.0.0.1:6379> set user:1 {name:sail,age:27}
OK
127.0.0.1:6379> set user:2 {name:hello,age:28}
OK
127.0.0.1:6379> get user:1
"{name:sail,age:27}"
127.0.0.1:6379> get user:2
"{name:hello,age:28}"

设置一个 user:1user:2 对象,值为 Json 字符串来保存一个对象。

取值

直接取值

get

127.0.0.1:6379> get hello
"Hello World"

先取值再赋值

getset

127.0.0.1:6379> getset hello4 "Hello4"
(nil)

由于 hello4 前面没有赋值,这里先取值为空。

追加字符串

append

127.0.0.1:6379> append hello "Hello World"
(integer) 11
127.0.0.1:6379> get hello
"Hello World"

如果当前 key 不存在,就相当于 set key

判断 key 是否存在

exists

127.0.0.1:6379> exists hello
(integer) 1
127.0.0.1:6379> exists hello1
(integer) 0

存在返回 1,不存在返回 0

获取字符串的长度

strlen

127.0.0.1:6379> strlen hello
(integer) 11

自增 1

incr

127.0.0.1:6379> set num1 0
OK
127.0.0.1:6379> incr num1
(integer) 1
127.0.0.1:6379> incr num1
(integer) 2

执行一次会让对应 key 的值加 1

自减 1

decr

127.0.0.1:6379> decr num1
(integer) 1
127.0.0.1:6379> decr num1
(integer) 0

执行一次会让对应 key 的值减 1

自增步长

incrby

127.0.0.1:6379> incrby num1 10
(integer) 10
127.0.0.1:6379> incrby num1 10
(integer) 20

执行一次会按照设置的步长增加一次

自减步长

decrby

127.0.0.1:6379> decrby num1 10
(integer) 10
127.0.0.1:6379> decrby num1 10
(integer) 0

执行一次会按照设置的步长减少一次

截取字符串

截取指定下标的字符串

getrange

127.0.0.1:6379> getrange hello 0 4
"Hello"

这里截取的规则是含头含尾

截取全部字符串

getrange 0 -1

127.0.0.1:6379> getrange hello 0 -1
"Hello World"

这样与 get key 的效果一致,建议还是用 get key,更加简洁。

替换指定位置开始的字符串

setrange

127.0.0.1:6379> setrange hello 6 sail
(integer) 11
127.0.0.1:6379> get hello
"Hello saild"

设置过期

setex

127.0.0.1:6379> setex hello 60 "Hello World"
OK

最后一个参数是设置替换成的字符串

查看过期剩余时间

ttl

127.0.0.1:6379> ttl hello
(integer) 56
127.0.0.1:6379> ttl hello
(integer) 55
127.0.0.1:6379> ttl hello
(integer) -2
127.0.0.1:6379> get hello
(nil)

当结果为 -2 时代表已到期,其值为空。