Redis 基础教程

Redis 命令

Redis 高级教程

Redis 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/redis-strings-vs-hashes-to-represent-json-efficiency.html

Redis 存储 json 格式的 payload 数据,选择 string 还是 hash 数据结构

Redis 笔记 Redis 笔记


开发者如果想把 json 格式的 payload 数据存储至 redis,有两种数据结构可以选择,一种是可以把数据包装成 json 字符串形式存储成 strings 结构,另一种是把 payload 的每个字段及字段值存储成 hashes 结构的 field 和 value。

string vs hash 如何选择

SET user:1 "{\"name\":\"john\",\"location\":\"NY\",\"salary\":50000}"

选择 string 结构的场景:

  1. 如果你会用到 json 数据的绝大多数字段(fields)时;
  2. 如果 json 数据不会高频率更新;
  3. 如果对应数据比较大; 
HSET user:1 name john
HSET user:1 location NY
HSET user:1 salary 50000

选择 hash 结构的场景:

  1. 如果你主要使用 json 数据的单个字段(single field)时;
  2. 如果 json 数据的某些字段高频率更新时;
  3. 如果对应存储数据不是很大时,hash 采用 ziplist 的压缩结构,空间占用和 string 一样;

hash 结构的 ziplist

当 hash 结构的 field 和 value 满足如下条件时,redis 针对 hash 结构采用 ziplist 编码方式,该编码是压缩列表相比 hashtable 节省很多空间:

  1. 哈希对象保存的所有键值对的键和值的字符串长度都小于设置的阈值(默认:64 字节)时;
  2. 哈希对象保存的键值对数量小于指定阈值(默认:512 个)时;

上述两项的阈值通过 redis 配置文件可以修改;

hash-max-ziplist-entries 512

hash-max-ziplist-value 64

当数据满足 hash 结构的 ziplist 编码方式时,hash 结构存储的数据占空间与 string 结构的基本相同。

python 的字典类型(dict)数据如何保存为 json 格式的文件,标准库 json 模块提供了 dump 函数即可解决该问题。 ...
在Java中将String转换为JSON有多种方式,最常见的是使用第三方库,如Jackson、Gson等。示例代码:Maven依赖:Grad ...
python 中,如果指定文件内容是 json 格式的数据,可以通过 json 模块的 load 方法读取到字典(dict)对象。 ...
python 字符串 str 转 json 对象(本质上的 python 的 dict 对象)可以利用标准库中提供的 json 模块的 lo ...
Redis 基于 Java 的客户端非常多,其中比较常用的有 Jedis、lettuce 及 Redisson,此外还有 aredis、JD ...