浅谈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 subprocess模块学习总结
Mar 13 Python
python获取一组数据里最大值max函数用法实例
May 26 Python
对python自动生成接口测试的示例讲解
Nov 30 Python
python实现小球弹跳效果
May 10 Python
如何在django中添加日志功能
Feb 06 Python
python代码xml转txt实例
Mar 10 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
Jun 22 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
python 下划线的不同用法
Oct 24 Python
Python urllib request模块发送请求实现过程解析
Dec 10 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 11 Python
利用Python实现翻译HTML中的文本字符串
Jun 21 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 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
2013/09/30 PHP
PHP修改session_id示例代码
2014/01/08 PHP
php中file_exists函数使用详解
2015/05/08 PHP
PHP curl使用实例
2015/07/02 PHP
php实现复制移动文件的方法
2015/07/29 PHP
一些常用且实用的原生JavaScript函数
2010/09/08 Javascript
Javascript中判断变量是数组还是对象(array还是object)
2013/08/14 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
Node.js中require的工作原理浅析
2014/06/24 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
2016/10/25 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
微信小程序 less文件编译成wxss文件实现办法
2016/12/05 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
webpack下实现动态引入文件方法
2018/02/22 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
Python continue语句用法实例
2014/03/11 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
Python使用py2neo操作图数据库neo4j的方法详解
2020/01/13 Python
Python函数生成器原理及使用详解
2020/03/12 Python
matplotlib jupyter notebook 图像可视化 plt show操作
2020/04/24 Python
美国在线肉类和海鲜配送:Crowd Cow
2020/10/02 全球购物
优质服务活动实施方案
2014/05/02 职场文书
优秀教导主任事迹材料
2014/05/09 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
同意迁入证明模板
2014/10/26 职场文书
劳模先进事迹材料
2014/12/24 职场文书
研究生个人学年总结
2015/02/14 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
Python数据类型最全知识总结
2021/05/31 Python
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL