Spring 教程

Spring 笔记

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/spring_framework-redis-template-setexnx.html

spring-data-redis 如何使用 RedisTemplate 进行 set EX NX(不存在时赋值 value 并设置过期时间)的原子操作

Spring 笔记 Spring 笔记


在使用 spring-data-redis 库提供的 redis client 对象 RedisTemplate 进行 set EX NX 的原子操作时,低版本的库发现只有 Boolean setIfAbsent(K key, V value) 方法,没有同时设置过期时间的方法。

如使用 spring boot 低版本时,无法实现,需要对应的 spring-data-redis 包升级到 2.1.x 版本以上,提供了 Boolean setIfAbsent(K key, V value, long timeout, TimeUnit unit)。 

解决方法

如果使用 spring boot 框架,建议升级到对应 spring-data-redis 2.1.x 以上的版本,如果项目还使用 spring cloud,可查看 spring-cloud-dependencies 关于 spring boot 和 spring cloud 版本对应详细说明及作用

如果只是使用 spring framework(框架),只需要单独将 spring-data-redis 升级到 2.1.x 以上版本即可:

maven 中央仓库坐标列表 https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis

@Autowired
private RedisTemplate<String, Object> redisTemplate;

public boolean setNXEX(String key) {

    try {
        Boolean result = redisTemplate.opsForValue().setIfAbsent(key, 1, 60, TimeUnit.SECONDS);
        if (result != null) {
            return result.booleanValue();
        }
    } catch (Throwable e) {
        log.error("setNXEX error", e);
    }

    return false;
}

 

Redis CLUSTER SET-CONFIG-EPOCH 命令为一个全新的节点设置指定的 config epoch 配置,并且仅在 2 ...
本章主要介绍 Google 发表在 KDD 2018 上的经典的多任务学习模型 MMoE(Multi-gate Mixture-of-Exp ...
spring-cloud-dependencies 是一个依赖管理器的 pom 文件,它是对 spring cloud 进行依赖管理。若项目 ...
在 java 中使用 Map 时,针对 key 进行数值的累计运算,需要指定键不存在时,设置初始值,特定 key 存在时,对已有键值进行累加 ...
Redis CLUSTER COUNT-FAILURE-REPORTS 命令返回指定节点的故障报告个数,故障报告是 Redis Cluste ...