浅谈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 07 Python
解析Python中的__getitem__专有方法
Jun 27 Python
Python 搭建Web站点之Web服务器与Web框架
Nov 06 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
python监控进程脚本
Apr 12 Python
python多线程之事件Event的使用详解
Apr 27 Python
使用python脚本实现查询火车票工具
Jul 19 Python
Python的缺点和劣势分析
Nov 19 Python
Python 私有化操作实例分析
Nov 21 Python
通过实例简单了解Python中yield的作用
Dec 11 Python
python实现指定ip端口扫描方式
Dec 17 Python
在python中利用try..except来代替if..else的用法
Dec 19 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+mysql)
2007/11/23 PHP
用php守护另一个php进程的例子
2015/02/13 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
javascript textContent与innerText的异同分析
2010/10/22 Javascript
JS制作手机端自适应缩放显示
2015/06/11 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
javascript中new关键字详解
2015/12/14 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
2016/09/06 Javascript
原生js代码实现图片放大境效果
2016/10/30 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
JavaScript数组排序功能简单实现
2020/05/14 Javascript
Python实现字典依据value排序
2016/02/24 Python
python读取二进制mnist实例详解
2017/05/31 Python
Python探索之修改Python搜索路径
2017/10/25 Python
Python使用ConfigParser模块操作配置文件的方法
2018/06/29 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
Django框架配置mysql数据库实现过程
2020/04/22 Python
CSS伪类与CSS伪元素的区别及由来具体说明
2012/12/07 HTML / CSS
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
欧洲顶级的童装奢侈品购物网站:Bambini Fashion(面向全球)
2018/04/24 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2016/09/20 面试题
物业工作计划书
2014/01/10 职场文书
法学个人求职信范文
2014/01/27 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
学校运动会霸气口号
2014/06/07 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
博士生专家推荐信
2014/09/26 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