首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python Memcache

Python Memcache
EN

Stack Overflow用户
提问于 2013-07-16 19:27:04
回答 2查看 342关注 0票数 0

大家好,我是新接触Memcache.我有5个Memcache服务器(版本1.22),我使用的是Python memcache library.When,我只使用一个服务器,一切正常,但是当我使用memc.set_servers(memcL)配置这5个服务器时,一些键会被缓存,而其他键则不会。这种奇怪行为的原因是什么?

代码摘录:

代码语言:javascript
复制
     itemsForCache=queries[1].execute(settings.getDBCursor_1(),queries[1].getQuery(settings.getParameters()))     
     cacheDataEntry="" 
     for CacheItems in itemsForCache:
         cacheDataEntry+=str(CacheItems[0])+" "

     cache_time = time.time() - start_time
     cachingTime+=cache_time;
     li.info(recommendation.getIdRec()+str(iterator[0])+"_"+pKey+" | "+cacheDataEntry+" | "+str(cache_time))
     settings.getMemCacheClient().set(recommendation.getIdRec()+str(iterator[0])+"_"+pKey,cacheDataEntry,int(settings.getConfigurationValue("memcache-data-life-time")))

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2013-07-16 20:12:55

Memcached实际上不是分布式服务器;它只是一个简单的键值存储。在您的每台服务器上运行的每个memcached实例都独立运行,而不知道周围还有其他memcached服务器。你的软件给服务器一个密钥,它接收一个值;仅此而已。

那么数据分发是如何实现的呢?执行此操作的是客户端库。memcached客户端库(即您的程序使用的python memcache库)实际上是在您为其配置了memcached的所有服务器之间分发数据的库。它的数据分发算法是这样的:给定的键总是去往相同的memcached服务器。

所以,有些键被缓存,另一些没有,这可能意味着被缓存的键被放到一个正在工作的memcached服务器上,而没有被缓存的键被放到一个不可访问的memcached服务器上。您应该验证客户端设置是否正确,并尝试依次从客户端连接到每个服务器,例如

代码语言:javascript
复制
  nc 192.168.1.18 11211

其中192.168.1.18是memcached服务器。

还要注意,如果您更改了客户端配置(例如,通过添加服务器),则所有键的分布都会更改,因此在更改配置之前已经缓存的一些键可能无法在新配置中检索到(因为它们的服务器已经更改),需要重新缓存。

票数 0
EN

Stack Overflow用户

发布于 2013-07-17 16:27:14

最后,我通过将密钥过期时间设置为0(无过期)解决了这个问题。将上述参数设置为大于2592000 (30天)的值时,Memcache有一个奇怪的行为。

来自http://php.net/manual/en/memcache.set.php

项目的过期时间。如果它等于零,则项目永远不会过期。您也可以使用Unix时间戳或从当前时间开始的秒数,但在后一种情况下,秒数不能超过2592000 (30天)。

谢谢你的帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17675289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档