浅谈python处理json和redis hash的坑

 更新时间:2020年07月16日 10:38:18   作者:lxmhhy  
这篇文章主要介绍了浅谈python处理json和redis hash的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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按行读取文件,去掉每行的换行符\n的实例

    python按行读取文件,去掉每行的换行符\n的实例

    下面小编就为大家分享一篇python按行读取文件,去掉每行的换行符\n的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • pycharm社区版安装django并创建一个简单项目的全过程

    pycharm社区版安装django并创建一个简单项目的全过程

    社区版的pycharm跟专业版的pycharm应用差别还是不太大,下面这篇文章主要给大家介绍了关于pycharm社区版安装django并创建一个简单项目的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • Python中多继承与菱形继承问题的解决方案与实践

    Python中多继承与菱形继承问题的解决方案与实践

    在Python这个灵活且功能强大的编程语言中,多继承是一个既强大又复杂的概念,它允许一个类继承自多个父类,从而能够复用多个父类的属性和方法,本文将深入解释Python中的多继承概念,详细剖析菱形继承问题,并探讨Python是如何解决这一难题的,需要的朋友可以参考下
    2024-07-07
  • python去除字符strip方法的实现

    python去除字符strip方法的实现

    Python中strip()方法用于去除字符串首尾的空白字符,包括空格、制表符和换行符,可以确保字符串没有多余的空白字符,感兴趣的可以了解一下
    2024-11-11
  • python实现报表自动化详解

    python实现报表自动化详解

    这篇文章主要介绍了python实现报表自动化详解,涉及python读,写excel—xlwt常用功能,xlutils 常用功能,xlwt写Excel时公式的应用等相关内容,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • pyinstaller将python程序打包为可执行文件

    pyinstaller将python程序打包为可执行文件

    这篇文章主要介绍了pyinstaller将python程序打包为可执行文件,pyinstaller是一个python打包工具,它将python程序及所需依赖都打包成一个可执行文件
    2022-08-08
  • Pytest fixture及conftest相关详解

    Pytest fixture及conftest相关详解

    这篇文章主要介绍了Pytest fixture及conftest相关详解,fixture是在测试函数运行前后,由pytest执行的外壳函数,更多相关内容需要的朋友可以参考一下
    2022-09-09
  • 使用wxPython实现Windows11任务栏通知功能

    使用wxPython实现Windows11任务栏通知功能

    这篇文章主要为大家详细介绍了如何使用 wxPython 模块,在 Windows 11 中实现任务栏通知功能,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-10-10
  • Python3爬虫中Selenium的用法详解

    Python3爬虫中Selenium的用法详解

    在本篇内容里小编给大家分享了关于Python3爬虫中Selenium的用法详解内容,需要的朋友们可以参考下。
    2020-07-07
  • 一步步教你用python代码画一幅星空

    一步步教你用python代码画一幅星空

    这篇文章主要给大家介绍了关于如何使用python代码画一幅星空的相关资料,Python是一种非常流行的编程语言,它可以用来创建许多有趣的项目,例如绘制星空,需要的朋友可以参考下
    2023-09-09

最新评论