Redis 十大数据类型命令及案例大全

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Redis 十大数据类型命令及案例大全

十大数据类型

官网:Commands | Redis

一图概览

Redis7 十大数据类型基本命令和案例脑图概览

✨✨🔶文章末尾有彩蛋哦
image.png一、字符串(String)

设置指定 key 的值

set key value

获取指定 key 的值

get key

返回 key 中字符串的子字符

getRange key start end

设置指定 key 的值,并返回旧值

getSet key value
set key value get

获取所有 key 值

keys *
mGet key1 key2 ...

设置指定 key 的值,并指定过期时间

以秒为单位

set key value ex seconds
setEx key seconds value
# 通过 ttl key 获取过期时间,-1 永不过期;-2 已过期

以毫秒为单位

pSetEx key millisecond value

更新数据并且保持原来的过期时间

set key value keepttl

当 key 不存在的时候设置 key 的值

setNx key value

从偏移量 offset 开始,覆盖原来的 value 值

setRange key offset value

返回 key 所存储的字符串的长度

strLen key

同时设置一个或多个 key-value 对

mSet key1 value2 key2 value2 ...

同时设置多个 key-value 对,当给定的 key 都不存在时

mSetNx key1 value2 key2 value2 ...

将 key 中存储的数值加一

incr key

指定增长量

incrBy key increment

指定增长的浮点增量值

incrByFloat key increment

将 key 中增长量的数值减一

decr key

指定 减量值

decrBy key increment

如果 key 存在且为字符串,将 value 值追加到末尾

append key value

二、列表(List)

添加元素

# 将一个或多个值插入到列表的头部
lpush key value1 value2 value3 ......
# 将一个或多个值插入到已存在的列表的头部
lpushx key value
# 将值插入到列表的尾部
rpush key value1 value2 value3 ......
# 将一个或多个值插入到已存在的列表的尾部
rpushx key value

遍历元素

# 遍历所有元素
lrange key  0 -1
# 遍历 索引范围为 start — top 的元素
lrange key start stop

移除并返回元素

# 移除并获取列表的第一个元素
lpop key
# 移除并获取列表的最后一个元素
rpop key

通过索引获取列表中的元素

lindex key index

获取列表的长度

llen key

在列表的元素前或后插入元素

# 在列表元素 pivot 前面插入 element
linsert key before pivot element
# 在列表元素 pivot 后面插入 element
linsert key after pivot element

通过索引设置元素的值

lset key index value

删除列表元素中重复的n个值

# 删除 N 个 值等于 value 的元素
lrem key N value

截取指定范围的值后赋值给key

ltrim key start stop

移除列表的最后一个元素并将该元素添加到另外一个列表并返回

# 将 key1 列表的最后一个元素移除,并添加到 key2 列表
rpoplpush key1 key2

三、哈希(Hash)

设置hash

# 将哈希表 key 中的字段 field 的值设为 value
hset key field value
# 同时将多个 field-value 对设置到 hash表 key 中
hmset key field1 value field2 value2 ......
# 当字段 field 不存在时,设置哈希表字段的值
hsetnx key field value

获取

# 获取存储在哈希表中指定字段的值
hget key field
# 获取所有给定的字段值
hmget key field1 field2 ......
# 获取在哈希表中指定 key 的所有字段和值
hgetall key
# 获取所有字段
hkeys key
# 获取所有值
hvals key

删除

# 删除一个或多个哈希表字段
hdel key field1 field2 ......

获取哈希表中字段的数量

hlen key

查看哈希表 key 中是否存在指定字段

hexists key field

哈希表 key 中指定字段 增加

# 为哈希表 key 中指定字段的整数数值加上增量 increment
hincrby key field increment
# 为哈希表 key 中指定字段的浮点数值加上增量 increment
hincrbyfloat key field increment

四、集合(Set)

向集合中添加成员

sadd key member1 [member2 ......]

遍历集合中的所有元素

smembers key

获取集合中的元素个数

scard key

判断元素是否在集合中

sismember key member

删除元素

# 删除集合中的一个或多个成员
srem key member1 [memeber2 ...]
# 随机删除 count 个元素并返回
spop key count
# 将 member 元素从 集合1 移动到 集合2
smove key1 key2 member

返回集合中一个或多个随机数

srandmember key count
# eg: 随机返回set1中的 n个随机数
srandmember set1 n

集合的运算

差集(A-B)

sdiff key1 [key2 ...]
# 返回给定所有集合的差集并存储在 destination 中
sdiffstore destination key1 [key2 ...]

并集(A∪B)

sunion key1 [key2 ...]
# 返回给定所有集合的并集并存储在 destination 中
sunionstore destination key1 [key2 ...]

交集(A∩B)

sinter key1 [key2 ...]
返回给定的所有集合的交集并存储在 destination 中
sinterstore destination key1 [key2 ...]
# redis7 新命令,不会返回结果集,返回结果的交集的基数(个数)
sintercard keyCount key1 [key2 ...]

五、有序集合(ZSet)

添加一个或多个成员

zadd key score1 member1 [score1 member1 ...]

通过索引区间返回有序集合指定区间内的成员

# 按照元素分数从底到高的顺序 withcores带分数
zrange key start stop [withcores]
# 按照元素分数从高到底的顺序 withcores带分数
zrevrange key start stop [withcores]
# 通过分数从低到高返回有序集合指定区间的成员
# 默认包含边界,( 表示不包含边界
zrangebyscore key min max [withscores] [limit offset count]
# 通过分数从高到低返回有序集合指定区间的成员
zrevrangebyscore key max min [withscores] [limit offset count]

获取元素的分数

zscore key member

获取集合中元素的数量

scard key

获取指定分数范围内的元素个数

zcount key min max

获取指定成员的索引

zrank key member
# 获取指定成员的索引,逆序
zrevrank key member

删除

