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 时间戳