在Redis模式下,发送的数据与接收的数据不同。与memcached相同的问题。以下是Redis代码的示例:
import pickle
import redis
REDIS = {
'host': 'localhost',
'port': 6379,
'db': 0
}
IGNITE = {
'host': 'localhost',
'port': 11211,
'db': 0
}
def test_connection(redis_connection):
d = {
'a': 1,
'b': 'AS213dfdsfфывфывфывфа',
'c': None,
}
pickle_dumps = pickle.dumps(d)
print(pickle_dumps)
redis_connection.set('foo', pickle_dumps)
print(redis_connection.get('foo'))
print('-----------------------')
test_connection(redis.StrictRedis(**IGNITE))
test_connection(redis.StrictRedis(**REDIS))
我是如何运行Ignite的:
docker run -p 11211:11211 -it -e "CONFIG_URI=https://raw.githubusercontent.com/apache/ignite/master/examples/config/redis/example-redis.xml" apacheignite/ignite
输出:
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02X \x00\x00\x00AS213dfdsf\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd0\xb0q\x03X\x01\x00\x00\x00cq\x04Nu.'
b'\xef\xbf\xbd\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02X \x00\x00\x00AS213dfdsf\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd0\xb0q\x03X\x01\x00\x00\x00cq\x04Nu.'
-----------------------
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02X \x00\x00\x00AS213dfdsf\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd0\xb0q\x03X\x01\x00\x00\x00cq\x04Nu.'
b'\x80\x03}q\x00(X\x01\x00\x00\x00aq\x01K\x01X\x01\x00\x00\x00bq\x02X \x00\x00\x00AS213dfdsf\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd1\x8b\xd0\xb2\xd1\x84\xd0\xb0q\x03X\x01\x00\x00\x00cq\x04Nu.'
-----------------------
我该如何解决这个问题?
答案 0 :(得分:2)
我可以看到\ x80被\ xef \ xbf \ xbd。
取代后者是Unicode representation of Replacement character
我希望这是在Ignite中将\ x80(控制字符)写入Unicode流的结果。我可以找到类似问题的a question about Pickle。
它还建议不要在网络环境中使用Pickle。为什么不使用例如JSON?