Redis命令
String
常用命令
String - 常用指令 - 表格清单
命令 | 描述 |
---|---|
set key val | -- |
get key | -- |
exists key | -- |
strlen key | -- |
del key | -- |
mset key1 val1 key2 val2 | 批量 |
mget key1 key2 | -- |
expire key time | 过期时间 |
setex key time val | -- |
ttl key | -- |
incr key | 整数long / 双精度浮点数double 操作 |
decr key | -- |
incrby key amount | -- |
decrby key amount | -- |
incrbyfloat key amount | -- |
- set key val
- get key
- exists key
- strlen key
- del key
127.0.0.1:6379> set key value #设置 key-value 类型的值
OK
127.0.0.1:6379> get key # 根据 key 获得对应的 value
"value"
127.0.0.1:6379> exists key # 判断某个 key 是否存在
(integer) 1
127.0.0.1:6379> strlen key # 返回 key 所储存的字符串值的长度。
(integer) 5
127.0.0.1:6379> del key # 删除某个 key 对应的值
(integer) 1
127.0.0.1:6379> get key
(nil)
- mset key1 val1 key2 val2
- mget key1 key2
OK
127.0.0.1:6379> mget key1 key2 # 批量获取多个 key 对应的 value
1) "value1"
2) "value2"
- expire key time
- setex key time val
- ttl key
127.0.0.1:6379> expire key 60 # 数据在 60s 后过期
(integer) 1
127.0.0.1:6379> setex key 60 value # 数据在 60s 后过期 (setex:[set] + [ex]pire)
OK
127.0.0.1:6379> ttl key # 查看数据还有多久过期
(integer) 56
- set key val[val == 整数long / 双精度浮点数double,即使是字符串只要能被解释为整数都可以对其进行增、减操作,空串或者不存在的key会当成0处理]
- incr key[自增1]
- get key
- decr key[自减1]
- incrby key amount[在原有值上加上long,long值可以为负数]
- decrby key amount[原有值 - long]
- incrbyfloat key amount[原有值 + double]
- 无 decrbyfloat key amount 命令
OK
127.0.0.1:6379> incr number # 将 key 中储存的数字值增一
(integer) 2
127.0.0.1:6379> get number
"2"
127.0.0.1:6379> decr number # 将 key 中储存的数字值减一
(integer) 1
127.0.0.1:6379> get number
"1"
使用场景
- 当做计数器使用
- 获取用户访问次数
- 热点文章的点赞转发数量
list
常用命令
list - 常用指令 - 表格清单
命令 | 描述 |
---|---|
lpush list val1 [val2 ...] | -- |
lpop list | -- |
lindex list index | -- |
lrange list startIndex endIndex | -- |
llen list | -- |
ltrim list startIndex endIndex | 裁剪 |
blpop key1 [key2 ...] timeout | 阻塞式 |
brpop key1 [key2 ...] timeout | -- |
rpoplpush keyFrom keyTo | -- |
brpoplpush keyFrom keyTo timeout | -- |
- lpush list val1 [val2 ...]
- lpop list
- lindex list index
- lrange list startIndex[从0开始] endIndex[-1表示所有元素] --[可以实现分页查询]
- llen list
- ltrim list startIndex endIndex
- rpush list val1 [val2 ...]
- rpop list
# lpush & rpush,返回当前列表的长度
127.0.0.1:6379> lpush list xx
(integer)1
127.0.0.1:6379> lrange list 0 -1
1)"xx"
127.0.0.1:6379> rpush list yy
(integer)2
127.0.0.1:6379> lindex list 1
"yy"
# lpop & rpop,移除并返回弹出的值
127.0.0.1:6379> rpop list
"yy"
127.0.0.1:6379> lpop list
"xx"
127.0.0.1:6379> lrange list 0 -1
(empty list or set) # 目前为空列表
127.0.0.1:6379> llen list
(integer)0
# ltrim: 只保留 [startIndex, endIndex] 闭区间的元素
127.0.0.1:6379> rpush list aa
(integer) 1
127.0.0.1:6379> rpush list bb
(integer) 2
127.0.0.1:6379> rpush list cc
(integer) 3
127.0.0.1:6379> rpush list dd
(integer) 4
127.0.0.1:6379> rpush list ee
(integer) 5
127.0.0.1:6379> lrange list 0 -1
1) "aa"
2) "bb"
3) "cc"
4) "dd"
5) "ee"
127.0.0.1:6379> ltrim list 2 -1
OK
127.0.0.1:6379> lrange list 0 -1
1) "cc"
2) "dd"
3) "ee"
阻塞式弹出命令 & 列表间移动命令
- blpop key1 [key2 ...] timeout
- brpop key1 [key2 ...] timeout
- rpoplpush keyFrom keyTo
- brpoplpush keyFrom keyTo timeout
127.0.0.1:6379> rpush yh aa bb cc dd ee
(integer) 5
127.0.0.1:6379> lrange yh 0 -1
1) "aa"
2) "bb"
3) "cc"
4) "dd"
5) "ee"
127.0.0.1:6379> rpush bx mm nn xx yy zz
(integer) 5
127.0.0.1:6379> lrange bx 0 -1
1) "mm"
2) "nn"
3) "xx"
4) "yy"
5) "zz"
# rpoplpush: 从 keyFrom 弹出最右端元素,并压入 keyTo 最左端,并向用户返回这个元素
127.0.0.1:6379> rpoplpush yh bx
"ee" # 将 yh 最右端元素 ee 压入 bx 最左端
127.0.0.1:6379> lrange yh 0 -1
1) "aa"
2) "bb"
3) "cc"
4) "dd"
127.0.0.1:6379> lrange bx 0 -1
1) "ee"
2) "mm"
3) "nn"
4) "xx"
5) "yy"
6) "zz"
# brpoplpush: 同 rpoplpush,若 keyFrom 为空,则在 timeout 秒内阻塞并等待可弹出的元素出现
127.0.0.1:6379> brpoplpush yh bx 2
"dd"
127.0.0.1:6379> lrange yh 0 -1
1) "aa"
2) "bb"
3) "cc"
127.0.0.1:6379> lrange bx 0 -1
1) "dd"
2) "ee"
3) "mm"
4) "nn"
5) "xx"
6) "yy"
7) "zz"
# blpop: 从第一个非空列表开始每次弹出最左端元素,或在 timeout 秒内阻塞并等待可弹出的元素出现
127.0.0.1:6379> blpop bx yh 1
1) "bx"
2) "dd" # bx 列表非空,从它开始弹栈
127.0.0.1:6379> blpop bx yh 1
1) "bx"
2) "ee"
127.0.0.1:6379> blpop bx yh 1
1) "bx"
2) "mm"
127.0.0.1:6379> blpop bx yh 1
1) "bx"
2) "nn"
127.0.0.1:6379> blpop bx yh 1
1) "bx"
2) "xx"
127.0.0.1:6379> blpop bx yh 1
1) "bx"
2) "yy"
127.0.0.1:6379> blpop bx yh 1
1) "bx"
2) "zz" # 此时 bx 列表已空,yh 非空,下一次弹 yh 中的元素
127.0.0.1:6379> blpop bx yh 1
1) "yh"
2) "aa" # yh 列表弹栈
127.0.0.1:6379> lrange yh 0 -1
1) "bb"
2) "cc"
127.0.0.1:6379> lrange bx 0 -1
(empty list or set)
# brpop
127.0.0.1:6379> brpop bx yh 1
1) "yh"
2) "cc"
127.0.0.1:6379> brpop bx yh 1
1) "yh"
2) "bb"
127.0.0.1:6379> lrange yh 0 -1
(empty list or set)
127.0.0.1:6379> brpop bx yh 1
(nil)
(1.02s) # yh & bx 均空,等待时间内也没有元素可弹出
【注1】由于没有 rrange 和 rlen 命令,因此不论是实现队列还是栈,最好是使用 rpush 从右侧压栈,再通过 lpop 左侧弹栈实现队列,或者 rpop 右侧弹栈实现栈。
使用场景
- 发布与订阅
- 消息传递
- 任务队列
- 慢查询
set
常用命令
set - 常用指令 - 表格清单
命令 | 描述 |
---|---|
sadd set val1 [val2 ...] | -- |
srem set val1 [val2 ...] | -- |
spop set [count] | -- |
scard set | -- |
srandmember set [count] | -- |
sismember set val | -- |
smembers myset | -- |
smove setFrom setTo val | -- |
sunion set1 [set2 ...] | 组合 & 关联多个集合 |
sunionstore newset set1 [set2 ...] | -- |
sinter set1 [set2 ...] | -- |
sinterstore newset set1 [set2 ...] | -- |
sdiff set1 [set2 ...] | -- |
sdiffstore newset set1 [set2 ...] | -- |
- sadd set val1 [val2 ...]
- srem set val1 [val2 ...]
- spop set [count]
- scard set
- srandmember set [count]
- sismember set val
- smembers myset
- smove setFrom setTo val
# sadd & smembers
127.0.0.1:6379> sadd yh aa bb cc dd ee
(integer) 5
127.0.0.1:6379> smembers yh
1) "bb"
2) "aa"
3) "cc"
4) "dd"
5) "ee"
# srem: remove
127.0.0.1:6379> srem yh ee xx yy zz
(integer) 1
127.0.0.1:6379> smembers yh
1) "aa"
2) "bb"
3) "cc"
4) "dd"
# scard: 返回 set 元素数量
127.0.0.1:6379> scard yh
(integer) 4
# spop: 随机移除 set 中一个或多个元素
127.0.0.1:6379> spop yh 2
1) "aa"
2) "cc"
127.0.0.1:6379> smembers yh
1) "bb"
2) "dd"
# srandmember: 随机返回 set 中一个或多个元素,count 为正时,返回元素不可重复;为负时,可重复
127.0.0.1:6379> srandmember yh 3
1) "bb"
2) "dd"
127.0.0.1:6379> srandmember yh -5
1) "dd"
2) "bb"
3) "bb"
4) "bb"
5) "dd"
# sismember
127.0.0.1:6379> sismember yh xx
(integer) 0
127.0.0.1:6379> sismember yh bb
(integer) 1
# smove
127.0.0.1:6379> smove yh bx xx
(integer) 0
127.0.0.1:6379> smove yh bx bb
(integer) 1
127.0.0.1:6379> smembers yh
1) "dd"
127.0.0.1:6379> smembers bx
1) "bb"
- sunion set1 [set2 ...]
- sunionstore newset set1 [set2 ...]
- sinter set1 [set2 ...]
- sinterstore newset set1 [set2 ...]
- sdiff set1 [set2 ...]
- sdiffstore newset set1 [set2 ...]
127.0.0.1:6379> sadd yh aa bb cc dd ee
(integer) 5
127.0.0.1:6379> sadd bx mm nn xx yy zz
(integer) 5
# sunion & sunionstore: 并集
127.0.0.1:6379> sunion yh bx
1) "xx"
2) "nn"
3) "yy"
4) "cc"
5) "dd"
6) "ee"
7) "mm"
8) "zz"
9) "aa"
10) "bb"
127.0.0.1:6379> sunionstore yh_or_bx yh bx
(integer) 10
# sinter & sinterstore: 交集
127.0.0.1:6379> sinter yh bx
(empty list or set)
127.0.0.1:6379> sinterstore yh_and_bx yh bx
(integer) 0
# sdiff & sdiffstore: 差集 - 只存在 set1 中且不存在其他 set 中
127.0.0.1:6379> sdiff yh bx
1) "bb"
2) "aa"
3) "cc"
4) "dd"
5) "ee"
127.0.0.1:6379> sdiffstore yh_diff_bx yh bx
(integer) 5
使用场景
- 存放数据不能重复
- 求交、并、差集
sorted set
常用命令
sorted set - 常用指令 - 表格清单
命令 | 描述 |
---|---|
zadd zset score1 val1 [score2 val2 ...] | -- |
zcard zset | -- |
zrange zset startIndex endIndex [withscores] | -- |
zrank zset val | -- |
zscore zset val | -- |
zincrby zset increment val | -- |
zcount zset min max | -- |
zrem zset val | -- |
zrevrank zset val | 逆序-由大到小 |
zrevrange zset startIndex endIndex [withscores] | -- |
zrangebyscore zset min max [withscores] [limit offset count] | -- |
zrevrangebyscore zset max min [withscores] [limit offset count] | -- |
zremrangebyrank zset startIndex endIndex | -- |
zremrangebyscore zset min max | -- |
zunionstore newzset set-number set1 [set2 ...] [aggregate sum/max/min] | -- |
zinterstore newzset set-number set1 [set2 ...] [aggregate sum/max/min] | -- |
- zadd zset score1 val1 [score2 val2 ...]
- zcard zset
- zrange zset startIndex endIndex [withscores]
- zrank zset val
- zscore zset val
- zincrby zset increment val
- zcount zset min max
- zrem zset val
# zadd
127.0.0.1:6379>
(integer) 5
127.0.0.1:6379> zadd bx 2 mm 4 nn 6 xx 8 yy 10 zz
(integer) 5
# zcard: 返回元素数量
127.0.0.1:6379> zcard yh
(integer) 5
# zrange: 返回有序集合排名位于 startIndex - endIndex 闭区间的元素,还可带 score 值返回,集合按照 score 值从小到大排列
127.0.0.1:6379> zrange yh 0 -1 withscores
1) "aa"
2) "1"
3) "bb"
4) "3"
5) "cc"
6) "5"
7) "dd"
8) "7"
9) "ee"
10) "9"
127.0.0.1:6379> zrange bx 0 10
1) "mm"
2) "nn"
3) "xx"
4) "yy"
5) "zz"
# zrank: 返回有序集合中某元素的排名
127.0.0.1:6379> zrank bx yy
(integer) 3
# zscore: 返回有序集合中某元素的 score
127.0.0.1:6379> zscore bx yy
"8"
# zincrby: 给有序集合中某元素的 score 值加上 increment
127.0.0.1:6379> zincrby bx 10 yy
"18"
# zcount: 返回有序集合中 score 介于 min - max 之间的元素数量
127.0.0.1:6379> zcount bx 0 5
(integer) 2
127.0.0.1:6379> zrange bx 0 -1 withscores
1) "mm"
2) "2"
3) "nn"
4) "4"
5) "xx"
6) "6"
7) "zz"
8) "10"
9) "yy"
10) "18"
# zrem: 移除有序集合中某一个或几个元素
127.0.0.1:6379> zrem bx zz
(integer) 1
127.0.0.1:6379> zrange bx 0 -1
1) "mm"
2) "nn"
3) "xx"
4) "yy"
- zrevrank zset val
- zrevrange zset startIndex endIndex [withscores]
- zrangebyscore zset min max [withscores] [limit offset count]
- zrevrangebyscore zset max min [withscores] [limit offset count]
- zremrangebyrank zset startIndex endIndex
- zremrangebyscore zset min max
127.0.0.1:6379> zadd yh 1 aa 3 bb 5 cc 7 dd 9 ee
(integer) 5
# zrevrange: 排名由大到小
127.0.0.1:6379> zrevrange yh 0 -1
1) "ee"
2) "dd"
3) "cc"
4) "bb"
5) "aa"
# zrangebyscore: 由小到大取分值介于5-9之间的元素,同时排除第0个元素,最多返回5个元素
127.0.0.1:6379> zrangebyscore yh 5 9 withscores limit 1 5
1) "dd"
2) "7"
3) "ee"
4) "9"
# zrevrangebyscore: 由大到小取分值介于9-5之间的元素,同时排除第0个元素,最多返回5个元素
127.0.0.1:6379> zrevrangebyscore yh 9 5 limit 1 5
1) "dd"
2) "cc"
# zremrangebyrank: 移除由小到大排名位于第1-1的元素
127.0.0.1:6379> zremrangebyrank yh 1 1
(integer) 1
127.0.0.1:6379> zrange yh 0 -1
1) "aa"
2) "cc"
3) "dd"
4) "ee"
# zremrangebyscore: 移除由小到大分值位于9-9的元素
127.0.0.1:6379> zremrangebyscore yh 9 9
(integer) 1
127.0.0.1:6379> zrange yh 0 -1
1) "aa"
2) "cc"
3) "dd"
- zunionstore newzset set-number set1 [set2 ...] [aggregate sum/max/min]
- zinterstore newzset set-number set1 [set2 ...] [aggregate sum/max/min]
127.0.0.1:6379> zadd yh 1 aa 2 bb 3 cc
(integer) 3
127.0.0.1:6379> zadd bx 2 bb 3 cc 4 dd
(integer) 3
127.0.0.1:6379> sadd tun bb xx
(integer) 2
# zunionstore: 求三个集合的并集,无序集合按照score为1计算,aggregate默认sum
127.0.0.1:6379> zunionstore zunion 3 yh bx tun
(integer) 5
127.0.0.1:6379> zrange zunion 0 -1 withscores
1) "aa"
2) "1"
3) "xx"
4) "1"
5) "dd"
6) "4"
7) "bb"
8) "5"
9) "cc"
10) "6"
# zinterstore: 求三个集合的交集,aggregate有 sum/max/min 三种形式
127.0.0.1:6379> zinterstore zinter 3 yh bx tun aggregate max
(integer) 1
127.0.0.1:6379> zrange zinter 0 -1 withscores
1) "bb"
2) "2"
使用场景
- 礼物排行榜
- 直播间排行榜
- 弹幕消息
hash
常用命令
hash - 常用指令 - 表格清单
命令 | 描述 |
---|---|
hmset object key1 val1 [key2 val2 ...] | -- |
hmget object key1 [key2 ...] | -- |
hlen object | -- |
hexists object key | -- |
hgetall object | -- |
hkeys object | -- |
hvals object | -- |
hdel object key1 [key2 ...] | -- |
hincrby object key increment | 逆序-由大到小 |
hincrbyfloat object key increment | -- |
- hmset object key1 val1 [key2 val2 ...]
- hmget object key1 [key2 ...]
- hlen object
- hexists object key
- hgetall object
- hkeys object
- hvals object
- hdel object key1 [key2 ...]
- hincrby object key increment
- hincrbyfloat object key increment
# hmset & hmget
127.0.0.1:6379> hmset pili jianzixianji 1 shuloulongxiu 2 fojianfenshuo 3
OK
127.0.0.1:6379> hmget pili jianzixianji shuloulongxiu fojianfenshuo
1) "1"
2) "2"
3) "3"
# hlen
127.0.0.1:6379> hlen pili
(integer) 3
# hexists
127.0.0.1:6379> hexists pili suhuanzhen
(integer) 0
# hkeys & hvals & hgetall
127.0.0.1:6379> hkeys pili
1) "jianzixianji"
2) "shuloulongxiu"
3) "fojianfenshuo"
127.0.0.1:6379> hvals pili
1) "1"
2) "2"
3) "3"
127.0.0.1:6379> hgetall pili
1) "jianzixianji"
2) "1"
3) "shuloulongxiu"
4) "2"
5) "fojianfenshuo"
6) "3"
# hdel
127.0.0.1:6379> hdel pili jianzixianji shuloulongxiu
(integer) 2
# hincrby & hincrbyfloat: 在原来 val 值之上增加 increment
127.0.0.1:6379> hincrby pili fojianfenshuo 1
(integer) 4
127.0.0.1:6379> hincrbyfloat pili fojianfenshuo -5
"-1"
使用场景
- 存储对象数据,例如JSONObject
bitmap
常用指令
- setbit key index val[0/1]
- getbit key index
- bitcount key
- bitop operation newkey key1 key2 [key3 ...]
- append key value
- setrange key index value
- getrange key index value
- setbit key index value
- getbit key index value
127.0.0.1:6379> setbit mykey 7 1
(integer) 0
127.0.0.1:6379> getbit mykey 7
(integer) 1
127.0.0.1:6379> setbit mykey 8 1
(integer) 0
# 通过 bitcount 统计被被设置为 1 的位的数量。
127.0.0.1:6379> bitcount mykey
(integer) 2
# bitop对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。
# bitop 命令支持 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种参数
# bitop operation destkey key [key ...]
127.0.0.1:6379> bitop and desk1 20210308 20210309
127.0.0.1:6379> set tmp 5
OK
# append: 将val添加到key末尾,返回当前字符串长度,key可以不存在默认为空串之后key便存在
127.0.0.1:6379> append tmp 1
(integer) 2
127.0.0.1:6379> get tmp
"51"
# setrange: 将从index开始的子串设置为val,index加上val长度可以超出原有val长度,返回当前字符串长度
127.0.0.1:6379> set tmp 123456
OK
127.0.0.1:6379> setrange tmp 0 yh
(integer) 6
127.0.0.1:6379> get tmp
"yh3456" # yh 替换了 12
127.0.0.1:6379> setrange tmp 8 bx
(integer) 10
127.0.0.1:6379> get tmp
"yh3456\x00\x00bx" # 将本来不存在的index从8开始替换为了 bx,tmp 长度变长
使用场景
- 保持用户状态信息,例如是否登录,是否签到,是否点赞或者转发等
- 获取/统计用户在线状态(例1)
- 统计活跃用户(例2)
- 用户行为分析,点赞或者转发了哪些内容(例3)
setbit (自定义)key (用户id)index 0/1
// 例 1:
127.0.0.1:6379> setbit online 2754179 1
setbit (日期)key (用户id)index 0/1
// 例 2:
127.0.0.1:6379> setbit 20211207 2754179 1
(integer) 0
127.0.0.1:6379> setbit 20211207 9643884 1
(integer) 0
127.0.0.1:6379> setbit 20211208 2754179 1
(integer) 0
# 统计21/12/07-21/12/08两天都在线用户数 -- [1]
127.0.0.1:6379> bitop and andbit 211207 211208
(integer) 1205486
127.0.0.1:6379> bitcount andbit
(integer) 1
# 统计21/12/07-21/12/08两天至少一天在线用户数 -- [2]
127.0.0.1:6379> bitop or orbit 211207 211208
(integer) 1205486
127.0.0.1:6379> bitcount orbit
(integer) 2
setbit (自定义)key (用户id)index 0/1
// 例 1:
127.0.0.1:6379> setbit article123456 2754179 1
其他命令
排序 - sort
可以对 list、set、zset 进行排序
基本Redis事务
multi
exec
当 Redis 从一个客户端那里接收到 multi 命令时,Redis 会将这个客户端之后发送的所有命令都放入一个队列中,直到这个客户端发送 exec 命令,然后 Redis 会在不被其他客户端打断的情况下,一个接一个地执行存储在队列里的命令。
键的过期时间
命令 | 描述 |
---|---|
presist key | 移除键的过期时间 |
ttl key | 查看距离键过期时间还有多少秒 |
pttl key | 查看距离键过期时间还有多少毫秒 |
expire key seconds | 给键设置过期时间(秒) |
pexpire key milliseconds | 给键设置过期时间(毫秒) |
expireat key timestamp | 给键的过期时间设置 UNIX 时间戳 |
pexpireat key timestamp | 给键的过期时间设置(毫秒级别) UNIX 时间戳 |