提到crc算法,可能比较陌生,但是在日常开发中,有如下应用
本质是一个哈希函数,用于文件校验处理。
redis集群使用了crc16 来计算对应的哈希值来计算与 16384 取模,确定当前 key 所在的哈希槽,从而确定所在的节点,做到数据分区,突破单节点请求处理的限制。
HASH_SLOT = CRC16(key) mod 16384
https://github.com/redis/redis/blob/7.2.3/src/crc16.c
redis 的 crc16 源码
按位计算
程序空间十分苛刻但 CRC 计算速度要求不高的微控制器系统按字节计算
程序空间较大且 CRC 计算速度要求较高的计算机或微控制器系统,半字节计算
程序空间不太大,且 CRC 计算速度又不可以太慢的微控制器系统。
一般在压缩文件里见到的多,在压缩完成在使用压缩文件打开会有 CRC?一列。
主要在压缩方面
hadoop
kafka
java.util.zip.CRC32
在 java 9 之前具体算法细节在 jvm 实现,通过 native 进行调用,在 java 9 中重写了该类,底层使用了 intel 的 SSE4.2 指令集。
参考链接
https://jingyan.baidu.com/article/ce4366493cd4157672afd35b.html
https://baike.baidu.com/item/CRC32/7460858
https://www.cnblogs.com/wql025/p/14430778.html
https://www.cnblogs.com/wulinn/p/11607114.html