分布式缓存的使用

时间:2022-11-24 16:19:06

    凡客技术部会议的时候,了解到了login站点的redis使用。下面我先来介绍一下他们login站点的redis的使用情况。 redis主要缓存用户的sessionID(我们对用户的sessionid有自己的一套实现)。存储内容:KEY就是userid,value就是sessionid。

    N台redis服务器,缓存的内容完全一样。(什么意思呢?就是说,每次往redis里面插入一个新数据,要插N次。)

    那这样的存储意味着,取的时候就变成了,从第一个redis服务器开始取,没有取到接着取第二台,直到取到了为止。如果所有的redis中都没有该份数据,那么就从DB从获取出来,同时向所有的redis中插入这条数据。

  这种处理方式虽然偷懒,但是在业务飞速发展,讲究快速的上线的时代,却是最可行的方案。

不过,对于以后网站的扩张,用户数增大,甚至对于其他数据量大(无法在一台机器缓存所有的内容)的业务,这种做法是行不通的。

对于redis的sharding,好像redis的作者有一套方案:

http://antirez.com/post/redis-presharding.html 

也就是说,如果当前有N台redis服务器,通过hash(key)%N得到这个key会缓存到哪个服务器。

MS主站就是这么做的。(好像维护了一个服务器列表,如果宕机或者新增服务器,会对这个列表删除或者增加)

不过这样也会有一个问题,就是如果有一台服务器宕机或者新增redis服务器,会导致很多的缓存失效。

如何最小化这种变化?

一致性hash算法 (http://blog.csdn.net/sparkliang/article/details/5279393)

        MS一致性HASH算法是现在比较主流的处理方式。(以上就是我思考这个问题的思路,继续研究ing)