常用命令
append key value # 在原有的字符串后面追加,如果当前key不存在,就相当于set key
strlen key # 获取字符串的长度
incr key # 做+1操作(只适用于字符串是纯数字状态下,+1之后这个数据依然是字符串类型)
incrby key 10 # 指定增量
decr key # 做-1操作
decrby key 10 # 指定减量
getrange key 0 5 # 截取字符串,相当于java的subString
mset k1 v1 k2 v2 k3 v3 # 批量设置
mget k1 k2 k3 # 批量获取
进阶命令
setex key 10 value# 给key设置过期时间为10秒
setnx key value # 安全设置(如果key不存在才设置这个key返回1,如果存在不设置返回0,一般在分布式锁的时候很常用)
getset key value # 先get再set,如果key不存在则返回nil,如果存在,获取原来的值,再设置新值
思路拓展
如果使用redis保存一个对象,一般的做法是保存这个对象的Json字符串,这里有一个对于key的巧妙设计,见下
mset user:1:name "张三" user:1:age 18
# 这里 user:{id}:{属性} 这就是一个非常好的设计,可以很方便的拿到一些属性
String常见使用场景
-
计数器:使用命令
incr key
-
统计多单位的数量
key的设计:{文章}:{文章id}:{行为}
比如一篇文章的阅读数、收藏数、点赞数,可以这么设计:
127.0.0.1:6379> mset article:1:read 0 article:1:collection 0 article:1:praise 0 OK 127.0.0.1:6379> keys * 1) "article:1:praise" 2) "article:1:collection" 3) "article:1:read" 127.0.0.1:6379> incr article:1:praise (integer) 1 127.0.0.1:6379> get article:1:praise "1" 127.0.0.1:6379>
- 验证码:使用过期命令
setex key 300 value
设计可以是:{id}:{phoneNum} code
127.0.0.1:6379> setex 1:17600066366 30 8789 OK 127.0.0.1:6379> ttl 1:17600066366 (integer) 18 127.0.0.1:6379> ttl 1:17600066366 (integer) 17 127.0.0.1:6379> ttl 1:17600066366 (integer) 16 127.0.0.1:6379> ttl 1:17600066366 (integer) 16 127.0.0.1:6379> ttl 1:17600066366 (integer) 15 127.0.0.1:6379>