浅谈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 splitlines使用技巧
Sep 06 Python
python实现巡检系统(solaris)示例
Apr 02 Python
python两种遍历字典(dict)的方法比较
May 29 Python
python snownlp情感分析简易demo(分享)
Jun 04 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
使用 Python 实现简单的 switch/case 语句的方法
Sep 17 Python
Python正则表达式和re库知识点总结
Feb 11 Python
python模拟实现斗地主发牌
Jan 07 Python
Python with标签使用方法解析
Jan 17 Python
python+selenium+PhantomJS抓取网页动态加载内容
Feb 25 Python
python实现简单的tcp 文件下载
Sep 16 Python
python Django框架快速入门教程(后台管理)
Jul 21 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读取大文件的类SplFileObject使用介绍
2014/04/09 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
JQuery AJAX提交中文乱码的解决方案
2010/07/02 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
AngularJS  ng-repeat遍历输出的用法
2017/06/19 Javascript
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
jQuery实现获取table中鼠标click点击位置行号与列号的方法
2017/10/09 jQuery
JS改变页面颜色源码分享
2018/02/24 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
2018/08/13 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
jquery传参及获取方式(两种方式)
2020/02/13 jQuery
Vue Router 实现动态路由和常见问题及解决方法
2020/03/06 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
使用Python编写简单的端口扫描器的实例分享
2015/12/18 Python
Python 中 list 的各项操作技巧
2017/04/13 Python
python后端接收前端回传的文件方法
2019/01/02 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
BeautifulSoup获取指定class样式的div的实现
2020/12/07 Python
css3的动画特效之动画序列(animation)
2017/12/22 HTML / CSS
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
新大陆软件面试题
2016/11/24 面试题
信用社实习人员自我鉴定
2013/09/20 职场文书
《莫高窟》教学反思
2014/02/25 职场文书
班长竞选演讲稿
2014/04/24 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
商场广播稿范文
2015/08/19 职场文书
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android