RedisTemplate opsForHash 方法

6,128 阅读2分钟

RedisTemplate opsForHash 方法

常用方法

1.添加:putAll()和put()和putIfAbsent()

void putAll(H key, Map<? extends HK,? extends HV> m);

以map集合的形式添加键值对

      String redisHash = "redisHash";
      Map<String,Object> map = new HashMap<>(2);
      map.put("name","凯恩");
      map.put("age",21);
      redisTemplate.opsForHash().putAll(redisHash,map);

void put(H var1, HK var2, HV var3);

单次通过key-value添加键值对

      List<String> list = new ArrayList<>();
      list.add("1");
      list.add("2");
      list.add("3");
      redisTemplate.opsForHash().put(redisHash,"courseList",list);

判断key值是否存在,存在则不操作返回false,不存在则添加

      Boolean birthday = redisTemplate.opsForHash().putIfAbsent(redisHash, "birthday", new Date());//true
       
      Boolean name= redisTemplate.opsForHash().putIfAbsent(redisHash, "name", "哈里");//false

企业微信截图_16185540233785.png

2.取值:entries()和get()和multiGet()

Map<HK, HV> entries(H var1);

通过key获取键值对

      String redisHash = "redisHash";
      Map<String,Object> map = redisTemplate.opsForHash().entries(redisHash);
      //{name=凯恩, birthday=Fri Apr 16 12:11:23 CST 2021, age=21, courseList=[1, 2, 3]}

Map<HK, HV> entries(H var1);

获取指定变量中的值

      List<String> list = (List<String>) redisTemplate.opsForHash().get(redisHash, "List");
      //[1, 2, 3]

以集合的方式获取指定变量中的值

      String redisHash = "redisHash";
      List<String> list = new ArrayList<>();
      list.add("name");
      list.add("courseList");
      List<Object> valueList = redisTemplate.opsForHash().multiGet(redisHash, list);
      //[凯恩, [1, 2, 3]]

3.获取:keys()和values()和hasKey()

Set keys(H var1);

获取变量中的key

      String redisHash = "redisHash";
      Set<String> keys = redisTemplate.opsForHash().keys(redisHash);
        //[name, age, courseList, birthday]

List values(H var1);

获取变量中的value

       List<Object> list = redisTemplate.opsForHash().values(redisHash);
        //[凯恩, 21, [1, 2, 3], Fri Apr 16 14:23:23 CST 2021]

List values(H var1);

判断变量中是否有指定的key

       Boolean name = redisTemplate.opsForHash().hasKey(redisHash, "name");//true
       Boolean name1 = redisTemplate.opsForHash().hasKey(redisHash, "name1");//false

4.长度:size()和lengthOfValue()

Long size(H var1);

获取变量的长度

      String redisHash = "redisHash";
      Long size = redisTemplate.opsForHash().size(redisHash); //4

Long lengthOfValue(H var1, HK var2);

变量中对应的value的字节长度,key值存在结果为0

      Long nameLength = redisTemplate.opsForHash().lengthOfValue(redisHash,"name"); //8
      Long nameLength2 = redisTemplate.opsForHash().lengthOfValue(redisHash,"name1"); //0

4.值自增长:increment()

Long increment(H var1, HK var2, long var3);

使变量中的键以long值的大小进行自增长

      String redisHash = "redisHash";
      Long age = redisTemplate.opsForHash().increment(redisHash, "age", 20);//41

Double increment(H var1, HK var2, double var3);

使变量中的键以double值的大小进行自增长

      Double age = redisTemplate.opsForHash().increment(redisHash, "age", 20.1);//61.1

5.匹配获取键值对:scan()

Cursor<Entry<HK, HV>> scan(H var1, ScanOptions var2);

匹配获取键值对,ScanOptions.NONE为获取全部键对

        String redisHash = "redisHash";
        //匹配key包含a的变量
        Cursor<Map.Entry<String, Object>> cursor = redisTemplate.opsForHash().scan(redisHash,   
        ScanOptions.scanOptions().match("*a*").build());
        while (cursor.hasNext()){
            Map.Entry<String, Object> map = cursor.next();
            System.out.println(map.getKey()+":"+map.getValue());

        }
       //name:凯恩
       //age:21
       //birthday:Fri Apr 16 14:23:23 CST 2021
      
       Cursor<Map.Entry<String, Object>> cursor = redisTemplate.opsForHash().scan(redisHash, 
       ScanOptions.NONE);
       while (cursor.hasNext()){
           Map.Entry<String, Object> map = cursor.next();
           System.out.println(map.getKey()+":"+map.getValue());
       }
        //name:凯恩
        //age:21
        //courseList:[1, 2, 3]
        //birthday:Fri Apr 16 14:23:23 CST 2021

6.删除:delete()

Long delete(H var1, Object... var2);

删除变量中的键值对,可以传入多个参数,删除多个键值对,返回删除数量

       String redisHash = "redisHash";
       Long number = redisTemplate.opsForHash().delete(redisHash, "name","age");//2