返回顶部

redisTemplate.opsForValue()中方法讲解

查看源码可以看到redisTemplate.opsForValue()中的方法都定义在ValueOperations<K, V> 中,该接口中一共有17个方法:

复制代码
    public interface ValueOperations<K, V> {
        void set(K key, V value);
        void set(K key, V value, long timeout, TimeUnit unit);
        Boolean setIfAbsent(K key, V value);
        void multiSet(Map<? extends K, ? extends V> map);
        Boolean multiSetIfAbsent(Map<? extends K, ? extends V> map);
        V get(Object key);
        V getAndSet(K key, V value);
        List<V> multiGet(Collection<K> keys);
        Long increment(K key, long delta);
        Double increment(K key, double delta);
        Integer append(K key, String value);
        String get(K key, long start, long end);
        void set(K key, V value, long offset);
        Long size(K key);
        Boolean setBit(K key, long offset, boolean value);
        Boolean getBit(K key, long offset);
        RedisOperations<K, V> getOperations();
    }
复制代码

 


下面我们一个一个来讲解

void set(K key, V value)
方法含义:新增一个字符串类型的值,key是键,value是值
使用方法:

redisTemplate.opsForValue().set("stringkey", "stringvalue");

 

void set(K key, V value, long timeout, TimeUnit unit)

复制代码
方法含义:新增一个字符串类型的值,并且设置变量值的过期时间。key是键,value是值,timeout 过期时间,unit 过期时间单位。
    unit 过期时间单位取值如下:
    DAYS:天时间单元代表24小时
    HOURS:小时时间单元代表60分钟
    MICROSECONDS:微秒时间单元代表千分之一毫秒
    MILLISECONDS:毫秒时间单元代表千分之一秒
    MINUTES:分钟时间单元代表60
    NANOSECONDS:纳秒时间单元代表千分之一微秒
    SECONDS:时间单元代表1

    使用方法,把timeoutkey对应的值设置过期时间为10秒:
  redisTemplate.opsForValue().set("timeoutkey", "timeoutvalue", 10, TimeUnit.SECONDS);
复制代码

 



Boolean setIfAbsent(K key, V value)
  方法含义:如果键不存在则新增,存在则不改变已经有的值。
  使用方法:
    redisTemplate.opsForValue().setIfAbsent("newkey", "newvalue");

 



V get(Object key)
方法含义:获取key键对应的值

    使用方法:
    redisTemplate.opsForValue().get("stringkey");

 



  String get(K key, long start, long end)
方法含义:截取key键对应值的字符串,从开始下标位置开始到结束下标的位置(包含结束下标)的字符串。下标从1开始,如果stringkey对应的值为value,那么下面这个方法返回为:al
使用方法:
    redisTemplate.opsForValue().get("stringkey", 2, 3);

 



 V getAndSet(K key, V value)
 方法含义:获取原来key键对应的值并重新赋新值
 使用方法:
    redisTemplate.opsForValue().getAndSet("stringkey", "newvalue");

 



 void set(K key, V value, long offset)

   
方法含义:覆盖从指定位置开始的值
使用方法:
    redisTemplate.opsForValue().set("stringkey", "a", 1); 

 



如下三个方法放在一起讲:


void multiSet(Map<? extends K, ? extends V> map)

Boolean multiSetIfAbsent(Map<? extends K, ? extends V> map)

List<V> multiGet(Collection<K> keys)

复制代码
方法含义: multiSet:设置map集合到redismultiSetIfAbsent:如果对应的map集合名称不存在,则添加,如果存在则不做修改;multiGet:根据集合取出对应的value值。

    先使用multiSet设置相应的值,如下:
                Map map = new HashMap();
                map.put("key1", "value1");
                map.put("key2", "value2");
                map.put("key3", "value3");
                redisTemplate.opsForValue().multiSet(map);

    在使用multiGet获得相应的值
