浅谈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实现的选择排序算法示例
Nov 29 Python
神经网络相关之基础概念的讲解
Dec 29 Python
将pip源更换到国内镜像的详细步骤
Apr 07 Python
Python中print和return的作用及区别解析
May 05 Python
在Python中os.fork()产生子进程的例子
Aug 08 Python
python爬虫 批量下载zabbix文档代码实例
Aug 21 Python
Django实现文件上传下载
Oct 06 Python
Python读取csv文件实例解析
Dec 30 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
Jan 20 Python
python实现批处理文件
Jul 28 Python
Python headers请求头如何实现快速添加
Nov 03 Python
Python Matplotlib绘制动画的代码详解
May 30 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
缅甸的咖啡简史
2021/03/04 咖啡文化
PHP ajax 分页类代码
2008/11/13 PHP
php绘图之加载外部图片的方法
2015/01/24 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
PHP论坛实现积分系统的思路代码详解
2020/06/01 PHP
javascript smipleChart 简单图标类
2011/01/12 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
分享十三个最佳JavaScript数据网格库
2017/04/07 Javascript
js分页之前端代码实现和请求处理
2017/08/04 Javascript
面包屑导航详解
2017/12/07 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
Vue.js中使用iView日期选择器并设置开始时间结束时间校验功能
2018/08/12 Javascript
nodejs同步调用获取mysql数据时遇到的大坑
2019/03/02 NodeJs
JS中的算法与数据结构之队列(Queue)实例详解
2019/08/20 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
python 自定义异常和异常捕捉的方法
2018/10/18 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
python3+pyqt5+itchat微信定时发送消息的方法
2019/02/20 Python
Python实现 版本号对比功能的实例代码
2019/04/18 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
python画图--输出指定像素点的颜色值方法
2019/07/03 Python
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
MCAKE蛋糕官方网站:一直都是巴黎的味道
2018/02/06 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
会计自荐书
2013/12/02 职场文书
十八大闭幕感言
2014/01/22 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
手机银行营销方案
2014/03/14 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
pytorch 实现在测试的时候启用dropout
2021/05/27 Python
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL