问题标签 [python-memcached]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
171 浏览

django - Memcached Compare-And-Set 模式产生错误的结果

我正在尝试按照 Guido 的说明实现 memcached 比较和设置模式:

http://neopythonic.blogspot.nl/2011/08/compare-and-set-in-memcache.html

但是,我似乎没有做对,我不知道出了什么问题。下面的文件使用 Django (1.4.5 Final) 和 python-memcache (1.48)。

设置.py

djangocache.py

运行它:

它偶尔会输出 6、7 等,就像您在处理竞争条件时所期望的那样。我尝试了多个客户端实例化(见评论)。

帮助?

0 投票
1 回答
2097 浏览

memcached - python-memcache memcached -- 我安装在 centos virtualbox 上,但它的 get/set 似乎从来没有工作

我正在使用python。我做了一个 yum install memcached 然后是一个 easy_install python-memcached

我使用了帮助(memcache)中的简单测试程序。当我没有得到正确的答案时,我抛出了一些打印语句:

现在的问题是,我在安装中没有做些什么?从 API 的角度来看,它似乎正在工作,但它无法将任何内容放入内存缓存共享区域。我正在使用运行 centos [~]# cat /proc/version Linux 版本 2.6.32-358.6.2.el6.i686 的 virtualbox vm (mockbuild@c6b8.bsys.dev.centos.org) (gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-3) (GCC) ) #1 SMP Thu May 16 18:12:13 UTC 2013

是否有应该运行的守护进程?当我做 ps 时,我没有看到一个明显的名字。

我试图在我的 vm 上安装 pylibmc,但找不到有效的安装,所以现在看看我是否可以先让上述东西工作。

我发现如果我直接从 python 控制台 GUI 运行,如果我设置 debug=1,我会得到更多的输出

当我尝试使用示例 telnet 连接到端口时,连接被拒绝:

我尝试了我在网上找到的配置 telnet 的说明,这样 localhost 就不会被禁用: vi /etc/xinetd.d/telnet service telnet { flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin /in.telnetd log_on_failure += USERID disable = no }

然后运行命令重新启动服务:

我运行了这两种情况(iptables 启动和停止),但它没有效果。所以我没有想法。我需要做什么才能允许使用 PORT?如果那是问题?或者是否需要运行需要打开端口的 memcached 服务?

0 投票
1 回答
370 浏览

python - python-memcached 无法获取或设置“JAC_SF”

在检查了一大堆东西之后,我发现对于某些键,python-memcached 只是无法获取或在我的机器上设置它们(Mac OSX 10.9,自制 memcache 1.4.15,pip installed python-memcached 1.53) . 我的第一个问题是在黑暗中拍摄,不清楚发生了什么,但经过更多挖掘后,我现在确定了。

这一切都取决于 def _get_server(self, key):

如果我们添加两个调试打印输出行,

试图获取或设置密钥'NFL::CAR_TB',

结果,在我的机器上,

如果我将 _get_server 更改为

然后一切都会好很多,

