浅谈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中sys.argv函数精简概括
Jul 08 Python
django进阶之cookie和session的使用示例
Aug 17 Python
python读取txt文件中特定位置字符的方法
Dec 24 Python
Python给图像添加噪声具体操作
Mar 03 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
Python collections中的双向队列deque简单介绍详解
Nov 04 Python
基于python实现计算两组数据P值
Jul 10 Python
最简单的matplotlib安装教程(小白)
Jul 28 Python
简述python Scrapy框架
Aug 17 Python
深入了解Python 方法之类方法 & 静态方法
Aug 17 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
Python+腾讯云服务器实现每日自动健康打卡
Dec 06 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
图书管理程序(二)
2006/10/09 PHP
PHP 作用域解析运算符(::)
2010/07/27 PHP
浅析php数据类型转换
2014/01/09 PHP
php中explode的负数limit用法分析
2015/02/27 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
简单谈谈PHP中strlen 函数
2016/02/27 PHP
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
jquery获取tr中控件值并操作tr实现思路
2013/03/27 Javascript
js实现收缩菜单效果实例代码
2013/10/30 Javascript
jquery放大镜效果超漂亮噢
2013/11/15 Javascript
网站繁简切换的JS遇到页面卡死的解决方法
2014/03/12 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
jQuery插件zTree实现的多选树效果示例
2017/03/08 Javascript
解决vue+webpack打包路径的问题
2018/03/06 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
微信小程序实现单选选项卡切换效果
2020/06/19 Javascript
JavaScript如何获取一个元素的样式信息
2019/07/29 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
[01:22:42]2014 DOTA2华西杯精英邀请赛 5 24 DK VS LGD
2014/05/26 DOTA
[00:27]DOTA2次级职业联赛 - Lilith战队宣传片
2014/12/01 DOTA
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
Flask框架Jinjia模板常用语法总结
2018/07/19 Python
详解python分布式进程
2018/10/08 Python
python实现多进程按序号批量修改文件名的方法示例
2019/12/30 Python
boostrap modal 闪现问题的解决方法
2020/09/01 HTML / CSS
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
机关门卫岗位职责
2013/12/30 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
农民工创业典型事迹
2014/01/25 职场文书
经典婚礼主持词
2014/03/13 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
房地产端午节活动方案
2014/08/24 职场文书
Python turtle编写简单的球类小游戏
2022/03/31 Python