浅谈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 代码效率的方法
Jul 03 Python
python解析xml文件实例分析
May 27 Python
python 上下文管理器使用方法小结
Oct 10 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
python实现朴素贝叶斯算法
Nov 19 Python
浅谈python中str字符串和unicode对象字符串的拼接问题
Dec 04 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
python面试题之列表声明实例分析
Jul 08 Python
Python递归函数 二分查找算法实现解析
Aug 12 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
Python如何读写二进制数组数据
Aug 01 Python
python闭包与引用以及需要注意的陷阱
Sep 18 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
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
JavaScript 动态创建VML的方法
2009/10/14 Javascript
javascript面向对象之Javascript 继承
2010/05/04 Javascript
javascript笔记 String类replace函数的一些事
2011/09/22 Javascript
JavaScript:new 一个函数和直接调用函数的区别分析
2013/07/10 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
jquery实现简单的banner轮播效果【实例】
2016/03/30 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
jquery网页加载进度条的实现
2017/06/01 jQuery
vue项目中的webpack-dev-sever配置方法
2017/12/14 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
一些手写JavaScript常用的函数汇总
2019/04/16 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
Python实现远程调用MetaSploit的方法
2014/08/22 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
python脚本调用iftop 统计业务应用流量的思路详解
2019/10/11 Python
一款基于css3的动画按钮代码教程
2014/11/23 HTML / CSS
送给程序员的20个Java集合面试问题
2014/08/06 面试题
顶岗实习接收函
2014/01/09 职场文书
查环查孕证明
2014/01/10 职场文书
便利店投资的创业计划书
2014/01/12 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
计生专干事迹
2014/05/28 职场文书
2014年英语教学工作总结
2014/12/17 职场文书
搞笑老公保证书
2015/02/26 职场文书
Python基础之条件语句详解
2021/06/16 Python
浅析Python中的随机采样和概率分布
2021/12/06 Python