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

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
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)

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
9天前
|
存储 消息中间件 NoSQL
使用Java操作Redis数据类型的详解指南
通过使用Jedis库,可以在Java中方便地操作Redis的各种数据类型。本文详细介绍了字符串、哈希、列表、集合和有序集合的基本操作及其对应的Java实现。这些示例展示了如何使用Java与Redis进行交互,为开发高效的Redis客户端应用程序提供了基础。希望本文的指南能帮助您更好地理解和使用Redis,提升应用程序的性能和可靠性。
23 1
|
1月前
|
NoSQL Java Redis
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
这篇文章介绍了Redis的基本命令,并展示了如何使用Netty框架直接与Redis服务器进行通信,包括设置Netty客户端、编写处理程序以及初始化Channel的完整示例代码。
44 1
redis的基本命令,并用netty操作redis(不使用springboot或者spring框架)就单纯的用netty搞。
|
29天前
|
存储 消息中间件 NoSQL
Redis 数据类型
10月更文挑战第15天
36 1
|
12天前
|
存储 NoSQL Java
Redis命令:列表模糊删除详解
通过本文的介绍,我们详细探讨了如何在Redis中实现列表的模糊删除。虽然Redis没有直接提供模糊删除命令,但可以通过组合使用 `LRANGE`和 `LREM`命令,并在客户端代码中进行模糊匹配,来实现这一功能。希望本文能帮助你在实际应用中更有效地操作Redis列表。
25 0
|
1月前
|
缓存 NoSQL 测试技术
Redis如何解决频繁的命令往返造成的性能瓶颈!
Redis如何解决频繁的命令往返造成的性能瓶颈!
|
1月前
|
缓存 NoSQL Redis
Redis命令:列表模糊删除详解
Redis命令:列表模糊删除详解
47 3
|
1月前
|
NoSQL 关系型数据库 MySQL
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
本文全面阐述了Redis事务的特性、原理、具体命令操作,指出Redis事务具有原子性但不保证一致性、持久性和隔离性,并解释了Redis事务的适用场景和WATCH命令的乐观锁机制。
208 0
Redis 事务特性、原理、具体命令操作全方位诠释 —— 零基础可学习
|
29天前
|
NoSQL Redis 数据安全/隐私保护
Redis 命令
10月更文挑战第15天
25 0
|
2月前
|
存储 消息中间件 缓存
深入探析Redis常见数据类型及应用场景
深入探析Redis常见数据类型及应用场景
54 2
|
1月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
130 0