浅谈python处理json和redis hash的坑


Posted in Python onJuly 16, 2020

1、使用MySQLdb读取出来的数据是unicode字符串,如果要写入redis的hash中会变成

"{u'eth0_outFlow': 2.5, u'eth1_inFlow': 3.44}"

无法使用json.loads,需要提前将unicode转成str:

str(eth0_outFlow)

2、单引号包围的key不是规范的json格式

"{'eth0_outFlow': 2.5, 'eth1_inFlow': 3.44}"

需要转成规范的格式才能使用json.loads()

replace('\'', '"') => '{"eth0_outFlow": 2.5, "eth1_inFlow": 3.44}'

3、None写入redis的hash是直接变成 'None',需要转成'null' 才能使用 json.loads()

"{'eth0_outFlow': None, 'eth1_inFlow': None}"

replace('\'', '"').replace("None", "null") => '{"eth0_outFlow": null, "eth1_inFlow": null}'

4、json.loads()会把key的类型从str转成unicode,之后写进redis后就变成了

"{u'eth0_outFlow': None, u'eth1_inFlow': None}"

需要将其转成str的key才能写进redis

value = json.loads(cache)
items = value.iteritems()
value = {k.encode('utf8'): v for k, v in items}
redisCli.hmset(key, value)

5、json.loads如果要保持字典的顺序则可以使用

from collections import OrderedDict

json.loads(data, object_pairs_hook=OrderedDict)

6、json.dumps中文乱码解决方法

>>> js = json.loads('{"haha": "哈哈"}') 
>>> print json.dumps(js)
{"haha": "\u54c8\u54c8"}
>>> print json.dumps(js, ensure_ascii=False) 
{"haha": "哈哈"}

7、解码出错,使用json.loads会报错 'utf8' codec can't decode byte ...则使用忽略错误的方法

json.loads(unicode( str, errors='ignore'))

8、redis hash在存入redis后所有key都会变成字符串

9、使用redis的时候尽量减少网络IO操作,有时候可以使用hash代替 key-value字符串,会得到事半功倍的效果

10、redis最大内存 maxmemory达到设置的最大值时会随机删除设置了expire时间的key,这个让我调试了几个钟

补充知识:redis的hash与string区别

Redis hash 是一个 string 类型的 field 和 value 的 映射表。它的添加、删除操作都是 0(1)(平均操作)。

hash 特别 适合用于存储对象。相较于将对象的每个字段存成单个 string 类型(string 类型可以存储对象序列化)。

将一个对象存储在 hash 类型中会占用更少的内存,并且可以更方便的存取整个对象。

(省内存的原因是新建一个 hash 对象时开始是用 zipmap(又称为 small hash)来存储的。

这个 zipmap 其实并不是 hash table,但是 zipmap 相比正常的 hash 实现可以节省不少 hash 本身需要的一些元数据存储开销。

对比软件:Beyond Compare 3

以上这篇浅谈python处理json和redis hash的坑就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现115网盘自动下载的方法
Sep 30 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
May 18 Python
python实现随机森林random forest的原理及方法
Dec 21 Python
详解Python中where()函数的用法
Mar 27 Python
Python查看微信撤回消息代码
Jun 07 Python
python实现决策树分类(2)
Aug 30 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
python numpy 反转 reverse示例
Dec 04 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
python 实现"神经衰弱"翻牌游戏
Nov 09 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
Python修改DBF文件指定列
Dec 19 Python
Python requests及aiohttp速度对比代码实例
Jul 16 #Python
Python3 搭建Qt5 环境的方法示例
Jul 16 #Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 #Python
Python必须了解的35个关键词
Jul 16 #Python
Python子进程subpocess原理及用法解析
Jul 16 #Python
python redis存入字典序列化存储教程
Jul 16 #Python
Python是怎样处理json模块的
Jul 16 #Python
You might like
php 魔术方法详解
2014/11/11 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
2019/03/08 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
Nodejs为什么选择javascript为载体语言
2015/01/13 NodeJs
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
jquery广告无缝轮播实例
2017/01/05 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
学习React中ref的两个demo示例
2018/08/14 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
ElementUI Tree 树形控件的使用并给节点添加图标
2020/02/27 Javascript
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
python使用paramiko模块实现ssh远程登陆上传文件并执行
2014/01/27 Python
Python中的Numpy入门教程
2014/04/26 Python
python中global与nonlocal比较
2014/11/21 Python
Python实现网站文件的全备份和差异备份
2014/11/30 Python
windows下添加Python环境变量的方法汇总
2018/05/14 Python
基于Pandas读取csv文件Error的总结
2018/06/15 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
制药工程专业应届生求职信
2013/09/24 职场文书
企业门卫岗位职责
2013/12/12 职场文书
借款协议书范本
2014/04/22 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
政治学专业毕业生求职信
2014/08/11 职场文书
党员个人自我评价
2015/03/03 职场文书
2016年记者节感言
2015/12/08 职场文书
导游词之江南园林狮子林
2019/09/16 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
详解TypeScript中的类型保护
2021/04/29 Javascript
Pygame Event事件模块的详细示例
2021/11/17 Python