• 如何使用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
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 相关阅读:
    【20170923】2017暑假北京学习 day 3
    Leetcode 39
    事无巨细 | 访问一个网站的过程
    Leetcode 77
    排序 | 快速排序
    排序 | 堆排序
    Leetcode 60
    Leetcode 51
    海量数据处理的解法
    Leetcode 99
  • 原文地址:https://www.cnblogs.com/chenziyu/p/9225177.html
Copyright © 2020-2023  润新知