Redis常用命令
Redis 命令不区分大小,但 key 区分。
一、管理 及 通用命令
系统命令
## 帮助命令
help @类型
help @string
DB 管理命令
## 切换数据库【0-15】,默认为0
select dbindex
## 查看当前数据库key的数量
dbsize
## 清空当前库
flushdb
flushdb async
## 清空所有库
flushall
flushall async
key 操作命令
## 查看当前库所有 key
keys *
## 查看当前库是否存在 key
exists key
## 查看 key 的类型
type key
## 查看 key 过期时间(秒),-1表示永不过期,-2表示已过期
ttl key
## 为 key 设置过期时间
expire key 秒钟
## 删除指定的key数据。删除存在key返回 1,删除不存在key返回 0
del key
## 非阻塞删除,将 key 从 keyspace 元数据删除,真正数据删除在异步中执行
unlink key
## 移动 key 到给定的数据库 DB 中
move key dbindex[0-15]
scan 操作命令
- 当key过多时,避免使用keys * ,而是使用 scan
- 命令格式:scan cursor match pattern count count
- cursor:游标,第一次查询从 0 开始,后续查询使用上一次查询返回结果中的游标,如果上一次查询返回游标为 0, 则遍历结束。
- match pattern :匹配模式,匹配所有使用:*
- count count:指定从数据集中返回元素个数,默认10 ,不保证个数的一致性,只能大概率符合。
- 命令返回格式:
- 下一次查询游标数
- 本次查询结果集
- scan遍历为避免 字典扩容和缩容 对槽位遍历的重复和遗漏,采用了高位进位加法。
scan match * count 1
String 类型操作
## 【新增】
## 新增 key (永不过期)
set key value
## 新增 key,过期时间分别为:10s 、1000ms
set key value EX 10
set key value PX 1000
## 新增 key,以秒、毫秒时间戳的方式设置 key 过期时间点
## linux获取当前时间秒时间戳:date +%s
set key value PXAT 1710299373
set key value PXAT 1710299373000
## 【编辑】
## 编辑 key 值为 value 并保留 key 历史的过期时间
set key value keepttl
## key 不存在时设置。成功返回:0K,失败返回:(nil)
set key value NX
## key 存在时设置。成功返回:OK,失败返回:(nil)
set key value XX
## 设置 key 新值 并 获取旧值,旧值不存在返回:(nil)
set key newValue get
getset key newValue
## 向 key 对应字符串 value 后追加 value1
append key value
## value 为数字型可进行 数值增减 操作
## 为 key 的 value +1
INCR key
## 为 key 的 value +increment
INCRBY key increment
## 为 key 的 value -1
DECR key
## 为 key 的 value -increment
DECRBY key decrement
## 【查询】
## 获取 key 对应 value 的字符串长度
strlen key
## 获取 | 设置 指定区间范围内的值
set key 0123456789
## 获取全部,返回:0123456789
getrange key 0 -1
## 获取 前四位(包左也包右),返回:0123
getrange key 0 3
## 设置指定区间范围内的值,新值为:abc3456789
setrange key 1 abc
## 批量操作
mset key1 value1 key2 value2
mget key1 key2
## 要么全成功,要么全失败。返回成功插入个数
msetnx
List 类型操作
## 原理:双端链表
## 应用:栈、队列、消息队列
## 【新增】
lpush list_l 1 2 3 4 5
rpush list_r 1 2 3 4 5
## 【查询】
## 查询list 元素个数
llen list_l
## 查询 list:指定范围批量读取
lrange list_l 0 -1 ## 输出 5 4 3 2 1
lrange list_r 0 -1 ## 输出 1 2 3 4 5
## 查询list:指定索引单个读取
lindex list_l 1 ## 输出 5,没有数据输出 (nil)
## 【编辑】
## 编辑 查看 list 的值并删除(弹出)
lpop list_l ## 还剩数据 4 3 2 1
rpop list_l ## 还剩数据 4 3 2
## 编辑 截取指定范围的值后赋值给 key 的 value
ltrim list_l 1 2 ## 还剩数据 3 2
## 编辑 移除 list_l 最后一个元素,将该元素添加到 list_r 并返回该元素
rpoplpush list_l list_r ## list_l:3;list_r:3 1 2 3 4 5
## 编辑 替换 列表 指定 下标 位置数据为 指定值
lset list_r 3 6 ## 还剩数据 3 1 2 6 4 5
## 编辑 在 指定值 前插入 新值
linsert list_l before 1 2 ## 还剩数据 2 1,成功插入返回 列表总个数
## 编辑 在 指定值 前后插入 新值
linsert list_l after 1 3 ## 还剩数据 2 1 3,若指定值在列表中存在多个,返回 -1
## 编辑 list。从左到右遍历,删除 list_l 中 2 个 值为 1 的元素,返回值为实际删除的数量。
lrem list_l 2 1
lrem list_l 0 1 ## 0 标识删除 list_l 中所有值为 1 的元素
Hash 类型操作
## 【新增】
hset user:001 id 001 name zhangsan age 18 ## 存在 key 更新,不存在 新增
hmset user:001 id 001 name zhangsan ## hset 也可实现多个数据添加,且 hmset 已被废弃
## 【查询】
hget user:001 name
hmget user:001 id name
hmgetall user:001
## 返回 user:001 中 value 中的 k-v 键值对数量
hlen user:001
## 判断 user:001 中是否存在 name ,存在返回 1 不存在 返回 0
hexists user:001 name
## 返回 hash 中的 所有key || value
hkeys user:001
hvals user:001
## 【编辑】
## 将 hash 中 指定 key 对应的 value 增加 n(整数)
hincrby user:001 age 2 ## 返回 20
hincrby user:001 age -2 ## 返回 18
## ## 将 hash 中 指定 key 对应的 value 增加 n(浮点数)
hincrbyfloat user:001 age 2.0
## 存在无效,不存在赋值
hsetnx user:001 age 18 ## 成功返回 1,失败返回 0
## 【删除】
hdel user:001 id name
Set 类型操作
## 【新增】
sadd set1 v1 v2 v3
sadd set1 v3 v4
## 【查看】
## 遍历 集合 中的所有元素
smembers set1
## 查看 集合 中元素的个数
scard set1
## 判断 v1 是否在 key1 集合中
sismember set1 v1
## 集合中随机展现指定个数的元素,元素不删除
srandmember set1 3
## 【编辑】
## 返回成功删除的个数
srem set1 v1 v2
## 从集合中随机弹出一个元素,并删除
spop set1
## 将 key1 集合中存在的 v1 赋给 key2 集合
smove set1 set2 v1
## 【集合的运算】
## 计算 set1 和 set2 差集,属于 set1 但不属于 set2
sdiff set1 set2
## 计算 set1 和 set2 并集,属于 set1 或属于 set2
sunion set1 set2
## 计算 set1 和 set2 交集,属于 set1 且属于 set2
sinner set1 set2
Zset 类型操作
## 【新增】
sadd set1 v1 v2 v3
sadd set1 v3 v4
## 【查看】
## 遍历 集合 中的所有元素
smembers set1
## 查看 集合 中元素的个数
scard set1
## 判断 v1 是否在 key1 集合中
sismember set1 v1
## 集合中随机展现指定个数的元素,元素不删除
srandmember set1 3
## 【编辑】
## 返回成功删除的个数
srem set1 v1 v2
## 从集合中随机弹出一个元素,并删除
spop set1
## 将 key1 集合中存在的 v1 赋给 key2 集合
smove set1 set2 v1
## 【集合的运算】
## 计算 set1 和 set2 差集,属于 set1 但不属于 set2
sdiff set1 set2
## 计算 set1 和 set2 并集,属于 set1 或属于 set2
sunion set1 set2
## 计算 set1 和 set2 交集,属于 set1 且属于 set2
sinner set1 set2
ZSet 类型操作
## 【增加】
##zadd zsetkey score1 v1 score2 v2
zsdd score 21 zhang 32 li
## 【查看】
## zrange key start stop [withscores]
## 按照元素分从小到大 返回索引 start 到 stop 之间的所有元素
zrange score 0 -1
zrange score 0 -1 withscores
## zrevrange key start stop [withscores]
## 按照元素分从大到小 返回索引 start 到 stop 之间的所有元素
zrevrange score 0 -1
zrevrange score 0 -1 withscores
## ZRANGEBYSCORE key min max 【withscores】【limit offset count】
## 获取指定分数范围的元素,在min和max前加 ( 表示不包含,limit 分页
zrangebyscore score 60 100
zrangebyscore score 60 100 withscores
zrangebyscore score (60 100 withscores
zrangebyscore score 60 100 withscores limit 0 5
## zscore key member :获取指定元素分数
zscore score zhang
## zcard key : 统计集合中的数量
zcard score
## zcount key min max : 统计 指定分数内 元素个数
zcount score 60 100
## zrank key member [withscore] :通过 value 获取 正序 下标值
zrank score zhang
## zrevrank key member [withscore] :通过 value 获取 逆序 下标值
zrevrank score zhang
## 【删除】
## zrem key member [member ...] : 根据 value 值删除元素
zrem score zhang li
## zincrby key increment member : 为元素 member 增加 increment 分数
zincrby score 10 zhang
## zmpop numkeys key [key ...] MIN|MAX [COUNT count]
## numkeys :key 的数量;MIN|MAX:最大、最小;COUNT 弹出个数,默认一个。
## 从键名列表中第一个非空排序集中弹出一个或多个元素的 成员分数对
zsdd score_1 1 a 2 b 3 c 4 d
zsdd score_2 0 e
zmpop 1 score_1 min count 2 ## 输出 1 a 2 b
zmpop 2 score_1 score_1 min count 2 ## 输出 0 e 1 a
bitmap 位图 类型操作
bitmap 类型底层是 string。
## 【setbit key offset value 】为 key 的 offset 位置设置 value
## 【getbit key offset 】获取 key 的 offset 位置的 value
## 【bitcount key start end 】获取 key 的 start 到 end 之间值为 1 的数量
bitcount uid:loging 1 10
bitcount uid:loging 0 -1
## 【strlen key 】统计 key 数据占用字节数
## 【bitop operation(AND|OR|XOR|NOT) destkey key1 [key2 ...]】
## 对 key1 key2...中的数据按位进行 逻辑并 | 逻辑或 | 逻辑异或 | 逻辑非 结果保存至 destkey
setbit Monday 1001 1
setbit Monday 1002 1
setbit Monday 1003 0
setbit Monday 1004 0
setbit Tuesday 1001 1
setbit Tuesday 1002 0
setbit Tuesday 1003 1
setbit Tuesday 1004 0
bitop AND destkey Monday Tuesday ## 输出:1 0 0 0
bitop OR destkey Monday Tuesday ## 输出:1 1 1 0
## XOR 异或 相同为 0 不同为1
bitop XOR destkey Monday Tuesday ## 输出:0 1 1 0
bitop NOT destkey Monday ## 输出:0 0 1 1
HyperLogLog 基数统计 类型操作
## 【pfadd key element1[element2...]】添加成功返回 1
pfadd wuv 2 4 6 6 8 9
## 【pfcount key】统计 集合基数估算值
pfcount wuv ## 返回 5
## 【pfmerge destkey sourcekey1[sourcekey2...]】合并多个基数至 destkey
pfadd muv 1 2 2
pfmerge ouv wuv muv
pfcount ouv ## 返回 7
GEO 地理空间 类型操作
GEO类型底层是 zset。
## 【GEOADD key longitude latitude member [longitude latitude member]】
## GEOADD key名称 经度 纬度 位置名称
GEOADD city 116.403963 39.915119 "天安门" 116.403414 39.924091 "故宫"
116.024067 40.362639 "长城"
## 【GEOPOS key member [member]】
GEOPOS city 天安门 故宫
## 【GEODIST key member1 member2 [M|KM|FT|MI]】
## 计算 member1 、member2两个位置之间的距离,单位:m-米、km-千米、ft-英寸、mi-英里
GEODIST city member1 member2
## 【GEORADIUS key longitude latitude radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]】
## 返回 key 中以经度 longitude 维度 latitude 为中心距离 radius(M|KM|FT|MI)范围内的位置坐标。
## WITHDIST:返回位置距离中心点的距离;WITHCOORD:返回位置经纬度;WITHHASH:返回位置坐标的GEOHASH;COUNT:限制返回记录数。
GEORADIUS city
##【GEORADIUSBYMEMBER key member radius M|KM|FT|MI [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]】
##【GEOHASH key member】
## 计算 key 中 member 坐标的 hash 值
bitfield 位域 类型操作
## 位域(Bitfield)是一种用于操作位图的高级命令。通过位域命令,可以对位图中的指定位进行读取、设置、清除等操作。
Stream 流 类型操作
## TODO
分类:
【6.3】Redis
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律