现在分布式缓存方面算是memcached最出名了,为了改善现有系统的性能最近也在研究这个,有几个问题不太理解:1、memcached可以通过一个服务器列表ServerList指定缓存服务器,但缓存的服务器和缓存的数量都是随机的,比如:有3个缓存服务器,向客服端库ClientLib里set 10个缓存的时候,这10个缓存不是平均分配到这3个服务器,有可能一台只有1个,一台一个都没分到,另一台分了9个,这样的话压力有可能就全到一台服务器上去了。2、如果缓存一个很大的列表时,这时分布式缓存基本上用不上,比如100万条记录(举例),只会缓存在一个服务器,而不会将这100万条数据分成3份分别缓存到3个服务器3、在后台更新某一条记录的时候 ,如果将缓存里对应的数据也更新了,批量删除如何处理?4、在客户端查询的时候,如果数据不是缓存在应用程序部署服务器的话,是不是先从别的缓存服务器将数据全部拷贝到应用程序服务器呢?
如:有3个服务器 A,B,C ,其中程序部署在A上,设置缓存的时候有可能数据随机缓存到C服务器上,那么客户端请求数据的时候 是不是先从C服务器将数据全部拉到A服务器呢,这样对性能会不会造成很大的影响呢?
以上仅为个人的理解,请高手赐教!

解决方案 »

  1.   

    1. 这种情况不会出现吧.会平均分配的..2. 程序设计的问题,你不会分成3份再缓存吗.还有3份分别缓存到3个服务器,取数据要取三次,然后整合,麻烦不?3. 删除跟更新有什么区别?4. 不明白.你是用MemcachedClient的吗.
      

  2.   

    to igelf:
    1、这种情况确认存在,我写了demo测试过,每次每台服务器分到的缓存数量都是不确定的;
    2、确实有你说的这个问题,所以我不确定是将这些数据分开缓存还是缓存到一台服务器;
    3、没有区别,我是问了2个问题,分布式缓存如何批量删除,如何将修改的数据更新到缓存里
    4、就是当数据缓存的服务器和程序部署的服务器不是同一台的时候,最终将数据展现给客户的肯定是程序服务器,那么是不是要从缓存服务器将数据读过来呢? 不知道我说清楚了没有。我用的是Memcached.ClientLibrary,应该就是你所说的。
      

  3.   

    1.我没测试过.是不是缓存的数量,容易.不够.你多测试下.3.批量处理不知道.一个个删吧. Remove方法和Store方法.4.部署的服务器没数据,肯定要从别的缓存服务器数据读过来.我的观点.期待高手.
      

  4.   

    感谢igelf的关注期待其他高手也发表下观点