Redis哈希槽

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 取模,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

CRC16算法

CRC16,16代表二进制数的位数,一个字节8位,两个字节16位,CRC16就是包含了16位的二进制值。以此类推,CRC32,则是包含32位的二进制值。在java.util.zip包中有CRC32算法的实现,主要用于压缩包工具软件的校验。

循环冗余校验(Cyclic Redundancy Check,CRC),是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。CRC是一种用于校验通信链路上数字传输准确性的计算方法(通过某种数学运算来建立数据位和校验位的约定关系的)。CRC是利用除法及余数****的原理来做错误侦测的。CRC16从性能上和开销上,均优于奇偶校验、算术和校验等方式,在数据存储和数据通讯领域,应用得比较广泛。磁盘驱动器的读写也采用了CRC16。通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。

CRC16 算法源码

package org.redisson.connection;public final class CRC16 {private static final int[] LOOKUP_TABLE = new int[]{0, 4129, 8258, 12387, 16516, 20645, 24774, 28903, 33032, 37161, 41290, 45419, 49548, 53677, 57806, 61935, 4657, 528, 12915, 8786, 21173, 17044, 29431, 25302, 37689, 33560, 45947, 41818, 54205, 50076, 62463, 58334, 9314, 13379, 1056, 5121, 25830, 29895, 17572, 21637, 42346, 46411, 34088, 38153, 58862, 62927, 50604, 54669, 13907, 9842, 5649, 1584, 30423, 26358, 22165, 18100, 46939, 42874, 38681, 34616, 63455, 59390, 55197, 51132, 18628, 22757, 26758, 30887, 2112, 6241, 10242, 14371, 51660, 55789, 59790, 63919, 35144, 39273, 43274, 47403, 23285, 19156, 31415, 27286, 6769, 2640, 14899, 10770, 56317, 52188, 64447, 60318, 39801, 35672, 47931, 43802, 27814, 31879, 19684, 23749, 11298, 15363, 3168, 7233, 60846, 64911, 52716, 56781, 44330, 48395, 36200, 40265, 32407, 28342, 24277, 20212, 15891, 11826, 7761, 3696, 65439, 61374, 57309, 53244, 48923, 44858, 40793, 36728, 37256, 33193, 45514, 41451, 53516, 49453, 61774, 57711, 4224, 161, 12482, 8419, 20484, 16421, 28742, 24679, 33721, 37784, 41979, 46042, 49981, 54044, 58239, 62302, 689, 4752, 8947, 13010, 16949, 21012, 25207, 29270, 46570, 42443, 38312, 34185, 62830, 58703, 54572, 50445, 13538, 9411, 5280, 1153, 29798, 25671, 21540, 17413, 42971, 47098, 34713, 38840, 59231, 63358, 50973, 55100, 9939, 14066, 1681, 5808, 26199, 30326, 17941, 22068, 55628, 51565, 63758, 59695, 39368, 35305, 47498, 43435, 22596, 18533, 30726, 26663, 6336, 2273, 14466, 10403, 52093, 56156, 60223, 64286, 35833, 39896, 43963, 48026, 19061, 23124, 27191, 31254, 2801, 6864, 10931, 14994, 64814, 60687, 56684, 52557, 48554, 44427, 40424, 36297, 31782, 27655, 23652, 19525, 15522, 11395, 7392, 3265, 61215, 65342, 53085, 57212, 44955, 49082, 36825, 40952, 28183, 32310, 20053, 24180, 11923, 16050, 3793, 7920};private CRC16() {}public static int crc16(byte[] bytes) {int crc = 0;byte[] var2 = bytes;int var3 = bytes.length;for(int var4 = 0; var4 < var3; ++var4) {byte b = var2[var4];crc = crc << 8 ^ LOOKUP_TABLE[(crc >>> 8 ^ b & 255) & 255];}return crc & '\uffff';}
}

org.redisson.connection.CRC16#crc16

Redis节点和卡槽

获取节点信息命令: cluster nodes

获取key对应的槽位: cluster keyslot  key

