浅谈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中比较特别的除法运算和幂运算介绍
Apr 05 Python
简单介绍Python中的JSON使用
Apr 28 Python
在Python的Flask框架中验证注册用户的Email的方法
Sep 02 Python
Django自定义manage命令实例代码
Feb 11 Python
python 循环读取txt文档 并转换成csv的方法
Oct 26 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
python中对数据进行各种排序的方法
Jul 02 Python
利用python实现冒泡排序算法实例代码
Dec 01 Python
简单介绍django提供的加密算法
Dec 18 Python
Python 爬虫性能相关总结
Aug 03 Python
分布式全文检索引擎ElasticSearch原理及使用实例
Nov 14 Python
python 使用openpyxl读取excel数据
Feb 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
C# Assembly类访问程序集信息
2009/06/13 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
JQuery 选择器 xpath 语法应用
2010/05/13 Javascript
js取得url地址参数实例
2013/02/22 Javascript
JQuery遍历DOM节点的方法
2015/06/11 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
拖动时防止选中
2017/02/03 Javascript
基于JavaScript实现下拉列表左右移动代码
2017/02/07 Javascript
vue中用动态组件实现选项卡切换效果
2017/03/25 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
微信小程序云开发 搭建一个管理小程序
2019/05/17 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
vue如何使用rem适配
2021/02/06 Vue.js
python实现bitmap数据结构详解
2014/02/17 Python
Python3读取zip文件信息的方法
2015/05/22 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
如何用Python来理一理红楼梦里的那些关系
2019/08/14 Python
PyTorch中topk函数的用法详解
2020/01/02 Python
详解python破解zip文件密码的方法
2020/01/13 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
大学毕业生文采飞扬的自我鉴定
2013/12/03 职场文书
商务日语专业自荐信
2014/04/17 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
Pandas实现批量拆分与合并Excel的示例代码
2022/05/30 Python
Java 多线程并发FutureTask
2022/06/28 Java/Android