redis存json数据时选择string还是hash

Deep Learn I’m back.

我们在缓存json数据到redis时经常会面临是选择string类型还是选择hash类型去存储。接下来我从占用空间和IO两方面来分析这两种类型的优势。

1、占用空间

根据数据结构的共识我们知道hashtable类型是要比string类型更占用空间, 而ziplist类型与string类型占用的空间基本相差不大。

如下图就是ziplist的存储的格式

那我们接下来分别分析redis的string和hash类型占用空间方面的知识

  • string类型: string类型当然如其名,如果json数据以string类型去存储,那么它的空间占用方面肯定是相当的。

    微博登录接入出现错误码21322(重定向地址不匹配),其他解决方法

  • hash类型: redis对hash类型是有两种编码方式,分别是ziplist和hashtable。

    当如下情况时redis的hash类型,底层是用ziplist编码的:

    1. 哈希对象保存的所有键值对的键和值的字符串长度都小于 64 字节;
    2. 哈希对象保存的键值对数量小于 512 个;

    不满足上述情况时,redis的hash类型,底层编码格式为hashtable。

2、IO

从IO的角度来分析string和hash类型,我们得有一个共识,我们知道redis是有服务端的,也就是部署redis的所在机器他们会运算能力的。

  • string类型:

    • 取数据:根据redis键取对应的整个value值。
    • 存数据:根据redis键存这个value值
    • 更新数据: 根据redis键更新整个value值
  • hash类型:

    • 取数据:根据redis键,然后遍历整个hash键值对(相对string的取数据更加耗时)。
    • 存数据:根据redis键,在value出存键值对
    • 更新数据:根据redis键和hash key更新对应的数据

3、总结

综上所述,那具体怎么选择是用string类型还是hash类型存储json数据呢?给出以下结论

  • 如果你的业务类型中对于缓存的读取缓存的场景更多,并且更新缓存不频繁(或者每次更新都更新json数据中的大多数key),那么选择string类型作为存储方式会比较好。
  • 如果你的业务类型中对于缓存的更新比较频繁(特别是每次只更新少数几个键)时, 或者我们每次只想取json数据中的少数几个键值时,我们选择hash类型作为我们的存储方式会比较好。

Kafka 入门(四)– Python Kafka Client 性能测试

给TA买糖
共{{data.count}}人
人已赞赏
经验教程

Flink SQL结合Kafka、Elasticsearch、Kibana实时分析电商用户行为

2021-1-16 10:41:00

经验教程

Deep Learn I'm back.

2021-1-16 11:53:00

⚠️
免责声明:根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。 本站为个人博客非盈利性站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途,网站会员捐赠是您喜欢本站而产生的赞助支持行为,仅为维持服务器的开支与维护,全凭自愿无任何强求。本站部份代码及教程来源于互联网,仅供网友学习交流,若您喜欢本文可附上原文链接随意转载。
无意侵害您的权益,请发送邮件至 momeis6@qq.com 或点击右侧 私信:momeis 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索