什么是一致性Hash?
当mysql单表数据大于500W条记录的时候需要对其进行分库分表;当数据量很大的时候(标准可能不一样,要看Redis服务器容量)我们同样可以对Redis进行类似的操作,就是分库分表。
假设,我们有一个社交网站,需要使用Redis存储图片资源,存储的格式为键值对,key值为图片名称,value为该图片所在文件服务器的路径(图片名称,图片url地址),我们需要根据文件名查找该文件所在文件服务器上的路径,数据量大概有2000W条左右,按照我们约定的规则进行分库,规则就是随机分配,我们可以部署8台缓存服务器,每台服务器大概含有500W条数据,并且进行主从复制。
(2000万条数据,8台redis服务器,分为4主4从,4组,redis随机存储,最多使用四次查询才能查到)
由于规则是随机的,所以我们的一条数都有可能存储在任何一组Redis中,例如上图我们用户查找一张名称为”a.png”的图片,由于规则是随机的,我们不确定具体是在哪一个Redis服务器上的,因此我们需要进行1、2、3、4,4次查询才能够查询到(也就是遍历了所有的Redis服务器),这显然不是我们想要的结果,有了解过的小伙伴可能会想到,随机的规则不行,可以使用类似于数据库中的分库分表规则:按照Hash值、取模、按照类别、按照某一个字段值等等常见的规则就可以出来了!好,按照我们的主题,我们就使用Hash的方式。
(随机存储规则不行,使用Hash算法进行优化,快速定位缓存中的资源;无需在对整个redis集群进行遍历)
为Redis集群使用Hash算法