一、Hash 类型
1、Redis Hash 是一个键值对集合; 2、Redis Hash 是一个 String 类型的 field 和 value 的映射表, hash 特别适合用于存储对象; 3、类似 Java 里面的 Map<String, String>; 4、分析一个问题:现有一个 JavaBean 对象,在 Redis 中如何存? 方案一:用户 ID 为 key, value 为 JavaBean 序列化后的字符串缺点:每次修改用户的某个属性需要,先反序列化改好后再序列化回去,开销较大。
方案二:用户 ID + 属性名作为 key,属性值作为 Value
缺点:用户 ID数据冗余
方案三:通过 key(用户ID)+ field(属性标签)就可以操作对应属性数据了,既不需要重复存储数据,也不会带来序列化和并发修改控制的问题。
二、常用操作
hset <key> <field> <value> | 从 <key> 集合中的 <field> 键赋值 <value> |
hget <key1> <field> | 从 <key1> 集合 <field> 取出 value |
hmset <key1> <field1><value2><field2><value2>... | 批量设置 hash 的值 |
hexists key <field> | 查看哈希表 key 中,给定域 field 是否存在 |
hkeys <key> | 列出该 hash 集合的所有 field |
hvals <key> | 列出该 hash 集合的所有 value |
hgetall | 获取所有的键值 |
hincrby <key> <field> <increment> | 为哈希表 key 中的域 field 的值加上增量 increment |
hsetnx <key> <field> <value> | 将哈希表 key 中的域 field 的值设置为 value,当且仅当域 field 不存在 |