浅谈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 相关文章推荐
写了个监控nginx进程的Python脚本
May 10 Python
python的常见命令注入威胁
Feb 18 Python
Python实现按学生年龄排序的实际问题详解
Aug 29 Python
浅谈Pycharm调用同级目录下的py脚本bug
Dec 03 Python
Python2.7实现多进程下开发多线程示例
May 31 Python
python中的协程深入理解
Jun 10 Python
selenium跳过webdriver检测并模拟登录淘宝
Jun 12 Python
django 类视图的使用方法详解
Jul 24 Python
pytorch 预训练层的使用方法
Aug 20 Python
Python使用指定字符长度切分数据示例
Dec 05 Python
PyTorch使用cpu加载模型运算方式
Jan 13 Python
Python3合并两个有序数组代码实例
Aug 11 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中cookie和session的区别实例分析
2014/08/28 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
JS常见问题之为什么点击弹出的i总是最后一个
2016/01/05 Javascript
学好js,这些js函数概念一定要知道【推荐】
2017/01/19 Javascript
Web开发中客户端的跳转与服务器端的跳转的区别
2017/03/05 Javascript
JS+CSS实现下拉刷新/上拉加载插件
2017/03/31 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
vue+springboot实现项目的CORS跨域请求
2018/09/05 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
python实现清屏的方法
2015/04/30 Python
Python读取Excel的方法实例分析
2015/07/11 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
详解HTML5 data-* 自定义属性
2018/01/24 HTML / CSS
《一个中国孩子的呼声》教学反思
2014/02/12 职场文书
2014国庆节商场促销活动策划方案
2014/09/16 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
小学六一主持词开场白
2015/05/28 职场文书
毕业欢送会致辞
2015/07/29 职场文书
2016年4月份红领巾广播稿
2015/12/21 职场文书
2016党员党课心得体会
2016/01/07 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
班组长如何制订适合本班组的工作计划?
2019/07/10 职场文书
XX部保密工作制度范本
2019/08/27 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
关于Vue Router的10条高级技巧总结
2021/05/06 Vue.js
【TED出品】天梯非主流开心游1700 划水骑士
2022/03/31 魔兽争霸
解决Mysql报错 Table 'mysql.user' doesn't exist
2022/05/06 MySQL