在 redis 中,string 类型和 hash 类型,都可以用来存储对象信息(结构体数据)。
那么,string 和 hash 有什么区别?该如何抉择?
既然 string 可以实现相同的功能,为何还要用 hash 呢?在 redis 官网可看到优先使用 hash 的字眼,主要是基于以下三个因素:内存占用率、时间复杂度和使用的简便性。
假设用户表 user 有三个字段 id, name 和 age。
string 类型
第一种存储方式:单独存储用户的每个属性(字段)
127.0.0.1:6379> set user:1:name jack
OK
127.0.0.1:6379> set user:1:age 20
OK
- 优点:简单直观,便于对用户的每个属性进行查询和更新。
- 缺点:占用了更多的 key 和内存资源,用户的属性过于分散。
在生产环境中,一般不会采用这种方式。
第二种存储方式:先将整个用户信息(对象或数组)转换为 json 字符串,然后再存储。
set user:1 json_str
- 优点:占用的 key 和内存资源少。
- 缺点:操作比较麻烦,每次都要使用序列化和反序列化,有一定开销。而且不便于单独操作用户的