如何使用RedisTemplate访问Redis数据结构之Hash
Redis的Hash数据机构
Redis的散列可以让用户将多个键值对存储到一个Redis键里面。
public interface HashOperations<H,HK,HV>
HashOperations提供一系列方法操作hash:
初始数据: //template.opsForHash().put("redisHash","name","tom"); //template.opsForHash().put("redisHash","age",26); //template.opsForHash().put("redisHash","class","6"); //Map<String,Object> testMap = new HashMap(); //testMap.put("name","jack"); //testMap.put("age",27); //testMap.put("class","1"); //template.opsForHash().putAll("redisHash1",testMap);
- Long delete(H key, Object... hashKeys);
删除给定的哈希hashKeys
使用:System.out.println(template.opsForHash().delete("redisHash","name")); System.out.println(template.opsForHash().entries("redisHash")); 结果:1 {class=6, age=28.1}
- Boolean hasKey(H key, Object hashKey);
确定哈希hashKey是否存在
使用:System.out.println(template.opsForHash().hasKey("redisHash","age")); System.out.println(template.opsForHash().hasKey("redisHash","ttt")); 结果:true false
- HV get(H key, Object hashKey);
从键中的哈希获取给定hashKey的值
使用:System.out.println(template.opsForHash().get("redisHash","age"));
结果:26
- List<HV> multiGet(H key, Collection<HK> hashKeys);
从哈希中获取给定hashKey的值
使用:List<Object> kes = new ArrayList<Object>(); kes.add("name"); kes.add("age"); System.out.println(template.opsForHash().multiGet("redisHash",kes)); 结果:[jack, 28.1]
- Long increment(H key, HK hashKey, long delta);
通过给定的delta增加散列hashKey的值(整型)
使用:System.out.println(template.opsForHash().get("redisHash","age")); System.out.println(template.opsForHash().increment("redisHash","age",1)); 结果:26 27
- Double increment(H key, HK hashKey, double delta);
通过给定的delta增加散列hashKey的值(浮点数)
使用:System.out.println(template.opsForHash().get("redisHash","age")); System.out.println(template.opsForHash().increment("redisHash","age",1.1)); 结果:27 28.1
- Set<HK> keys(H key);
获取key所对应的散列表的key
使用:System.out.println(template.opsForHash().keys("redisHash1")); //redisHash1所对应的散列表为{class=1, name=jack, age=27} 结果:[name, class, age]
- Long size(H key);
获取key所对应的散列表的大小个数
使用:System.out.println(template.opsForHash().size("redisHash1")); //redisHash1所对应的散列表为{class=1, name=jack, age=27} 结果:3
- void putAll(H key, Map<? extends HK, ? extends HV> m);
使用m中提供的多个散列字段设置到key对应的散列表中
使用:Map<String,Object> testMap = new HashMap(); testMap.put("name","jack"); testMap.put("age",27); testMap.put("class","1"); template.opsForHash().putAll("redisHash1",testMap); System.out.println(template.opsForHash().entries("redisHash1")); 结果:{class=1, name=jack, age=27}
- void put(H key, HK hashKey, HV value);
设置散列hashKey的值
使用:template.opsForHash().put("redisHash","name","tom"); template.opsForHash().put("redisHash","age",26); template.opsForHash().put("redisHash","class","6"); System.out.println(template.opsForHash().entries("redisHash")); 结果:{age=26, class=6, name=tom}
- Boolean putIfAbsent(H key, HK hashKey, HV value);
仅当hashKey不存在时才设置散列hashKey的值。
使用:System.out.println(template.opsForHash().putIfAbsent("redisHash","age",30)); System.out.println(template.opsForHash().putIfAbsent("redisHash","kkk","kkk")); 结果:false true
- List<HV> values(H key);
获取整个哈希存储的值根据密钥
使用:System.out.println(template.opsForHash().values("redisHash"));
结果:[tom, 26, 6]
- Map<HK, HV> entries(H key);
获取整个哈希存储根据密钥
使用:System.out.println(template.opsForHash().entries("redisHash")); 结果:{age=26, class=6, name=tom}
- Cursor<Map.Entry<HK, HV>> scan(H key, ScanOptions options);
使用Cursor在key的hash中迭代,相当于迭代器。
使用:Cursor<Map.Entry<Object, Object>> curosr = template.opsForHash().scan("redisHash", ScanOptions.ScanOptions.NONE); while(curosr.hasNext()){ Map.Entry<Object, Object> entry = curosr.next(); System.out.println(entry.getKey()+":"+entry.getValue()); } 结果:age:28.1 class:6 kkk:kkk
作者:DreamerRzc
链接:https://www.jianshu.com/p/7bf5dc61ca06
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。