尝试在我的 python 程序中设置多个键时,我得到了非常不一致的结果, import memcache TWO_HOURS = 2 * 60 * 60 mc_cl = memcache.Client('127.0.0.1') mapping = {...} mc_cl.flush_all() ret = mc_cl.set_multi(mapping=mapping, time=TWO_HOURS) getret = mc_cl.get_multi(mapping.keys()) if len(mapping) != len(getret): print 'not set\n\t{}'。 format('\n\t'.join([str((k, mapping[k])) for k in [a for a in mapping.keys() if a not in getret.keys()]])) 和在分析原始 memcache 输出之后,似乎并不是所有的键都被设置了,之后也不是所有的键都被请求了。在 Mac OSX 10.9 上的 homebrew 和 pip 上完成的所有事情都是最新的。下面的 Memcache 输出和读取表明只有 101 个键被尝试写入和读取,而有 228 个项目。import re gamesSet = [] gamesGet = [] with open('memout.log') as f: for line in f.read().split('\n'): match = re.match('^21 OK 22好的 21 已存储
0 投票
1 回答
210 浏览

memcached - 如何找到从内存缓存中逐出的键?

是否有任何内置方式/或 hack 可以让我知道哪个键被从 memcache 中逐出?

对于插入到内存缓存中的所有可能的键(例如get multi),有一种轮询解决方案,但这种方法效率低下,而且对于大量的键来说肯定是不可实现的。

该功能不需要在生产中运行,而是在一些基准测试和优化运行期间运行。

0 投票
1 回答
189 浏览

python-3.x - Werkzeug-0.9.4 和 python3_memcached-1.51 不适用于 Python 3.4

werkzeug.contrib.cache.MemcachedCache当我尝试获取\设置数据时,我正在使用python3_memcached-1.51 我收到以下错误:memcache.MemcachedKeyTypeError: Key must be str()'s这里: https ://github.com/eguven/python3-memcached/blob/master/memcache.py#L1039

键类型是bytes,不是str。所以我更深入地检查了。

内部werkzeug.contrib.cache.MemcachedCache键被编码为bytes(在 Python3 中),如下所示:

https://github.com/mitsuhiko/werkzeug/blob/master/werkzeug/contrib/cache.py#L342

什么是正确的解决方法?猴子补丁?

0 投票
1 回答
560 浏览

python - 当我有具有多个外键的 Django 对象时,如何命名/排列我的 memcached 键?

我有一个不做任何数据库缓存的现有 Django 应用程序。我正在努力实现 memcached 以提高性能并减少昂贵的数据库点击量。

我将使用的策略如下:每次我使用 XXX.objects.get() 或 XXX.objects.filter() 查询数据库时,我都会先检查缓存,看看是否已经有相同查询的结果在内存缓存中。如果是,我会使用它。如果不是,我将查询数据库并使用特定命名的键将其填充到 memcached 中。每当我更新此查询的任何结果时,我都会使用 Django 的 post_save() 信号使该缓存键无效。听起来很简单,对吧?

好吧,我正在为如何命名我的缓存键而苦苦挣扎,以便它以有序的方式工作。问题是我有 Django 模型对象,这些对象具有其他 2 个 Django 模型的外键。

这是我的模型:

在 myObjectC 的 post_save handler() 中,我需要使缓存键 SOME_NAME1_X 和 SOME_NAME2_X 无效,因为它们现在已经过时了。正确的?我认为这就是我需要做的。

但是,如果每个类的每个实例都有许多这样的键怎么办?毕竟,每个实例的每个 XXX.objects.get() 或 XXX.objects.filter() 调用都会有一个这样的键。我必须手动使它们全部无效吗?是否有一种系统的方法可以一次命名和使这些键无效,而不必自己记住每个缓存条目?

0 投票
0 回答
563 浏览

python - 使用 Ketama 使用多个客户端以一致的密钥分配访问 memcache

我在使用不同的 Python 客户端从内存缓存服务器读取数据时遇到问题,然后是用于将值写入内存缓存的那个。

我有一个使用 'ketama' 行为使用 pylibmc 写入缓存的进程。我有一个不同的服务,它从 Tornado IOLoop 异步读取 memcache。我已经定制了tornado-memcache以使用python-ketama模块查找服务器,该模块只是通用 C 库 libketama 的包装器。

相关pylibmc客户端初始化代码:

有没有人做过类似的事情(多个客户)?似乎两个客户端使用的哈希连续体非常不同,或者密钥的哈希/检索方式不同(两个客户端都应该使用 md5)。

编辑: 我已经编写了测试以确认这是一个连续问题。

0 投票
2 回答
1033 浏览

python - Django 中 Memcached 上的会话,当我设置 SESSION_COOKIE_AGE = 0 时,缓存过期时间始终为 300 秒

我的 Django Settings.py 是这样的:

我将会话存储在 memcached 上。但是,缓存过期时间总是300s!!

作为 django 文档,他们说 SESSION_COOKIE_AGE = 0 意味着永远不会超时,但它没有用于缓存超时?

那么,现在我想让会话缓存在浏览器关闭之前永远不会超时?

不要告诉我只设置 SESSION_EXPIRE_AT_BROWSER_CLOSE,因为我将会话存储在 memcached 中,缓存也有过期时间。我希望缓存永不过期。

谢谢。

0 投票
3 回答
652 浏览

python - 查询python memcached数据

我在 python memcach 中存储了一些记录。对象结构如下图所示。我如何像查询数据库一样访问或获取记录。

我知道我可以像这样访问内存缓存

我想要一些东西,就像我们在 Django 中查询一样

我的意思是有什么方法可以让我指定一些条件并从内存缓存中获取记录。cache.get() #condition like item_name = "some item", item_type = 1 etc

什么是最佳实践。任何帮助将不胜感激。

谢谢

0 投票
3 回答
1036 浏览

python - 'str' 不支持与 Memcached 的缓冲区接口

我正在使用 django 1.7 和 python3.4。我最近安装了 Memcached,并试图根据站点缓存将它与 python-memcached 一起使用。但是,一旦我在 settings.py 中定义了默认缓存后端,我的应用程序就会停止工作并抛出此错误:

安装的中间件和回溯是:

请告诉我什么是问题和解决方案。python-memcache 绑定是否不适用于 python3.4