特性
Hash 是一个 String 类型的 field(域)和 value(值)的映射表,Hash 特别适合存储对象。Redis 中每个 Hash 可以存储 2^32-1 个键值对(4,294,967,295)。

使用场景
- 缓存对象数据
- 缓存购物车信息
- 缓存商品信息
- 计数器
命令使用
| 命令 | 描述 | 时间复杂度 |
|---|---|---|
| HDEL | 删除哈希表 key 中的一个或多个指定域,不存在的域将被忽略 |
O(N), N 为要删除的域的数量 |
| HEXISTS | 查看哈希表 key 中,给定域 field 是否存在 |
O(1) |
| HSET | 返回哈希表 key 中给定域 field 的值 |
O(1) |
| HGETALL | 返回哈希表 key 中,所有的域和值 |
O(N), N 为哈希表的大小 |
| HINCRBY | 为哈希表 key 中的域 field 的值加上增量 increment |
O(1) |
| HINCRBYFLOAT | 为哈希表 key 中的域 field 加上浮点数增量 increment |
O(1) |
| HKEYS | 返回哈希表 key 中的所有域 |
O(N), N 为哈希表的大小 |
| HLEN | 返回哈希表 key 中域的数量 |
O(1) |
| HMGET | 返回哈希表 key 中,一个或多个给定域的值 |
O(N), N 为给定域的数量 |
| HMSET | 同时将多个 field-value (域-值)对设置到哈希表 key 中 |
O(N), N 为 field-value 对的数量 |
| HSET | 将哈希表 key 中的域 field 的值设为 value |
O(1) |
| HSETNX | 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在 |
O(1) |
| HVALS | 返回哈希表 key 中所有域的值 |
O(N), N 为哈希表的大小 |
| HSCAN | 用于迭代哈希表中的键值对 | O(N), N 为哈希表的大小 |
说明
HINCRBY:
为哈希表 key 中的域 field 的值加上增量 increment 。
增量也可以为负数,相当于对给定域进行减法操作。
如果 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。
如果域 field 不存在,那么在执行命令前,域的值被初始化为 0 。
对一个储存字符串值的域 field 执行 HINCRBY 命令将造成一个错误。
本操作的值被限制在 64 位(bit)有符号数字表示之内。
HINCRBYFLOAT
如果哈希表中没有域 field ,那么 HINCRBYFLOAT 会先将域 field 的值设为 0 ,然后再执行加法操作。
如果键 key 不存在,那么HINCRBYFLOAT 会先创建一个哈希表,再创建域 field ,最后再执行加法操作。
当以下任意一个条件发生时,返回一个错误:
- 域
field的值不是字符串类型(因为 redis 中的数字和浮点数都以字符串的形式保存,所以它们都属于字符串类型) - 域
field当前的值或给定的增量increment不能解释(parse)为双精度浮点数(double precision floating point number)
HINCRBYFLOAT 命令的详细功能和 INCRBYFLOAT 命令类似,请查看 INCRBYFLOAT 命令获取更多相关信息。
HMGET
如果给定的域不存在于哈希表,那么返回一个 nil 值。
因为不存在的 key 被当作一个空哈希表来处理,所以对一个不存在的 key 进行 HMGET 操作将返回一个只带有 nil 值的表。
HMSET
此命令会覆盖哈希表中已存在的域。
如果 key 不存在,一个空哈希表被创建并执行 HMSET 操作。
HSET
如果 key 不存在,一个新的哈希表被创建并进行 HMSET 操作。
如果域 field 已经存在于哈希表中,旧值将被覆盖。
HSETNX
将哈希表 key 中的域 field 的值设置为 value ,当且仅当域 field 不存在。
若域 field 已经存在,该操作无效。
如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。
RedisTemplate 基本使用
添加
通过put方法添加元素
redisTemplate.opsForHash().put("hash:key","1","1号");
redisTemplate.opsForHash().put("hash:key","2","2号");
redisTemplate.opsForHash().put("hash:key","3","3号");
通过putAll方法以map集合的形式添加
Map<String, String> newMap = new HashMap<>();
newMap.put("6","6号");
newMap.put("7","7号");
newMap.put("8","8号");
newMap.put("9","9号");
redisTemplate.opsForHash().putAll("hash:key",newMap);
查询
通过values(H key)方法获取变量中的hashMap值
redisTemplate.opsForHash().put("hash:key","1","1号");
redisTemplate.opsForHash().put("hash:key"

最低0.47元/天 解锁文章

644

被折叠的 条评论
为什么被折叠?



