浅谈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 self,cls,decorator的理解
Jul 13 Python
Python日志模块logging简介
Apr 13 Python
Python解析json之ValueError: Expecting property name enclosed in double quotes: line 1 column 2(char 1)
Jul 06 Python
使用pandas模块读取csv文件和excel表格,并用matplotlib画图的方法
Jun 22 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
python多进程下的生产者和消费者模型
May 07 Python
3分钟看懂Python后端必须知道的Django的信号机制
Jul 26 Python
python 用Matplotlib作图中有多个Y轴
Nov 28 Python
opencv实现图像平移效果
Mar 24 Python
Python包管理工具pip的15 个使用小技巧
May 17 Python
OpenCV中resize函数插值算法的实现过程(五种)
Jun 05 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
业余方法DIY电子管FM收音机
2021/03/02 无线电
提问的智慧
2006/10/09 PHP
如何使用脚本模仿登陆过程
2006/11/22 PHP
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
php实现用户登陆简单实例
2017/04/04 PHP
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
浅谈Javascript面向对象编程
2011/11/15 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
深入理解JavaScript编程中的同步与异步机制
2015/06/24 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
js判断请求的url是否可访问,支持跨域判断的实现方法
2016/09/17 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
JS实现带动画的回到顶部效果
2017/12/28 Javascript
JavaScript实现的开关灯泡点击切换特效示例
2019/07/08 Javascript
react-router-dom 嵌套路由的实现
2020/05/02 Javascript
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
python用plt画图时,cmp设置方法
2018/12/13 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
简单的Python调度器Schedule详解
2019/08/30 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
使用Python制作新型冠状病毒实时疫情图
2020/01/28 Python
初始化了一个没有run()方法的线程类,是否会出错?
2014/03/27 面试题
仓管员岗位责任制
2014/02/19 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
《大海那边》教学反思
2014/04/09 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
教师师德师风整改措施
2014/10/24 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
初中教师个人总结
2015/02/10 职场文书
学校运动会通讯稿
2015/07/18 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android