redis Template.opsForValue()中方法实例详解

 更新时间:2023年05月24日 10:07:29   作者:FighterLiu  
这篇文章主要介绍了redis Template.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集合到redis;multiSetIfAbsent:如果对应的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集合中的key,valeu设置的都不一样

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);
        }

打印结果如下,我们可以看到新增了3个key:

备注说明: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的位置(从左向右数)变为value;getBit:判断指定的位置ASCII码的bit位是否为true或者false

使用方法:

redisTemplate.opsForValue().set("stringkey", "value");
        redisTemplate.opsForValue().setBit("stringkey", 1, true);
        boolean flag= redisTemplate.opsForValue().getBit("stringkey", 1);

到此这篇关于redis Template.opsForValue()中方法讲解的文章就介绍到这了,更多相关redis Template.opsForValue()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis和springboot 整合redisUtil类的示例代码

    Redis和springboot 整合redisUtil类的示例代码

    这篇文章主要介绍了Redis和springboot 整合redisUtil类的示例代码,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • Redis数据结构SortedSet的底层原理解析

    Redis数据结构SortedSet的底层原理解析

    这篇文章主要介绍了Redis数据结构SortedSet的底层原理解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Redis中键的过期删除策略深入讲解

    Redis中键的过期删除策略深入讲解

    这篇文章主要给大家介绍了关于Redis中键的过期删除策略的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • redis分布式锁解决缓存双写一致性

    redis分布式锁解决缓存双写一致性

    这篇文章主要为大家介绍了redis分布式锁解决缓存双写一致性示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 在Redis数据库中实现分布式速率限制的方法

    在Redis数据库中实现分布式速率限制的方法

    这篇文章主要介绍了在Redis数据库中实现分布式速率限制的方法,文中展示了一个用Python编写的应用示例,需要的朋友可以参考下
    2015-06-06
  • Redis Cluster集群收缩主从节点详细教程

    Redis Cluster集群收缩主从节点详细教程

    集群收缩的源端就是要下线的主节点,目标端就是在线的主节点,这篇文章主要介绍了Redis Cluster集群收缩主从节点详细教程,需要的朋友可以参考下
    2021-11-11
  • Redis分布式可重入锁实现方案

    Redis分布式可重入锁实现方案

    在单进程环境下,要保证一个代码块的同步执行,直接用synchronized 关键字或ReetrantLock 即可,在分布式环境下,要保证多个节点的线程对代码块的同步访问,就必须要用到分布式锁方案,本文介绍一下基于 Redis实现的分布式锁方案,感兴趣的朋友一起看看吧
    2024-02-02
  • Redis的字符串是如何实现的

    Redis的字符串是如何实现的

    本文主要介绍了Redis的字符串是如何实现的,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • Redis实现排行榜及相同积分按时间排序功能的实现

    Redis实现排行榜及相同积分按时间排序功能的实现

    这篇文章主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Redis优化经验总结(必看篇)

    Redis优化经验总结(必看篇)

    下面小编就为大家带来一篇Redis优化经验总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03

最新评论