简介
Hash是一个键值对的集合。Hash 是一个 String 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
Hash存储结构优化:
如果field数量较少,存储结构优化为类数组结构
如果field数量较多,存储结构使用HashMap结构
原生操作
增加/修改【key的field的value】
增加/修改
hset key field value
如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。 如果字段已经存在于哈希表中,旧值将被重写
增加(多个)
hmset key field1 value1 field2 value2……
增加(锁,只有field不存在时生效)
hsetnx key field value
如果哈希表不存在,一个新的哈希表被创建并进行 hsetnx 操作。
如果字段已经存在于哈希表中,操作无效。
如果 key 不存在,一个新哈希表被创建并执行 hsetnx 命令
查询
查询一个(key的field的value)
hget key field
查询所有field
hkeys key
查询所有value
hvals key
删除【key的field】
删除一个或多个
hdel key field1 field2……
不存在的字段将被忽略
方法
判断指定key中是否存在field
hexists key field
如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0
为哈希表key中的field字段的值加上增量increment(数字)
hincrby key field increment
增量也可以为负数,相当于对指定字段进行减法操作 如果哈希表的 key 不存在,一个新的哈希表被创建并执行 hincrby 命令 如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 对一个储存字符串值的字段执行 hincrby 命令将造成一个错误
java操作redis的hash类型【boundHashOps()】
增加
往指定key中存储 键值
redisTemplate.boundHashOps("demo").put("1",1);
批量存储到指定key中
Map<String,String> map = new HashMap<>(); map.put("3","zhangsan"); map.put("4","lisi"); redisTemplate.boundHashOps("demo").putAll(map);
根据指定key判断键是否存在,存在返回false不新增,不存在则新增键值对返回true
System.out.println(redisTemplate.boundHashOps("demo").putIfAbsent("7", 5));
修改
重新命名当前key的名称
redisTemplate.boundHashOps(key).rename("test");
查询
根据指定key中得键取出值
System.out.println(redisTemplate.boundHashOps("demo").get("1"));
根据指定key取出所有键
Set<Object> keys = redisTemplate.boundHashOps("demo").keys();
获取指定key中所有键值对得值
List<Object> values = redisTemplate.boundHashOps("demo").values(); System.out.println(values);
根据指定key取出全部键值对
Map<Object, Object> entries = redisTemplate.boundHashOps("demo").entries();
删除
根据指定key中得键删除
redisTemplate.boundHashOps("demo").delete("1");
方法
设置key得到期时间 TimeUnit 设置时间类型(时、分、秒...)
redisTemplate.boundHashOps("demo").expire(100000, TimeUnit.MILLISECONDS);
获取当前key过期时间
System.out.println(redisTemplate.boundHashOps("demo").getExpire());
获取指定key得元素长度
Long size = redisTemplate.boundHashOps("demo").size();
判断指定key中是否存在该键
System.out.println(redisTemplate.boundHashOps("demo").hasKey("1"));
获取当前key的存储方式
System.out.println(redisTemplate.boundHashOps("demo").getType());