哈希类型
与字符串的区别,相当于在value中又增加了键值对,套娃

命令


- 修改:hmget key field、hmset key field value [field value],图上少了个key
编码方式
哈希的内部编码方式有两种:
-
ziplist(压缩列表)
当哈希类型元素个数小于 Redis 的默认值配置时,而且所有的value都小于 Redis 的默认值配置时,Redis 就会使用ziplist作为哈希的内部实现,能更加节省内存(前提是满足上述两个条件);普通的哈希表,数组上会有些位置有元素,有些没有,那就会浪费一定的空间。
但ziplist的读写速度是比hashtable要慢的
-
hashtable(哈希表)
当ziplist无法满足存储时,Redis 使用哈希表作为哈希的内部实现,ziplist存的多了读写效率就下降了,而hashtable的读写速度复杂度为o(1)
应用场景
-
作为缓存,存储结构化的数据,除了可以用String方式,也能用哈希
String 类型,如JSON格式,如果要修改特定的值,就需要整个取出来,对某一属性进行修改,再存回去
若哈希方式存储,则可以单独取出对象属性,更加方便

使用hash方式,确实读写field更加直观高效,但也付出了内存空间代价,故要合理分配
- 与数据库不同的稀疏性
- 哈希类型是稀疏的,而关系型数据库(MySQL等)是完全结构化的,例如哈希每个键都可以拥有不同的field,而MySQL等想要添加新的一列,那每一行都要为其设置值
- 关系型数据库更加适合做复杂的关系联合查询
