我正在使用Amazon Elasticache和pythons nil
模块。
pymemcache
这输出以下内容:
client = Client(('xxxx', 11211))
test=[1,2,3,4]
client.set('test_key', test)
result = client.get('test_key')
pprint.pprint(result)
pprint.pprint(test)
如您所见,memcache结果已更改为字符串。我该如何存储数组?或者将字符串转换回数组?
答案 0 :(得分:1)
Memcache本身将值存储为字符串。如果需要,您可以pymemcache
customize your serialization。它看起来像default,如果没有提供序列化程序,pymemcache
只对值使用__str__
方法:
值必须有 str ()方法才能将自身转换为字节 串。 Unicode对象可能是一个问题,因为Unicode上的str() object会尝试将其编码为ASCII(如果是,则会失败) 值包含大于U + 127的代码点。你可以用一个来解决这个问题 序列化程序或只是在字符串上调用encode(使用UTF-8,for 实例)。
如果您打算使用除str作为值之外的任何内容,那么最好使用 使用序列化器和反序列化器。 pymemcache.serde库有 一些已经实现的序列化器,包括一个兼容的序列化器 使用python-memcache库。
我个人更喜欢pylibmc
到pymemcache。它可以很好地处理非字符串值。
答案 1 :(得分:0)
pymemcache作为客户端的服务memcached仅支持字符串值。这就是默认情况下pymemcache返回一个字符串的原因。 我建议添加一个小包装器来序列化和反序列化从字符串到对象(如数组)的值。客户端支持添加自己的序列化器,如此
import json
from pymemcache.client.base import Client
def json_serializer(key, value):
if type(value) == str:
return value, 1
return json.dumps(value), 2
def json_deserializer(key, value, flags):
if flags == 1:
return value
if flags == 2:
return json.loads(value)
raise Exception("Unknown serialization format")
client = Client(('localhost', 11211), serializer=json_serializer,
deserializer=json_deserializer)
client.set('key', [1,2,3,4])
result = client.get('key')
答案 2 :(得分:-1)
图书馆似乎希望您先将数据序列化。 https://pymemcache.readthedocs.io/en/latest/getting_started.html#serialization
也许你可以使用替代图书馆? https://github.com/pinterest/pymemcache#comparison-with-other-libraries
我不确定它是否适合您的目的,但dogpile.cache也可能值得一试。使用起来非常棒,并且已将memcached作为其后端之一。