复制代码
          List list = new ArrayList();
                list.add("key1");
                list.add("key2");
                list.add("key3");
                List<String> valueList = redisTemplate.opsForValue().multiGet(list);
                for (String value2 : valueList) {
                    System.out.println("通过multiGet(Collection<K> keys)方法获取map值:" + value2);
                }
复制代码

 



    打印结果如下:
  
     使用multiSetIfAbsent 设置相应的值,map集合中的key与之前一样,valeu设置的不一样
复制代码
          Map map1 = new HashMap();
                map1.put("key1", "value11");
                map1.put("key2", "value22");
                map1.put("key3", "value33");
                List list1 = new ArrayList();
                list1.add("key1");
                list1.add("key2");
                list1.add("key3");
                redisTemplate.opsForValue().multiSetIfAbsent(map1);
                List<String> valueList1 = redisTemplate.opsForValue().multiGet(list1);
                for (String value1 : valueList1) {
                    System.out.println("通过multiGet(Collection<K> keys)方法获取map值:" + value1);
                }
复制代码
   
  打印结果如下,我们可以看到没有做任何修改   
    使用multiSetIfAbsent 设置相应的值,map集合中的keyvaleu设置的都不一样
复制代码
          Map map1 = new HashMap();
                map1.put("key11", "value11");
                map1.put("key21", "value22");
                map1.put("key31", "value33");
                List list1 = new ArrayList();
                list1.add("key11");
                list1.add("key21");
                list1.add("key31");
                redisTemplate.opsForValue().multiSetIfAbsent(map1);
                List<String> valueList1 = redisTemplate.opsForValue().multiGet(list1);
                for (String value1 : valueList1) {
                    System.out.println("通过multiGet(Collection<K> keys)方法获取map值:" + value1);
                }
复制代码
     打印结果如下,我们可以看到新增了3key
    

    备注说明:multiSetIfAbsent 只要map中有一个key存在,则都不做修改。


复制代码

 

 



  Long increment(K key, long delta)
  Double increment(K key, double delta)

复制代码
方法含义:以增量的方式将值存储在变量中,第二个参数为递增因子
使用方法:
               
          redisTemplate.opsForValue().set("doublevalue", 1);
                redisTemplate.opsForValue().increment("doublevalue", 1.2);//以1.2递增,递增后为2.2
                redisTemplate.opsForValue().increment("doublevalue", 1);//以1递增,递增后为3.2

 


复制代码

 

 

 


Integer append(K key, String value)

复制代码
 方法含义:在原有的值基础上新增字符串到末尾
 使用方法:
         redisTemplate.opsForValue().set("stringkey", "value");
            redisTemplate.opsForValue().append("stringkey", "appendValue");

 备注说明:如果append方法不起效果需要进行配置将 template.setValueSerializer(jackson2JsonRedisSerializer);修改为:template.setValueSerializer(new StringRedisSerializer());这个是因为序列化的原因,RedisTemplateput进去的值是序列化成二进制后的,但是append的值是直接加的。所以get的时候反序列化直接变成空值了。如果你存的值是字符串类型,建议直接使用StringRedisTemplate,这个不会序列化成二进制,append是可以用的。而且直接在redis客户端存的值也能取到
复制代码

 

 



   Long size(K key)

 方法含义: 获取指定字符串的长度
 使用方法:
          Long size = redisTemplate.opsForValue().size("stringkey");

 


 

 



 Boolean setBit(K key, long offset, boolean value)
 Boolean getBit(K key, long offset)

   

复制代码
 方法含义:setBit key键对应的值value对应的ascii码,在offset的位置(从左向右数)变为valuegetBit:判断指定的位置ASCII码的bit位是否为true或者false
 使用方法
              redisTemplate.opsForValue().set("stringkey", "value");
              redisTemplate.opsForValue().setBit("stringkey", 1, true);
boolean flag= redisTemplate.opsForValue().getBit("stringkey", 1);

 


复制代码

 

posted @   Gengzh  阅读(306)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
Live2D
欢迎阅读『redisTemplate.opsForValue()中方法讲解』
点击右上角即可分享
微信分享提示