set name 111 # 将 111 赋值给 key == name get name # 获取 key == name 值 type name # 获取 key == name 的类型 append name 111 # 向 key == name 的值后面追加 111,如果当前 key 不存在,则新建 strlen name # key == name 的长度
加一减一的操作
1 2 3 4 5 6 7 8 9 10
127.0.0.1:6379> set a 0 OK 127.0.0.1:6379> get a "0" 127.0.0.1:6379> incr a (integer) 1 127.0.0.1:6379> incr a (integer) 2 127.0.0.1:6379> decr a (integer) 1
比如,点赞等操作,热门文章不必每次都存到数据库,可以先到缓存中。
步长
1 2 3 4 5 6
127.0.0.1:6379> get a "1" 127.0.0.1:6379> incrby a 10 (integer) 11 127.0.0.1:6379> decrby a 9 (integer) 2
截取
1 2 3 4 5 6
127.0.0.1:6379> set a hello,world OK 127.0.0.1:6379> getrange a 04 "hello" 127.0.0.1:6379> getrange a 0-1 "hello,world"
替换
1 2 3 4 5 6
127.0.0.1:6379> get a "hello,world" 127.0.0.1:6379> setrange a 1 ooo (integer) 11 127.0.0.1:6379> get a "hoooo,world"
设置过期时间
1 2 3
set name 111 # 将 111 赋值给 key == name expire name 10 # key == name 的值,10秒钟过期 setex name 10 value # 直接设置 key == name 的值,10 秒后过期
使用如下
1 2 3 4
127.0.0.1:6379> setex a 3"ii" OK 127.0.0.1:6379> ttl a (integer) -2
setnx
如果不存在就设置,如果存在就不设置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
127.0.0.1:6379> flushdb OK 127.0.0.1:6379> setnx a 111 (integer) 1 127.0.0.1:6379> get a "111" 127.0.0.1:6379> setnx a 222 (integer) 0 127.0.0.1:6379> get a "111" 127.0.0.1:6379> set a 222 OK 127.0.0.1:6379> get a "222"
批量设置
这是源自操作。
1 2 3 4 5 6 7 8 9 10
127.0.0.1:6379> flushdb OK 127.0.0.1:6379> mset a 1 b 2 c 3 OK 127.0.0.1:6379> get a "1" 127.0.0.1:6379> mget a b c 1) "1" 2) "2" 3) "3"
同样也存在 msetnx 这个,不再赘述。
key 的巧妙运用
redis 支持 name:{id}:{filed} 来设置。
1 2 3 4 5 6 7 8 9 10
127.0.0.1:6379> flushdb OK 127.0.0.1:6379> setarticle:1:view 1 OK 127.0.0.1:6379> setarticle:2:view 2 OK 127.0.0.1:6379> getarticle:1 (nil) 127.0.0.1:6379> getarticle:1:view "1"
解释一下,就是设置 第一篇文章的浏览量。 article:1:view
组合命令
先获取后设置,并返回前一个值,如果没有,返回 null。
1 2 3 4 5 6 7 8 9 10
127.0.0.1:6379> flushdb OK 127.0.0.1:6379> getset a 1 (nil) 127.0.0.1:6379> get a "1" 127.0.0.1:6379> getset a 2 "1" 127.0.0.1:6379> get a "2"
list
1 2 3 4 5 6 7 8 9 10 11
lpush list one # 向 name = list 的list 左插 one rpush list onr # 向 name = list 的 list 右插 onr lrangelist0-1 # 获取 name = list 的 list 的值 lpop list # 移除 name = list 的 list 左边的值 rpop list # 移除 name = list 的 list 右边的值 lindexlist1 # 通过下标获得值 llen list # 返回 list 长度 lrem list1 one # 移除 name = list 中 值为 one 的值,并且只移除 1 个 lrem list2 one # 移除 name = list 中 值为 one 的值,并且只移除 2 个,多些移除数量不会报错 lrem list0 one # 移除 name= list 中所有的 one 值 ltrim list12 # ltrim 裁剪,将 name = list 的 list 下标 1 - 2 裁剪出来,直接影响原来的 list
组合命令
1
rpoplpush list list2 # 移除 list 右边最后一个值,并且放到 list2 中,可保持原子性
lset
设置固定下标的值为什么值
1 2 3 4 5 6 7 8 9 10 11 12
127.0.0.1:6379> lsetlist0 item # 没有 list ,数据库清空 (error) ERR no such key 127.0.0.1:6379> lpush list1 (integer) 1 127.0.0.1:6379> lrangelist0-1 1) "1" 127.0.0.1:6379> lsetlist0 item OK 127.0.0.1:6379> lrangelist0-1 1) "item" 127.0.0.1:6379> lsetlist1 item2 # 数组越界 (error) ERR index out of range
插入值
有
before
after
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
127.0.0.1:6379> flushdb OK 127.0.0.1:6379> rpush list 1 (integer) 1 127.0.0.1:6379> rpush list 2 (integer) 2 127.0.0.1:6379> lrange list 0-1 1) "1" 2) "2" 127.0.0.1:6379> linsert list before 23 (integer) 3 127.0.0.1:6379> lrange list 0-1 1) "1" 2) "3" 3) "2"