散列表
Redis 散列键是将一个 k 与一个 map 在数据库关联起来,和 string 类型一样,k-v 可以是文本,也能是二进制。
基本命令
HSET
设置 k-v 散列。
1 | -- 设置 k-v,v 是一个 map |
时间复杂度:O(1)
HSETNX
同 SETNX,只有在指定字段不存在时才会生效。
1 | -- 不存在,设置成功,返回 true |
时间复杂度:O(1)
HGET
查询 k-v 字符串。
1 | -- 查询 title |
时间复杂度:O(1)
HSTRLEN
同 STRLEN,查询 map 中对应字段的长度。
1 | -- 返回 len(hanzhang.name) |
时间复杂度:O(n)
HEXISTS
检查 map 中对应的字段是否存在。
1 | -- name 存在 -> 返回 true |
时间复杂度:O(1)
HDEL
删除 map 中对应字段。
1 | -- 获取 hanzhang 对应字段数量,不存在则返回 0 |
时间复杂度:O(1)
HLEN
获取 map 的字段数量。
1 | SET message "hello world" |
时间复杂度:O(n)
HMSET
同时一次为散列中设置多个字段。
1 | -- 给 hanzhang 设置 name 和 age 字段 |
时间复杂度:O(n)
HMGET
同时获取多个字段。
1 | -- 获取 hanzhang 的 name、age 和 gender |
时间复杂度:O(n)
HKEYS
1 | -- 获取 hanzhang 的所有 key |
HVALS
1 | -- 获取 hanzhang 的所有 val |
HGETALL
1 | -- 获取 hanzhang 的所有 k-v |
对比字符串
散列的优点
- 只需要一个 key,就可以把人一多的字段存储到 key 中,减少资源消耗;
- 让数据更容易理解,方便操作;
字符串的优点
- 字符串的操作更丰富。例如,APPEND、SETRANGE 等;
- 过期时间设置比较灵活;
总结
- k 和 v 都是既可以存储二进制,又可以存储字符串;
- v 对应的是一个 map;
- map 中的字段在底层是无序的;