Redis批量操作的实现示例

 更新时间:2025年11月26日 09:12:37   作者:wujiada001  
本文主要介绍了Redis批量操作的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、原生批量命令(MSET)

适用场景:所有键的过期时间相同或无过期设置,且无需条件判断。 方法: 将多个SET命令合并为MSET命令,但需要注意MSET的局限性(无法设置过期时间,且所有键值对必须一次性设置)。

MSET CUSTOMER_STAR:STAFF_20220311161756037_CUS_20240201183046858 1 CUSTOMER_STAR:STAFF_20220311161756037_CUS_20240201182841857 1 ...(其他键值对)

优点:网络开销最小,一次请求完成所有操作。

缺点:无法设置过期时间,且要求所有键在同一哈希槽(集群模式下需使用哈希标签{})。

二、Pipeline(管道)

适用场景:需高效批量执行命令且允许非原子性操作。

1. 命令行操作

将命令写入文件后通过管道执行:

# 创建命令文件 commands.txt
echo "SET CUSTOMER_STAR:STAFF_20220311161756037_CUS_20240201183046858 1" >> commands.txt
# 追加其他命令...

# 通过redis-cli执行
cat commands.txt | redis-cli -h <host> -p <port> -a <password> --pipe

优点:减少网络往返次数,适合大规模批量操作。

2. 编程语言实现(以Python为例)

import redis

r = redis.Redis(host='localhost', port=6379)
pipe = r.pipeline()

keys = [
    "CUSTOMER_STAR:STAFF_20220311161756037_CUS_20240201183046858",
    "CUSTOMER_STAR:STAFF_20220311161756037_CUS_20240201182841857",
    # ...其他键
]

for key in keys:
    pipe.set(key, 1)

pipe.execute()

优点:代码灵活,支持扩展(如设置过期时间)

三、Lua脚本

适用场景:需原子性执行所有命令。

local keys = {
    'CUSTOMER_STAR:STAFF_20220311161756037_CUS_20240201183046858',
    'CUSTOMER_STAR:STAFF_20220311161756037_CUS_20240201182841857',
    -- 其他键
}

for _, key in ipairs(keys) do
    redis.call('SET', key, 1)
end

执行命令

redis-cli -h <host> -p <port> -a <password> EVAL "$(cat script.lua)" 0

优点:保证原子性,适合对一致性要求高的场景。

四、Redis事务(MULTI/EXEC)

适用场景:需保证命令按顺序执行,但非严格原子性(集群模式下需所有键在同一哈希槽)。

MULTI
SET CUSTOMER_STAR:STAFF_20220311161756037_CUS_20240201183046858 1
SET CUSTOMER_STAR:STAFF_20220311161756037_CUS_20240201182841857 1
...
EXEC

优点:命令顺序执行,支持条件判断(如WATCH)

缺点:集群模式下需使用哈希标签确保键在同一节点

五、Redis集群模式优化

问题:若为集群环境,需确保所有键在同一哈希槽。 解决方案

  1. 使用哈希标签:在键名中使用{}包裹相同部分,例如:
    SET CUSTOMER_STAR:{STAFF_20220311161756037}_CUS_20240201183046858 1

    所有键的哈希标签{STAFF_20220311161756037}将分配到同一槽

  2. 分节点执行:若无法使用哈希标签,需将命令按哈希槽分组后分别发送到对应节点。

六、性能优化建议

  1. 控制批量大小:单次Pipeline建议不超过500条命令,避免内存或网络阻塞 。
  2. 错误处理:Pipeline和Lua脚本需捕获并处理部分失败的情况 。
  3. 网络优化:优先使用内网连接,减少延迟 。

七、执行方式对比

方法原子性网络开销适用场景集群兼容性
MSET最低简单键值批量设置需哈希标签
Pipeline高效非原子批量操作需哈希标签或分片
Lua脚本复杂逻辑或原子性要求高需哈希标签
事务顺序执行且需条件判断需哈希标签

选择建议:若无原子性要求,优先使用Pipeline;若需原子性且逻辑简单,使用Lua脚本

到此这篇关于Redis批量操作的实现示例的文章就介绍到这了,更多相关Redis批量操作内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 通过实例解析布隆过滤器工作原理及实例

    通过实例解析布隆过滤器工作原理及实例

    这篇文章主要介绍了通过实例解析布隆过滤器工作原理及实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Redis模糊查询的几种实现方法

    Redis模糊查询的几种实现方法

    本文主要介绍了Redis模糊查询的几种实现方法,包括两种方法KEYS , SCAN,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • redis分布式ID解决方案示例详解

    redis分布式ID解决方案示例详解

    这篇文章主要为大家介绍了redis分布式ID解决方案示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 还不懂Redis?看完这个趣味小故事就明白了!

    还不懂Redis?看完这个趣味小故事就明白了!

    这篇文章主要用趣味性的方法讲解了redis是什么?并且和MYSQL的区别是什么,有对redis不太懂的小伙伴可以来看一下吧
    2020-12-12
  • 深度剖析Redis双写一致性问题的解决方案

    深度剖析Redis双写一致性问题的解决方案

    在高并发场景下,缓存与数据库的双写一致性是每个开发者必须直面的核心挑战,本文通过5大解决方案,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2025-09-09
  • Redis keys命令的具体使用

    Redis keys命令的具体使用

    本文主要介绍了Redis keys命令的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Redis底层数据结构之字典(Dict)的实现

    Redis底层数据结构之字典(Dict)的实现

    本文主要介绍了Redis底层数据结构之字典(Dict)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-06-06
  • php结合redis实现高并发下的抢购、秒杀功能的实例

    php结合redis实现高并发下的抢购、秒杀功能的实例

    下面小编就为大家带来一篇php结合redis实现高并发下的抢购、秒杀功能的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 配置redis的序列化,注入RedisTemplate方式

    配置redis的序列化,注入RedisTemplate方式

    这篇文章主要介绍了配置redis的序列化,注入RedisTemplate方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • redis与mongodb的区别总结

    redis与mongodb的区别总结

    在本篇文章里小编给大家分享的是关于redis与mongodb的区别的相关知识点内容,有需要的朋友们参考下。
    2019-06-06

最新评论