当前位置: 首页 > article >正文

Redis使用increment方法返回null的原因以及解决方案

public static void main(String[] args) {
        redisTemplate.setEnableTransactionSupport(true);  //开启事务支持
        redisTemplate.multi();  //标记事务块的开始
        redisTemplate.opsForValue().set("name","zs");
        redisTemplate.opsForValue().set("pass","123");
        redisTemplate.exec();   //由exec命令原子性的执行
    }

开启了redis的事务支持,使用spring的事务注解@Transactional在执行increment 方法时会返回 null。

有以下两种解决方案:

  1. 每次redis的事务操作完毕之后,关闭redis事务支持,再执行@Transactional中的redis命令(多线程的情况下会有弊端);
  2. 创建两个redisTemplate,一个专门执行redis事务,一个用来执行普通redis命令;
@Configuration
public class RedisConfig {

    private RedisConnectionFactory redisConnectionFactory;

    public RedisConfig(RedisConnectionFactory redisConnectionFactory){
        this.redisConnectionFactory = redisConnectionFactory;
    }

    @Bean("redisTemplate")      //无事务的bean
    public StringRedisTemplate redisTemplate(){
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
        return stringRedisTemplate;
    }

    @Bean("redisTemplateTransaction")   //有事务的bean
    public StringRedisTemplate redisTemplateTransaction(){
        StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
        stringRedisTemplate.setEnableTransactionSupport(true);
        stringRedisTemplate.setConnectionFactory(redisConnectionFactory);
        return stringRedisTemplate;
    }
}

转载文章:Redis使用increment方法返回null的原因以及解决方案


http://www.kler.cn/a/147293.html

相关文章:

  • vuex和pinia的区别
  • 问:说说SpringDAO及ORM的用法?
  • 论文《基于现实迷宫地形的电脑鼠设计》深度分析——智能车驱动算法
  • 渑池县中药材产业党委莅临河南广宇企业管理集团有限公司参观交流
  • SAFETY LAYERS IN ALIGNED LARGE LANGUAGEMODELS: THE KEY TO LLM SECURITY
  • 27-压力测试
  • Django整合回顾
  • Redis面试内容,Redis过期策略,Redis持久化方式,缓存穿透、缓存击穿和缓存雪崩,以及解决办法
  • 网络运维与网络安全 学习笔记2023.11.27
  • 【C++ Primer Plus学习记录】for循环与while循环
  • 基于阻塞队列的生产者消费者模型
  • C语言:选择法对十个整数排序
  • 爬取极简壁纸
  • css实现鼠标移入背景图片变灰并浮现文字的效果
  • linux 命令 sudo、su 命令
  • 小H喜欢睡觉(C语言实现)
  • 多传感器融合SLAM调研
  • 前端项目部署自动检测更新后通知用户刷新页面(前端实现,技术框架vue、js、webpack)——方案一:编译项目时动态生成一个记录版本号的文件
  • C#——多线程之异步调用容易出现的问题
  • Go语言初始化已有环境,跟踪已有依赖环境
  • Android设计模式--桥接模式
  • 数据可视化:在Jupyter中使用Matplotlib绘制常用图表
  • Echarts大屏可视化_02 球体模块制作
  • kafka的详细安装部署
  • Vue路由跳转页面刷新
  • 87基于matlab的双卡尔曼滤波算法