在日常开发过程,一般在使用Redis时,都是采用的集群的方式,而很少采用单机的方式。
我们知道在Redis集群中,是通过按照槽点的划分来决定数据最终落在哪个Redis节点上。在集群中,一共存在16384个槽点,如果我们的集群有3个节点组成的话,那么由这3个节点来均分这16384个槽点。如下图
假如name@zhangsan的缓存是一个高频访问的数据,那么大量请求访问这个key时,就会出现压力都有redis1这个节点来承担,这样redis1节点就有可能会扛不住压力而罢工了。那么应该怎么解决这个问题呢?
不妨在缓存数据的时候,将这个数据在每个redis节点都缓存一份。而在缓存的时候,将key在程序层面进行加工,如变成name@zhangsan#redis1、name@zhangsan#redis2、name@zhangsan#redis3这样的三个key。此处我们假如这样的3个key会根据crc16算法,将这个三个key分别落在这三个节点之上。那么这样在访问的时候,我们就可以依然遵循这个规则获得一个key,这样一来,获取数据的时候,压力就被分散到不同的redis节点上了。如图