标签:
Redis里面在网络传输和RDB备份的时候都会面临着数据出错的问题,因此采用了数据的校验。包括使用了CRC64的校验算法。CRC检验原理实际上就是在一个p位二进制数据序列之后附加一个r位二进制检验码(序列),从而构成一个总长为n=p+r位的二进制序列;附加在数据序列之后的这个检验码与数据序列的内容之间存在着某种特定的关系。如果因干扰等原因使数据序列中的某一位或某些位发生错误,这种特定关系就会被破坏。因此,通过检查这一关系,就可以实现对数据正确性的检验。Redis里面的CRC算法实现如下:
uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l) { uint64_t j; for (j = 0; j < l; j++) { uint8_t byte = s[j]; crc = crc64_tab[(uint8_t)crc ^ byte] ^ (crc >> 8); } return crc; }
其中crc64_tab里保存的是每个字符中的多项式:码字长度为64bit的CRC编码。常用的生成多项式有:
x^64 + x^4 + x^3 + x + 1
标签:
原文地址:http://blog.csdn.net/kaixin89/article/details/42676239