浅谈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写的Socks5协议代理服务器
Aug 06 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
数据清洗--DataFrame中的空值处理方法
Jul 03 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
python开头的coding设置方法
Aug 08 Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 Python
Python开发入门——迭代的基本使用
Sep 03 Python
Pycharm自动添加文件头注释和函数注释参数的方法
Oct 23 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
自己搭建resnet18网络并加载torchvision自带权重的操作
May 13 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
各种战术和打法的原创者
2020/03/04 星际争霸
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
JavaScript数组迭代器实例分析
2015/06/09 Javascript
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
NODE.JS跨域问题的完美解决方案
2016/10/20 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
浅谈Angular6的服务和依赖注入
2018/06/27 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
2020/10/02 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
vue+Element-ui前端实现分页效果
2020/11/15 Javascript
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
python邮件发送smtplib使用详解
2020/06/16 Python
老生常谈python中的重载
2018/11/11 Python
python对于requests的封装方法详解
2019/01/03 Python
windows系统中Python多版本与jupyter notebook使用虚拟环境的过程
2019/05/15 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
美国宠物美容和宠物用品购物网站:Cherrybrook
2018/12/07 全球购物
俄罗斯设计师家具购物网站:The Furnish
2019/12/01 全球购物
TUMI香港官网:国际领先的行李箱、背囊品牌
2021/03/01 全球购物
开门红主持词
2014/04/02 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
个人先进材料范文
2014/12/30 职场文书
八月迷情观后感
2015/06/11 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书