浅谈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中使用enumerate函数遍历元素实例
Jun 16 Python
pymssql数据库操作MSSQL2005实例分析
May 25 Python
在Python 3中实现类型检查器的简单方法
Jul 03 Python
深入理解Python中字典的键的使用
Aug 19 Python
pyqt5 获取显示器的分辨率的方法
Jun 18 Python
django 单表操作实例详解
Jul 30 Python
python可视化text()函数使用详解
Feb 11 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
简单的Python人脸识别系统
Jul 14 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
Aug 04 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
Python必备技巧之字符数据操作详解
Mar 23 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/08/28 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
Avengerls vs KG BO3 第三场2.18
2021/03/10 DOTA
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
js传中文参数controller里获取参数乱码问题解决方法
2014/01/03 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
AngularJS使用angular.bootstrap完成模块手动加载的方法分析
2017/01/19 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
vue数据控制视图源码解析
2018/03/28 Javascript
jQuery模拟12306城市选择框功能简单实现方法示例
2018/08/13 jQuery
vue 实现动态路由的方法
2020/07/06 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
[51:26]VP vs VG 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
对python中dict和json的区别详解
2018/12/18 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
班班通校本培训方案
2014/03/12 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
节能环保家庭事迹材料
2014/08/27 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
语文复习计划
2015/01/19 职场文书
2015学校年度工作总结
2015/05/11 职场文书
婚礼领导致辞大全
2015/07/28 职场文书