浅谈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 相关文章推荐
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
Python 数据结构之队列的实现
Jan 22 Python
Python json 错误xx is not JSON serializable解决办法
Mar 15 Python
浅析python实现scrapy定时执行爬虫
Mar 04 Python
python样条插值的实现代码
Dec 17 Python
Python异常处理知识点总结
Feb 18 Python
python爬虫 execjs安装配置及使用
Jul 30 Python
Python 读取用户指令和格式化打印实现解析
Sep 02 Python
关于Python中定制类的比较运算实例
Dec 19 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
Mar 10 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 Python
python中scrapy处理项目数据的实例分析
Nov 22 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
模拟xcopy的函数
2006/10/09 PHP
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
2010/05/26 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
2010/06/28 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
JavaScript中的关键字"VAR"使用详解 分享
2013/07/31 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
JavaScript中字符串分割函数split用法实例
2015/04/07 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
基于 D3.js 绘制动态进度条的实例详解
2018/02/26 Javascript
Angular CLI在Angular项目中如何使用scss详解
2018/04/10 Javascript
解决layui弹出层layer的area过大被遮挡的问题
2019/09/21 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
[51:50]完美世界DOTA2联赛 Magma vs GXR 第一场 11.07
2020/11/10 DOTA
Python实现文件按照日期命名的方法
2015/07/09 Python
通过Python实现一个简单的html页面
2020/05/16 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
机械设计专业应届生求职信
2013/11/21 职场文书
园林技术个人的自我评价
2014/02/15 职场文书
小学清明节活动方案
2014/03/08 职场文书
元旦晚会主持词
2014/03/24 职场文书
2014和解协议书范文
2014/09/15 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
导游词之苏州阳澄湖
2019/11/15 职场文书
HTML5简单实现添加背景音乐的几种方法
2021/05/12 HTML / CSS
Echarts如何重新渲染实例详解
2022/05/30 Javascript