zrem key member1 [member2 ...]
# 删除指定成员区间的所有成员
zremrangebylex key [memberStart [memberStop
# 删除指定索引区间(排名区间)的所有成员
zremrangebyrank key indexStart indexStop
# 删除指定的分数区间的所有成员
zremrangebyscore key minScore maxScore

增加某个元素的分数

zincrby key increment member

六、位图(bitmap)

给指定 key 的值的第 offset 赋值value

setbit key offset value
# value的值只能位 0 或者 1

获取指定 key 的第offset位

getbit key offset

统计字节数占用多少

strlen key

统计 1 的个数

bitcount key start end

对不同的二进制存储数据进行位运算(and、or、not、xor)

bitop operation destinationKey key
# eg:统计两天都连续签到的用户
#   将用户id和位置做映射,如下
#   用户 023uh 映射为 0
hset uid:map 0 023uh
#   用户 02rhh 映射为 1
hset uid:map 1 02rhh
# 模拟用户在 20240201 20240202 两天的登录
setbit 20240201 0 1
setbit 20240201 1 1
setbit 20240201 2 1
setbit 20240201 3 1
setbit 20240202 0 1
setbit 20240202 1 1
bitop and destinationKey 20240201 20240202
bitcount destinationKey

七、基数统计(HyperLoglog)

添加元素到HyperLoglog

pfadd key element1 [element2 ...]

获取基数估计值

pfcount key1 [key2 ...]

合并 HyperLoglog

pfmerge destinationKey sourceKey1 [sourceKey2 ...]

八、地理空间(GEO)

添加经纬度坐标

geoadd key longitude1 latitude1 member1 [longitude2 latitude2 member2 ...]

遍历

zrange key start end
zrange city 0 -1

返回元素的经纬度

geopos key member1 [member2 ...]
# geohash表示
geohash key member1 [member2 ...]

返回两个位置之间的距离

geodist key member1 member2

返回与给定的经纬度的中心位置不超过给定的最大距离的所有位置元素

# 以半径为中心,查找
georadius key longitude latitude radius m[km ...]
georadiusbymember key member radius m[km ...]

九、流(Stream)

添加消息到队列末尾

# 消息的 id必须要比上一个 id大,默认用 星号表示自动生成规则
xadd key id/*  field1 value1 [field2 value2 ...]
xadd mystream * id 11 cname z3

获取消息列表,忽略删除的消息

xrange key start end [count count]
# eg
xrange mystream - + count 4
# 反向获取,ID 从大到小
xrevrange key end start [count count]

删除消息

xdel key id1 [id2 ...]

获取消息长度

xlen key

对Stream长度进行截取,超长会进行截取

# 允许的最大长度
xtrim key maxlen mumber
# 允许的最小id,比该id小的值会被舍弃
xtrim key minid mumber

获取消息

# 非阻塞
xread [count count] streams key id1 [id2 ...]
# eg:
xread count 2 streams mystream $
xread count 2 streams mystream 0-0
# 阻塞
xread [count count] block milliseconds streams key id1 [id2 ...]
# eg:
xread count 1 block 0 streams mystream $

创建消费组

xgroup create key groupName id|$
# eg:
xgroup create mystream groupA $
xgroup create mystream groupB 0

读取消费者组中的消息

xreadgroup group groupName consumerName [count count] streams key
# eg:
xreadgroup group groupA consumer1 count 2 streams mystream >
xreadgroup group groupA consumer2 count 2 streams mystream >
xreadgroup group groupA consumer3 count 2 streams mystream >

获取消费组内所有消费者待处理的详细消息

# 查询每个消费组内所有消费者 [已读但未确认] 的消息
xpending key groupName
# 查看某个消费者具体读取了那些数据
xpending key groupName start stop count consumerName
# eg: 
xpending mystream groupA - + 10 consumer2

向消息队列确认消息处理完成

xack key groupName id
# eg:
xack mystream groupA 1679119688868-0

打印Stream、Consumer、Group的详细信息

xinfo stream key

十、位域(bitfield)

相关文章
|
4月前
|
存储 缓存 监控
Redis设计与实现——Redis命令参考与高级特性
Redis 是一个高性能的键值存储系统,支持丰富的数据类型(字符串、列表、哈希、集合等)和多种高级功能。本文档涵盖 Redis 的核心命令分类,包括数据类型操作、事务与脚本、持久化、集群管理、系统监控等。特别介绍了事务的原子性特性、Lua 脚本的执行方式及优势、排序机制、发布订阅模型以及慢查询日志和监视器工具的使用方法。适用于开发者快速掌握 Redis 常用命令及其应用场景,优化系统性能与可靠性。
|
19天前
|
存储 缓存 NoSQL
Redis基础命令与数据结构概览
Redis是一个功能强大的键值存储系统,提供了丰富的数据结构以及相应的操作命令来满足现代应用程序对于高速读写和灵活数据处理的需求。通过掌握这些基础命令,开发者能够高效地对Redis进行操作,实现数据存储和管理的高性能方案。
59 12
|
17天前
|
存储 消息中间件 NoSQL
【Redis】常用数据结构之List篇:从常用命令到典型使用场景
本文将系统探讨 Redis List 的核心特性、完整命令体系、底层存储实现以及典型实践场景,为读者构建从理论到应用的完整认知框架,助力开发者在实际业务中高效运用这一数据结构解决问题。
|
28天前
|
存储 缓存 人工智能
Redis六大常见命令详解:从set/get到过期策略的全方位解析
本文将通过结构化学习路径,帮助读者实现从命令语法掌握到工程化实践落地的能力跃迁,系统性提升 Redis 技术栈的应用水平。
|
2月前
|
NoSQL Redis
Lua脚本协助Redis分布式锁实现命令的原子性
利用Lua脚本确保Redis操作的原子性是分布式锁安全性的关键所在,可以大幅减少由于网络分区、客户端故障等导致的锁无法正确释放的情况,从而在分布式系统中保证数据操作的安全性和一致性。在将这些概念应用于生产环境前,建议深入理解Redis事务与Lua脚本的工作原理以及分布式锁的可能问题和解决方案。
129 8
|
2月前
|
存储 NoSQL 定位技术
Redis数据类型面试给分情况
Redis常见数据类型包括:string、hash、list、set、zset(有序集合)。此外还包含高级结构如bitmap、hyperloglog、geo。不同场景可选用合适类型,如库存用string,对象存hash,列表用list,去重场景用set,排行用zset,签到用bitmap,统计访问量用hyperloglog,地理位置用geo。
88 5
|
2月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
378 2
|
4月前
|
存储 缓存 NoSQL
Redis中的常用命令-get&set&keys&exists&expire&ttl&type的详细解析
总的来说,这些Redis命令提供了处理存储在内存中的键值对的便捷方式。通过理解和运用它们,你可以更有效地在Redis中操作数据,使其更好地服务于你的应用。
353 17
|
4月前
|
消息中间件 NoSQL Linux
Redis的基本介绍和安装方式(包括Linux和Windows版本),以及常用命令的演示
Redis(Remote Dictionary Server)是一个高性能的开源键值存储数据库。它支持字符串、列表、散列、集合等多种数据类型,具有持久化、发布/订阅等高级功能。由于其出色的性能和广泛的使用场景,Redis在应用程序中常作为高速缓存、消息队列等用途。
839 16
|
4月前
|
消息中间件 NoSQL Unix
Redis的基本特性以及其基础命令用法
这只是冰山一角,Redis的强大功能和简洁的操作方法值得我们深入了解和掌握,是复杂数据问题解决的有力工具。所以,来一场有趣的Redis冒险吧!
164 6