Memcached 返回重复的键值对
我们在一个Django(Python)生产环境中使用了一组memcached服务器来进行缓存,尝试过cmemcache和python-memcache这两种API。问题是,在高并发的情况下,我们开始出现重复的键值对,也就是说,一个键对应了多个值。有没有人遇到过类似的情况,解决办法是什么?
由于memcached服务器之间并没有相互通信来保持键值对的唯一性,这个任务就留给了客户端库来处理,所以我们想进一步了解cmemcache和python-memcache是如何工作的。
2 个回答
0
哪个问题更严重:数据重复,还是查询时返回多个结果?
如果是数据重复的问题,那你就得面对一个棘手的并发问题了。
但如果是返回多个结果的问题,那为什么不给每个存储在memcache里的主机一个独特的标识符,然后把这个标识符加到每个键的前面呢?
1
客户端需要根据一个键(key)来判断这个值存储在哪个memcache服务器上。如果你使用了两个不同的客户端(或者同一个客户端的两种不同配置),它们可能会用不同的算法来把一个键映射到服务器上,这样就可能把同一个键的值发送到两个不同的服务器上。
你可能想换成 pylibmc 或者 python-libmemcached。我去年检查过python的memcache客户端,你提到的这两个客户端要么已经不再维护,要么出现了问题,或者两者都有。