咱们在缓存json数据到redis时常常会面临是选择string类型仍是选择hash类型去存储。接下来我从占用空间和IO两方面来分析这两种类型的优点。redis
根据数据结构的共识咱们知道hashtable类型是要比string类型更占用空间, 而ziplist类型与string类型占用的空间基本相差不大。json
以下图就是ziplist的存储的格式缓存
那咱们接下来分别分析redis的string和hash类型占用空间方面的知识数据结构
string类型: string类型固然如其名,若是json数据以string类型去存储,那么它的空间占用方面确定是至关的。编码
hash类型: redis对hash类型是有两种编码方式,分别是ziplist和hashtable。对象
当以下状况时redis的hash类型,底层是用ziplist编码的:blog
- 哈希对象保存的全部键值对的键和值的字符串长度都小于 64 字节;
- 哈希对象保存的键值对数量小于 512 个;
不知足上述状况时,redis的hash类型,底层编码格式为hashtable。ip
从IO的角度来分析string和hash类型,咱们得有一个共识,咱们知道redis是有服务端的,也就是部署redis的所在机器他们会运算能力的。字符串
string类型:部署
hash类型:
综上所述,那具体怎么选择是用string类型仍是hash类型存储json数据呢?给出如下结论