Redis哈希类型

  1. 哈希类型就是值为Map 类型
  2. 命令
  • 设置值: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
  1. 内部编码
  • 哈希类型的内部编码有两种:ziplist(压缩列表)和 hashtable(哈希表)
  • ziplist 使用更加紧凑的存储结构,所以比hashtable 更节省内存
  • 当不能满足ziplist 的存储要求时(数据量较大),ziplist的读写效率会下降,此时redis会使用hashtable
  1. 使用场景
  • 缓存关系型数据

redis哈希与列表类型

使用字符串序列化也可以缓存关系型数据,但哈希类型更加直观

哈希类型是稀疏的,而关系型数据库是完全结构化,如下图所示:

redis哈希与列表类型

关系型数据库可以做复杂的关系查询,而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
    

列表

  1. redis列表是值为List的类型,且这个List的两端都是可以插入和弹出的

redis哈希与列表类型

  1. 列表有两个特点:有序 和 可重复
  2. 命令

相关文章: