Redis 中哈希结构就如同 Java 的 map 一样,一个对象里面有许多键值对,它是特别适合存储对象的,如果内存足够大,那么一个 Redis 的 hash 结构可以存储 2 的 32 次方减 1 个键值对(40 多亿)。
一般而言,不会使用到那么大的一个键值对,所以我们认为 Redis 可以存储很多的键值对。在 Redis 中,hash 是一个 String 类型的 field 和 value 的映射表,因此我们存储的数据实际在 Redis 内存中都是一个个字符串而已。
假设角色有 3 个字段:编号(id)、角色名称(roleName)和备注(note),这样就可以使用一个 hash 结构保存它,它的内存结果如表 1 所示。
表 1 角色hash结构
role_1
field
value
id
001
roleName
role_name_001
note
note_001
在 Redis 中它就是一个这样的结构,其中 role_1 代表的是这个 hash 结构在 Redis 内存的 key,通过它就可以找到这个 hash 结构,而 hash 结构由一系列的 field 和 value 组成,下面用 Redis 的命令来保存角色对象,如图 1 所示。
图 1 使用Redis命令保存角色对象
上面的命令保存了一个角色对象。在 Redis 中,角色对象是通过键 role_1 来索引的,而角色本身是一个如表 1 所示的 hash 结构。hash 的键值对在内存中是一种无序的状态,我们可以通过键找到对应的值。
Redis hash 结构命令,如表 2 所示。
表 2 Redis hash结构命令
命 令
说 明
备 注
hdel key field1[field2......]
删除 hash 结构中的某个(些)字段
可以进行多个字段的删除
hexists key field
判断 hash 结构中是否存在 field 字段
存在返回 1,否则返回 0
hgetall