我正在使用mongodb和redis,redis是我的缓存。
我用redis-py缓存mongodb对象:
obj in mongodb: {u'name': u'match', u'section_title': u'\u6d3b\u52a8', u'title':
u'\u6bd4\u8d5b', u'section_id': 1, u'_id': ObjectId('4fb1ed859b10ed2041000001'), u'id': 1}
使用hgetall(key,obj)从redis获取的obj是:
{'name': 'match', 'title': '\xe6\xaf\x94\xe8\xb5\x9b', 'section_title':
'\xe6\xb4\xbb\xe5\x8a\xa8', 'section_id': '1', '_id': '4fb1ed859b10ed2041000001', 'id': '1'}
如您所见,从缓存中获取的obj是str而不是unicode,因此在我的应用中出现错误,例如:’ascii’编解码器无法解码位置12的字节0xe6:序数不在范围(128)中
任何人都可以提出建议吗?感谢你
如果您使用的是第三方库(例如)django-redis
,则可能需要指定一个自定义的ConnectionFactory
:
class DecodeConnectionFactory(redis_cache.pool.ConnectionFactory):
def get_connection(self, params):
params['decode_responses'] = True
return super(DecodeConnectionFactory, self).get_connection(self, params)
假设您使用的是redis-
py,最好传递str
而不是传递unicode
给Redis,否则Redis会自动将其编码为*set
命令,通常使用UTF-8编码。对于*get
命令,Redis不了解值的形式类型,而只需要str
直接返回值即可。
因此,正如Denis所说,将对象存储到Redis的方式至关重要。您需要转换值以str
使Redis层对您透明。
另外,将默认编码设置为UTF-8,而不要使用ascii
我在跑步 在我的redis cli上,如果至少有一个键发生了更改,则每10分钟保存一次,但是它给了我: 我在redis官方网站上举了一个例子:http://redis.io/topics/persistence 我做错了什么?
好的,我正在运行Java6(应用程序需求),我需要以unicode格式保存一个文件(没有大endian或低endian),只有双字节unicode。我是这么做的:
我正在使用spring data redis运行Spring Boot服务,下面是以下配置。 该服务似乎可以工作,但我在日志中看到了一条丢失哨兵消息流。哨兵节点可从运行服务的VM中访问。我能够直接从那个虚拟机对他们进行telnet。知道为什么会这样吗?
当我试图保存到redis时,我遇到了这个问题。介绍以下信息。 Miscf Redis配置为保存RDB快照,但目前无法保存到磁盘。可能修改数据集的命令被禁用,因为此实例配置为在RDB快照失败时报告写入期间的错误(在bgsave error选项上停止写入)。请检查红色 redis日志文件显示: 后台保存由pid 73启动在磁盘上保存数据库时发生写入错误:功能未实现 有人经历过这种情况吗?
每当我在redis中执行任何修改数据的命令时,我会得到以下错误 我在Mac上使用brew安装了redis。如何获取redis-server将信息记录到的日志文件的位置。我试着找redis Conf。文件,但也找不到。 我如何摆脱上面的错误,并且能够在Redis中执行修改数据的命令。