Redis哈希槽分配相关推荐

  1. Redis哈希槽的概念

    利用阿里云监控平台,监控接口时看到一个非常慢的接口,点了进去,发现了slot标志 通过查阅资料,习得哈希槽的概念: slot:称为哈希槽 Redis 集群中内置了 16384 个哈希槽,当需要在 Re ...

  2. Docker 搭建 Redis 集群以及哈希槽动态扩容

    一.创建网络 docker network create --subnet=172.10.1.0/24 redis 二.创建 Redis 容器 创建6个redis实例 docker create -- ...

  3. Redis集群Hash槽分配异常 CLUSTERDOWN Hash slot not served的解决方式

    在搭建Redis5.x版本的集群环境出现各节点无法互相发现与Hash槽分配异常 CLUSTERDOWN Hash slot not served的情况 在Linux同一台服务器下搭建伪集群-- 127 ...

  4. docker 安装redis集群配置3主3从,实现hash槽分配存储数据

    目录 一.docker集群安装 1.分别在宿主机的/docker/redis下创建每个节点数据同步的目录 2.执行容器启动命令 3.执行命令参数解释: 4.集群节点不够提示:提示需要至少3个maste ...

  5. 一致性哈希和哈希槽对比

    背景 随着memcache和redis的出现,更多人认识到了一致性哈希. 一致性哈希用于解决分布式缓存系统中的数据选择节点存储问题和数据选择节点读取问题以及在增删节点后减少数据缓存的消失范畴,防止雪崩 ...

  6. 【分布式】一致性哈希和哈希槽

    当我们拥有了多台存储服务器之后,现在有多个key,希望可以将这些个key均匀的缓存到这些服务器上,可以使用哪些方案呢? 1. 普通哈希取模法 1.1 直接哈希取模 这是一种最容易想到的方法,使用取模算 ...

  7. redis哈希表的rehash分析

    女主宣言 大家都比较了解哈希表,以及类似php.redis等的内部hash实现.但是本文着力介绍redis中的rehash的实现,供大家参考学习. PS:丰富的一线技术.多元化的表现形式,尽在&quo ...

  8. Redis哈希表总结

    本文及后续文章,Redis版本均是v3.2.8 在文章<Redis 数据结构之dict><Redis 数据结构之dict(2)>中,从代码层面做了简单理解.总感觉思路的不够条理 ...

  9. c++ 哈希_Redis源码解析十一--Hash键实现Redis 哈希键命令实现(t_hash)

    Redis 哈希键命令实现(t_hash) 1. 哈希命令介绍 Redis 所有哈希命令如下表所示:Redis 哈希命令详解 2. 哈希类型的实现 之前在redis对象系统源码剖析和注释中提到,一个哈 ...

最新文章

  1. LLDB+Python脚本:增强LLDB调试
  2. 使用jquery触发a标签跳转
  3. oracle数据库enq: TX - allocate ITL entry性能诊断
  4. 阿里高德城市大脑·智慧交通战略发布,公共服务版首次亮相!
  5. rdd与mysql表 join_Spark 之RDD
  6. matlab求解数学题,实验二Matlab求解数学问题
  7. 基于JQUERY的WEB在线流程图设计器GOOFLOW 0.5版 数据值解析
  8. C#用NPOI控件把MySQL数据库中查询符合条件的数据导出到EXCEL
  9. Unity3d将资源打包成AssetBundle 读取后材质球丢失的问题
  10. 基于HTML5的在线绘图工具,基于HTML5 Canvas和jQuery 的绘图工具的实现
  11. OpenCV 读写图像、读写像素、修改像素值(案例:图像反处理)
  12. 怎么将word转换成excel表格格式最简单
  13. CartoonShader
  14. Kubernetes容器云平台技术方案
  15. java linest_java基础:学生管理系统
  16. 每日一题:假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。
  17. CMake之add_custom_target
  18. C语言计算字符串长度的方法
  19. 网页端对接linux发起cc,网页端和mLink指南
  20. java编写抖音上图片转文字的程序

热门文章

  1. 【报告分享】2020职业教育行业白皮书-Mob研究院(附下载)
  2. 外科医生就是男性?算法为何也有性别歧视
  3. 史上最强Java八股文面试题,堪称2023最强!!!
  4. three.js 中国城市PM2.5可视化案例
  5. 第一,二,三范式,满足不满足的实例
  6. 视觉SLAM十四讲——对极约束(2D-2D)笔记
  7. 可以用到项目的优化网站加载速度方案
  8. 精神病人思维广 ——读《天才在左,疯子在右有感》
  9. 开源与安全的“冰与火之歌”
  10. Matlab画密度函数分布图