浅谈python处理json和redis hash的坑

作者:lxmhhy 时间:2023-08-01 10:51:14 

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

来源:https://www.cnblogs.com/lxmhhy/p/6065603.html

标签:python,json,redis,hash
0
投稿

猜你喜欢

  • mysql 5.7更改数据库的数据存储位置的解决方法

    2024-01-21 11:56:43
  • python如何用pyecharts制作词云图

    2021-05-16 09:35:46
  • 关于Python解包知识点总结

    2021-01-03 22:34:15
  • Numpy数组array和矩阵matrix转换方法

    2021-06-25 06:17:26
  • 数据库查询排序使用随机排序结果示例(Oracle/MySQL/MS SQL Server)

    2024-01-18 20:14:13
  • 数据库连接方式汇总

    2024-01-15 22:15:06
  • js判断设备是否为PC并调整图片大小

    2024-05-02 16:12:22
  • django中模板的html自动转意方法

    2023-06-28 15:33:49
  • 解析SQL Server 2005 溢用之:合并列值

    2009-01-23 14:08:00
  • SQL Server端口更改后的数据库连接方式

    2008-12-29 14:11:00
  • python opencv 批量改变图片的尺寸大小的方法

    2021-09-13 12:55:01
  • python3.5 tkinter实现页面跳转

    2022-08-03 22:23:46
  • Python如何实现的二分查找算法

    2021-10-22 18:39:30
  • 谈谈网页一屏有多大?

    2007-12-21 12:28:00
  • 深入分析PHP引用(&)

    2023-11-23 00:42:35
  • ASP.NET程序中用Repeater实现分页

    2024-05-09 09:02:48
  • python3实现暴力穷举博客园密码

    2022-10-24 22:38:21
  • python编程通过蒙特卡洛法计算定积分详解

    2022-05-31 10:45:01
  • python爬取微信公众号文章的方法

    2022-01-25 15:29:25
  • python实现多线程端口扫描

    2021-07-06 03:27:26
  • asp之家 网络编程 m.aspxhome.com