当前位置: 首页 > news >正文

redis集群模式 -批量操作

redis集群模式

文档

  1. redis单机安装
  2. redis常用的五种数据类型
  3. redis数据类型-位图bitmap
  4. redis数据类型-基数统计HyperLogLog
  5. redis数据类型-地理空间GEO
  6. redis数据类型-流Stream
  7. redis数据类型-位域bitfield
  8. redis持久化-RDB
  9. redis持久化-AOF
  10. redis持久化-RDB+AOF混合模式
  11. redis持久化-纯缓存模式
  12. redis事务
  13. redis管道 -redis pipeline -redis pipelining
  14. redis发布订阅
  15. redis主从复制
  16. redis哨兵模式
  17. redis集群模式 -分区算法
  18. redis集群模式 -集群搭建
  19. redis集群模式 -节点故障 -节点主从调整
  20. redis集群模式 -扩缩容

官方文档

  1. 官网操作命令指南页面:https://redis.io/docs/latest/commands/?name=get&group=string
  2. Redis cluster specification

说明

  1. redis版本:7.0.0

redis集群模式-批量操作

集群模式下键值对批量操作可能会出现异常
  1. 在集群模式下,使用msetmget等命令时,可能会出现异常,如下面示例,出现异常的原因就是这些批量操作的key并没有在同一个slot下,redis不支持跨越槽位操作

  2. 示例:

    127.0.0.1:6379> mset k1 aa k2 bb k3 cc
    (error) CROSSSLOT Keys in request don't hash to the same slot
    
集群模式下key命中slot的规则
  1. 实际上,并不是所有情况下都是对整个key做哈希,然后命中槽位,有些情况下,会对key的部分内容做哈希,然后命中槽位。根据源码cluster.c,大概逻辑如下:
    • 如果key不包含{,对整个key做hash
    • 如果key包含{,不包含},或者{}之间没有任何内容,对整个key做hash
    • 上面两种情况都没命中,说明包含{},并且{}之间有内容,则对{}之间的内容做hash
  2. 通过上面的规则,可以发现,如果key中包含{}{}之间有内容,并且{}之间的内容相同,则这些key会命中相同的槽位
集群模式下键值对批量操作的处理方法
  1. 通常情况下,使用msetmget等命令时,可能会出现异常,异常的原因就是这些批量操作的key并没有在同一个slot下,所以解决的办法也是,如何能准确的操作一组能命中同一个槽位的key

  2. 根据上面的规则,我们可以使用一组包含{}{}之间有内容,并且{}之间的内容相同的key,例如k1{group1}k2{group1}k3{group1}

    127.0.0.1:6379> mset k1{group1} aa k2{group1} bb k3{group1} cc
    -> Redirected to slot [7859] located at 192.168.145.133:6380
    OK
    
  3. 需要注意的是,k1{group1}k2{group1}k3{group1}这些就是真实的key,获取value时也需要用完整的key

    127.0.0.1:6379> get k1{group1}
    -> Redirected to slot [7859] located at 192.168.145.133:6380
    "aa"
    
http://www.dtcms.com/a/349178.html

相关文章:

  • 智慧工业设备巡检误报率↓81%!陌讯多模态融合算法实战优化与边缘部署
  • 【机器学习】6 Frequentist statistics
  • (计算机网络)JWT三部分及 Signature 作用
  • 车企数据资产管理——解读46页大型车企数据资产数据治理体系解决方案【附全文阅读】
  • 计算机系统 C语言运行时对应内存映射 以及 各个段的数据访问下标越界产生的后果
  • Delphi 12 基于 Indy 的 WebServer 的 https 实现的问题
  • HiRAG:用分层知识图解决复杂推理问题
  • ruoyi框架角色分配用户
  • imx6ull-驱动开发篇38——Linux INPUT 子系统
  • leetcode_189 轮转数组
  • 什么嵌入式接入大模型:第二篇基于 STM32 ESP32 的社会服务助手
  • AI重塑跨境电商:选品成功率提升53%+物流效率加快34%,多语种运营成破局关键
  • String的intern方法
  • 数据库服务优化设置
  • nano命令使用方法
  • 备考NCRE三级信息安全技术 --- L1 信息安全保障概述
  • 自编 C# 颜色命名和色彩显示,使用 DataGridView 展示颜色命名、RGB值
  • 推进数据成熟度旅程的 3 个步骤
  • 基于 MATLAB 的信号处理实战:滤波、傅里叶变换与频谱分析
  • 什么是IP代理
  • 智慧农业病虫害监测误报率↓82%!陌讯多模态融合算法实战解析
  • 基于微信小程序校园微店源码
  • 电力电子simulink练习10:反激Flyback电路搭建
  • [leetcode] - 不定长滑动窗口
  • 深度学习卷积神经网络项目实战
  • 电容触控:自电容 vs 互电容
  • Rust 登堂 生命周期(一)
  • 内网后渗透攻击--域控制器安全(1)
  • 控制启动过程
  • 【typenum】 25 去除无符号整数前导零的特性(private.rs片段)