码迷,mamicode.com
首页 > 数据库 > 详细

[python]mysql数据缓存到redis中 取出时候编码问题

时间:2014-11-24 17:23:57      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:缓存   python   mysql   redis   乱码   

描述:
一个web服务,原先的业务逻辑是把mysql查询的结果缓存在redis中一个小时,加快请求的响应。
现在有个问题就是根据请求的指定的编码返回对应编码的response。

首先是要修改响应的body的编码,由于mysql去出来就是unicode,所以直接使用
```
content = content.encode(charset)
```
来转化,然后在请求header中也加入字符编码。


解决:
可是这样测试下来,有的请求可以返回正确的编码格式,有的还是乱码,最后猜测是redis中数据类型的问题
#redis 中取出的缓存数据
type(content)
<type 'str'>
import chardet
chardet.detect(content)
{'confidence': 0.99, 'encoding': 'utf-8'} #编码还是utf-8

#msyql取出的字段数据
type(content)
<type 'unicode'>

一种方式是在redis中就存储unicode编码,缓存的时候还是unicode,为啥到redis里面再取出来就是str了呢? 可能还需特殊处理吧。
一种方式是对content判断类型,分别处理。

最后的解决片段:
if isinstance(content, unicode):
    content = content.encode(charset)
elif isinstance(content, str):
    content = content.decode("utf-8").encode(charset)



[python]mysql数据缓存到redis中 取出时候编码问题

标签:缓存   python   mysql   redis   乱码   

原文地址:http://blog.csdn.net/orangleliu/article/details/41445947

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!