Redis数据操作 – 指令分类与应用速查

string

设置键值对覆盖旧值(可用于缓存json、缓存页面、存取二进制文件)

set key value

设置键值对覆盖并返回旧值(可用于清零)

getset key value

键值对有值时更新

set key value xx

键值对无值时创建(可用于分布式锁)

set key value nx

获取键对应的值

get key

删除键值对

del key

覆盖性设置多个键值对(用于存取对象)

mset key1 val1 key2 val2

获取多个键对应的值(用于获取对象)

mget key1 key2

多个键值仅无值时设值,当且仅当全部无值修改成功(用于不重复存对象)

msetnx key1 val1 key2 val2

获取键对应字符串值长度

strlen key

修改键对应的值中子串(闭区间,offset超过现有key端点自动扩容或补齐空白,可用于摘要)

setrange key offset substring

获取键对应的值中子串(闭区间,正数0始从左向右,倒数-1始从右向左)

getrange key start end

拼接字符串到键值末尾(可用于追加方式的存储日志)

append key content

整数值加法(上溢报错,仅限long long范围正确解析)

incrby key num

整数值减法(下溢报错,仅限long long范围正确解析)

decrby key num

整数值自增 (用于计数、次数限制、id生成计数等,原子操作)

incr key

整数值自减

decr key

浮点数加法(加负数实现减法,long double范围正确解析,可与整数运算)

incrbyfloat key num

hash

用于存储对象、存储映射关系(一对一、一对多)、存储会话、拆分存储数据结构
hash内存更小效率更高,string字段修改功能丰富

覆盖式设置key对应map的键值对

hset key field1 val1

map字段不存在时设置

hsetnx key field val

删除key对应map的键值对

hdel key field

查询key对应mapd的键值对

hget key field

一次性覆盖设置多组键值对(用于存储对象)

hmset key field1 val1 field2 val2

一次性查看多组键值对(用于查看对象)

hmget key field1 field2

查看key对应map的所有键

hkeys key

查看key对应map的所有值

hvals key

查看key对应map的所有键值对

hgetall key

查询key对应map的属性是否存在

hexists key field

map字段整数运算(加负数实现减法,仅解析正确时生效)

hincrby key field

map字段浮点数运算(加负数实现减法,仅解析正确时生效)

hincrbyfloat key field

获取map字段所存值长度

hstrlen key field

获取hash中所存map字段数量

hlen key

list

用于有序存储批量数据,可实现栈、队列(可用于秒杀场景、可实现消息队列、可用于即时通信)等线性结构,可用于分页,可存储二进制数据

create

左侧添加元素(头插法,用于入栈、入队列等,插入结果倒序序列)

lpush key val1

左侧添加多个元素

lpush key val1 val2

右侧添加元素(尾插法维护线性结构,插入结果正序序列)

rpush key val1

右侧添加多个元素

rpush key val1 val2

仅在list存在(有元素)时左侧添加一个或多个元素

lpushx key val1 val2

仅在list存在(有元素)时右侧添加一个或多个元素

rpushx key val1 val2

在指定内容元素左侧添加元素(无指定元素不操作返回-1)

linsert key before content val

在指定内容元素右侧添加元素(无指定元素不操作返回-1)

linsert key after content val

delete

左侧删除元素(用于出队列、出栈等)

lpop key

从待选多个list中选择第一个可lpop的list执行,若无满足list当前redis-cli阻塞timeout时间,直到任一list有数据可供弹出或达到超时时长返回,按FIFO原则解除阻塞(用于生产者、消费者模型,如用于消息队列)

blpop key1 key2 key3 timeout

右侧删除元素(用于出队列、出栈等)

rpop key

从待选多个list中选择第一个可rpop的list执行,若无满足list当前redis-cli阻塞timeout时间,直到任一list有数据可供弹出或达到超时时长返回,按FIFO原则解除阻塞(用于生产者、消费者模型,如用于消息队列)

brpop key1 key2 key3 timeout

删除指定内容元素(num=0删除所有匹配项,num>0删除左侧起始的num个匹配项,num<0右侧起始的num个匹配项)

lrem key num content

read

查看list指定索引元素(正序0左端点,倒序-1右端点)

lindex key index

查看list指定范围元素(闭区间,0左端点,-1右端点,单个区间端点超范围设为列表端点,可用于分页场景)

lrange key start end

查看list长度

llen key

update

设置指定下标元素(索引超限报错)

lset key index val

设置子list(闭区间)为新list

ltrim key start end

special

右删左进(同key可用于循环移位,不同key交换元素,仅要求source不为空)

rpoplpush sourcekey targetkey

阻塞式右删左进(source为空时阻塞,直到source不为空操作成功或达到超时时间解除阻塞)

brpoplpush sourcekey targetkey timeout

set

无序无重集合,可用于唯一值缓存(不同用户数统计),存储一对多、多对多映射(朋友关系、分类标签等),集合并差交集运算(共同好友、多条件查询等场景)

create

向set中非重添加值(若无则创建)

sadd key val [val2 ...]

delete

删除set中指定内容的元素(仅删除匹配项)

srem key val1 [val2 ...]

随机删除指定数目元素(num仅正数生效)

spop key [num]

read

查看set中所有元素

smembers key

查看set中是否包含指定内容元素

sismember key val

查看指定set中元素个数

scard key

随机读取集合中指定元素个数(概率相关,如抽奖)

# 0<num<size,随机读num个不重复元素
# num>size,输出set
# num<0,随机读取num个可重复元素
srandmember key [num]

