Redis哈希类型
- 哈希类型就是值为Map 类型
- 命令
- 设置值:hset key field value,成功返回1,失败返回0,hsetnx 命令与setnx 命令类似,但作用域不是键,而是field
- 获取值:hget key field,如果键或field 不存在则返回nil
- 删除键:hdel key field [field1…],删除一个或多个field,返回结果为成功删除的field个数
- 计算某个key的field个数:hlen key
- 批量设置和获取值:hmset key field1 value1 field2 value2,hmget key field1 field2
- 判断是否包含field:hexists key field,存在则返回1,不存在则返回0
- 获取key的所有field 域:hkeys key
- 获取key的所有域的值:hvals key
- 获取key的所有field-value:hgetall key
- 内部编码
- 哈希类型的内部编码有两种:ziplist(压缩列表)和 hashtable(哈希表)
- ziplist 使用更加紧凑的存储结构,所以比hashtable 更节省内存
- 当不能满足ziplist 的存储要求时(数据量较大),ziplist的读写效率会下降,此时redis会使用hashtable
- 使用场景
- 缓存关系型数据
使用字符串序列化也可以缓存关系型数据,但哈希类型更加直观
哈希类型是稀疏的,而关系型数据库是完全结构化,如下图所示:
关系型数据库可以做复杂的关系查询,而redis模拟关系查询难度大,维护成本高
-
缓存数据的三种方法
- 原生字符串,每个属性一个键
set user:1:name tom set user:1:age 23 set user:1:city beijing- 序列化字符串类型,将信息序列化后用一个键保存
set user:1 serialize(userInfo)- 哈希类型,对象的一个属性用一个field-value 保存,总共只用一个键
hmset user:1 name tom age 23 city beijing
列表
- redis列表是值为List的类型,且这个List的两端都是可以插入和弹出的
- 列表有两个特点:有序 和 可重复
- 命令