You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何遍历Redis键与对象并获取对应值?

嘿,我来帮你搞定这两个Redis遍历的问题,这些操作在日常开发里挺常用的,我分情况给你讲清楚,还附了实际场景示例~

1. 如何遍历Redis中的键以获取其对应值?

方式一:用KEYS命令(测试环境用,生产谨慎)

KEYS可以匹配指定模式的所有键,然后你可以逐个获取对应的值。不过注意KEYS会阻塞Redis实例,数据量大的时候千万别在生产环境用!

举个例子:
假设Redis里有这些键值对:user:1001"Alice"user:1002"Bob"order:2001"paid"

先执行:

KEYS user:*

会返回:1) "user:1001" 2) "user:1002"

然后遍历这些键,用GET获取值:

GET user:1001  # 返回 "Alice"
GET user:1002  # 返回 "Bob"

方式二:用SCAN命令(生产环境推荐)

SCAN是渐进式遍历,不会阻塞Redis,生产环境推荐。它每次返回一部分键,你需要循环调用直到返回的游标为0。

示例操作(redis-cli里的交互):

# 第一次调用,游标0,匹配user:*
SCAN 0 MATCH user:*
# 返回类似:1) "123" 2) 1) "user:1001" 2) "user:1002"
# 然后用返回的游标123继续调用,直到游标变成0
SCAN 123 MATCH user:*
# 直到返回游标0,说明遍历完成

拿到每个键之后,同样用GET(如果是字符串类型)或者对应类型的命令获取值。

2. 如何遍历Redis中的对象并获取所有值?

这里的“对象”应该指Redis的复合数据类型(Hash、List、Set、Sorted Set),每种类型有对应的命令直接获取所有值,不用手动遍历键:

情况1:Hash类型(键值对集合)

HGETALL命令可以直接获取Hash的所有字段和值,返回结果是字段和值交替的列表。如果只想获取所有值,用HVALS命令更直接。

示例场景:
假设Redis里有一个Hash对象user:profile:1001,包含:name"Alice"age"28"city"New York"

执行HGETALL

HGETALL user:profile:1001

返回结果:

1) "name"
2) "Alice"
3) "age"
4) "28"
5) "city"
6) "New York"

执行HVALS

HVALS user:profile:1001

返回:1) "Alice" 2) "28" 3) "New York"

情况2:List类型(有序列表)

LRANGE命令,指定起始索引0和结束索引-1(代表最后一个元素),就能获取所有值。

示例场景:
Redis里有一个Listuser:favorites:1001,元素是"book""movie""music"

执行:

LRANGE user:favorites:1001 0 -1

返回:1) "book" 2) "movie" 3) "music"

情况3:Set类型(无序唯一集合)

SMEMBERS命令直接获取所有元素,返回顺序不固定(因为Set是无序的)。

示例场景:
Redis里有一个Setuser:tags:1001,元素是"tech""travel""food"

执行:

SMEMBERS user:tags:1001

返回:1) "tech" 2) "travel" 3) "food"

情况4:Sorted Set类型(有序唯一集合)

ZRANGE命令,指定0-1,加上WITHSCORES可以同时获取分数和值,不加就只获取值(按分数从小到大排序)。

示例场景:
Redis里有一个Sorted Setrank:user,值和分数:"Alice" → 95,"Bob" → 88,"Charlie" → 92

执行不带分数的命令:

ZRANGE rank:user 0 -1

返回:1) "Bob" 2) "Charlie" 3) "Alice"

执行带分数的命令:

ZRANGE rank:user 0 -1 WITHSCORES

返回:

1) "Bob"
2) "88"
3) "Charlie"
4) "92"
5) "Alice"
6) "95"

内容的提问来源于stack exchange,提问作者Jenia Be Nice Please

火山引擎 最新活动