浅谈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中getaddrinfo()基本用法实例分析
Jun 28 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
Jun 13 Python
Python微信库:itchat的用法详解
Aug 14 Python
python实现数独游戏 java简单实现数独游戏
Mar 30 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
Python微医挂号网医生数据抓取
Jan 24 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
Feb 28 Python
pandas分区间,算频率的实例
Jul 04 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
python map比for循环快在哪
Sep 21 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 Python
用Python简陋模拟n阶魔方
Apr 17 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/03/17 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
PHP xpath()函数讲解
2019/02/11 PHP
javascript 写类方式之六
2009/07/05 Javascript
jquery 列表双向选择器之改进版
2013/08/09 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
js获取窗口相对于屏幕左边和上边的位置坐标
2014/05/15 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
javascript简单判断输入内容是否合法的方法
2016/05/11 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
AngularJS表格样式简单设置方法示例
2017/03/03 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
2018/11/13 Javascript
浅谈vue后台管理系统权限控制思考与实践
2018/12/19 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
微信小程序设置滚动条过程详解
2019/07/25 Javascript
jQuery zTree如何改变指定节点文本样式
2020/10/16 jQuery
[01:02:47]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
Python heapq使用详解及实例代码
2017/01/25 Python
python扫描proxy并获取可用代理ip的实例
2017/08/07 Python
EM算法的python实现的方法步骤
2018/01/02 Python
django模板结构优化的方法
2019/02/28 Python
详解python中各种文件打开模式
2020/01/19 Python
pycharm内无法import已安装的模块问题解决
2020/02/12 Python
MYPROTEIN澳大利亚官方网站:欧洲运动营养品牌
2019/06/26 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
英国领先的在线礼品店:Getting Personal
2019/09/24 全球购物
大学团支书的自我评价分享
2013/12/14 职场文书
大学生饮食配送创业计划书
2014/01/04 职场文书
庆元旦主持词
2015/07/06 职场文书
Redis Stream类型的使用详解
2021/11/11 Redis