如何用单个Redis命令同时获取String与Hash类型的值?
如何用单个Redis命令同时获取String类型值和Hash字段值?
首先得明确:HMGET只能针对单个Hash键批量获取其下的多个字段值,没法跨类型操作String键,所以你用它肯定拿不到String类型的value1。
要实现单个命令同时获取不同类型键的值,最通用的方案是用Redis的EVAL执行Lua脚本——Lua脚本可以在Redis中原子性地执行多个命令,一次性返回组合结果。
具体实现
执行以下命令即可同时获取key1的String值和key3中field3的Hash值:
EVAL "return {redis.call('GET', KEYS[1]), redis.call('HGET', KEYS[2], ARGV[1])}" 2 key1 key3 field3
- 脚本逻辑:调用
GET获取String键值,调用HGET获取Hash字段值,最后把两个结果打包成数组返回 - 参数说明:
2表示后面有2个键参数(key1、key3),ARGV[1]对应传入的field3
执行后Redis会返回类似["value1", "value3"]的结果,顺序和脚本中调用命令的顺序一致。
补充说明
- 这个方法是原子性的:Lua脚本在Redis中是单线程执行的,执行过程不会被其他命令打断,避免了多命令执行时的中间状态不一致问题
- 如果需要重复执行这个逻辑,可以把脚本用
SCRIPT LOAD加载到Redis,之后用EVALSHA调用脚本哈希值,减少每次传输脚本的开销
内容的提问来源于stack exchange,提问作者RRS
相关产品推荐
相关产品推荐

