浅谈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.2模拟实现webqq登录
Feb 15 Python
python版本的读写锁操作方法
Apr 25 Python
python清除函数占用的内存方法
Jun 25 Python
Python wxPython库使用wx.ListBox创建列表框示例
Sep 03 Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
如何基于Python批量下载音乐
Nov 11 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
Jan 14 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 Python
Python list和str互转的实现示例
Nov 16 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 Python
python中的对数log函数表示及用法
Dec 09 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 5.0 Pear安装方法
2006/12/06 PHP
PHP 自定义错误处理函数的使用详解
2013/05/10 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
2016/05/27 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
2014/10/16 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
浅析jquery如何判断滚动条滚到页面底部并执行事件
2016/04/29 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
Vue组件和Route的生命周期实例详解
2018/02/10 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
puppeteer实现html截图的示例代码
2019/01/10 Javascript
JQuery省市联动效果实现过程详解
2020/05/08 jQuery
jQuery实现的分页插件完整示例
2020/05/26 jQuery
Python中使用ConfigParser解析ini配置文件实例
2014/08/30 Python
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
python3中的md5加密实例
2018/05/29 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
萨克斯第五大道的折扣店:Saks Fifth Avenue OFF 5TH
2016/08/25 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
锦旗标语大全
2014/06/23 职场文书
个人授权委托书范本
2014/09/14 职场文书
狼牙山五壮士观后感
2015/06/09 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
开发一个封装iframe的vue组件
2021/03/29 Vue.js