special

将指定元素移至另一个集合

smove srcKey tarKey val

集合并集

# 多集合并集
sunion key1 key2
# 多集合求并集并覆盖式保存为新的集合
sunionstore newKey key1 key2

集合差集

# 多集合顺序求差集
sdiff key1 key2
# 多集合求差集并覆盖式保存为新的集合
sdiffstore newKey key1 key2

集合交集

# 多集合交集
sinter key1 key2
# 多集合求交集并覆盖式保存为新的集合
sinterstore newKey key1 key2

zset

create & update

覆盖式增加一个或多个分值为score的成员name,默认相同分值按字典升序存储

zadd key score name [score1 name1 ...]
# 完整指令
zadd key [nx|xx]    # xx成员存在时更新,nx成员不存在时创建
[gt|lt]             # lt命令中score小于目标成员score则更新,目标成员不存在则创建成员;gt反之
[ch]                # ch返回被修改成员数量
[incr]              # 可用作自增主键
score name [score1 name1 ...] # 添加多项成员

delete

删除一个或多个指定成员(zset保证成员唯一性)

zrem key name [name1 name2...]

范围删除成员(按分数)

# 默认取升序分值[min, max]范围成员,(开区间,[闭区间,两端-inf,+inf
zremrangebyscore key min max

范围删除成员(按排名)

# 升序排名下标从0开始,倒序从-1开始,闭区间
zremrangebyrank key min max

范围删除成员(按顺序字典序)

zremrangebylex key min max

弹出单集合的topN

# 默认弹出一个,除非指定N
zpopmax key [N]
zpopmin key [N]
# 依次从匹配的集合中弹出topN,而非全局topN
zmpop keycounts key1 [key2 ...] <min | max> [count N]

阻塞式弹出最小值、阻塞式弹出最大值

bzpopmin key1 key2 timeout
bzpopmin key1 key2 timeout

read

查看成员分值

zscore key name
# 查看多个成员分值
zmscore key name [name1 ...]

查看成员排名

# 查看升序排名
zrank key name
# 查看降序排名
zrevrank key name

查看范围成员(按排名)

# 查看升序下标范围,(index开区间,[index闭区间,0左端点,-1右端点
zrange key begin end
# 查看降序范围
zrevrange key begin end
# zrange完整指令
zrange key begin end
[rev]                   # rev倒序
[byscore|bylex]         # byscore根据分数排,bylex根据字典序排
[limit offset count]    # limit支持分页,offset开始位置,count总数
[withscores]            # withscores显示成员分数

查看范围成员(按分值)

# 默认取升序分值[min, max]范围成员,(开区间,[闭区间,两端-inf,+inf
zrangebyscore key min max
# 查看降序排名范围成员
zrevrangebyscore key max min
# limit支持分页,offset开始位置,count总数,withscores显示成员分数
zrangebyscore key min max [withscores] [limit offset count]

查看范围成员(按字典序,要求集合所有成员分值相同)

# 取字典升序(min, max]范围成员,(开区间,[闭区间,字典序最小-,字典序最大+
zrangebylex key (min [max [limit offset count]
# 取字典序降序
zrevrangebylex key min max

集合元素计数

zcard key

按分值范围成员计数

# 默认计数[min, max]范围成员,(开区间,[闭区间,两端-inf,+inf
zcount key min max

按字典序范围成员计数

# 取字典升序(min, max]范围成员,(开区间,[闭区间,字典序最小-,字典序最大+
zlexcount key (min [max

随机获取成员

# count指定成员个数,正数为非重复个数,负数为可重复个数
zrandmember key [count] [WITHSCORES]

special

交集运算

# 指定参与运算的集合及数量,并产生临时结果输出,重复元素分值默认求和
zinter keycounts key1 key2
# 指定参与运算的集合及数量,并将结果存为新集合
zinterstore newKey keycounts key1 key2
# 完整zinter命令
zinter keycounts key [key ...]
[weights weight [weight ...]] # 加权平均方式计算结果集各成员新分值,不指定默认均为1
[aggregate <sum | min | max>] # 计算重复元素的新分值:取重复成员加权分值和或加权最值
[withscores] # 展示结果集分数
# 完整zinterstore命令
zinterstore newkey keycounts key1 [key2 ...]
[weights weight [weight ...]]
[aggregate sum|min|max]
# 返回交集运算结果集limit后的实际数目
zintercard keycounts key1 [key2 ...] [limit count]

并集运算

# 指定参与运算的集合及数量,并产生临时结果输出,重复元素分值默认求和
zunion keycounts key1 key2
# 指定参与运算的集合及数量,并将结果存为新集合
zunionstore newKey keycounts key1 key2
# 完整zunion命令
zunion keycounts key [key ...]
[weights weight [weight ...]] # 加权平均方式计算结果集各成员新分值,不指定默认均为1
[aggregate <sum | min | max>] # 计算重复元素的新分值:取重复成员加权分值和或加权最值
[withscores] # 展示结果集分数
# 完整zunionstore命令
zunionstore newkey keycounts key [key ...]
[weights weight [weight ...]]
[aggregate sum|min|max]

差集运算

zdiff keycounts key1 [key2 ...] [withscores]
zdiffstore newkey keycounts key1 [key2 ...]

加减运算(加负数实现减法)

zincrby key num name

参考资料

黄健宏. Redis使用手册[M]. 1. 机械工业出版社, 2019.
Redis命令官方文档

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

©2018-2024 Howell版权所有 备案号:冀ICP备19000576号