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

spring boot 集成redis 中RedisTemplate 、SessionCallback和RedisCallback使用对比详解,最后表格总结

对比详解

1. RedisTemplate
  • 功能:Spring Data Redis的核心模板类,提供对Redis的通用操作(如字符串、哈希、列表、集合等)。
  • 使用场景:常规的Redis增删改查操作。
  • 特点
    • 支持序列化配置(如StringRedisSerializerJackson2JsonRedisSerializer)。
    • 提供直接操作Redis命令的方法(如opsForValue()opsForHash())。
    • 不直接支持事务或批量操作的原子性。
2. RedisCallback
  • 功能:回调接口,用于执行单次Redis操作,需通过RedisTemplate.execute(RedisCallback)调用。
  • 使用场景:需要直接操作Jedis/Redisson客户端(如执行原生Redis命令或复杂逻辑)。
  • 特点
    • 直接访问底层Redis连接(如JedisRedisConnection)。
    • 单次操作,需手动管理资源(如事务提交)。
    • 示例:
      String result = redisTemplate.execute(new RedisCallback<String>() {
          @Override
          public String doInRedis(RedisConnection connection) {
              byte[] key = "myKey".getBytes();
              return new String(connection.get(key));
          }
      });
      
3. SessionCallback
  • 功能:回调接口,用于在单个Redis会话中执行多个操作(支持事务或多命令原子性)。
  • 使用场景:需要原子性操作(如多个命令需同时成功或失败)。
  • 特点
    • 通过RedisTemplate.execute(SessionCallback)执行。
    • 支持multi/exec模式(Redis事务)。
    • 示例:
      redisTemplate.execute(new SessionCallback<Object>() {
          @Override
          public Object execute(RedisOperations operations) {
              operations.multi();
              operations.opsForValue().set("key1", "value1");
              operations.opsForValue().set("key2", "value2");
              return operations.exec();
          }
      });
      

对比表格

特性RedisTemplateRedisCallbackSessionCallback
核心功能常规Redis操作单次底层操作多命令原子性操作
适用场景简单增删改查需直接操作Jedis/RedisConnection需事务或批量操作
是否支持事务不直接支持需手动管理内置multi/exec支持
操作粒度单个命令单个命令(通过回调扩展)多个命令组合
资源管理自动管理需手动处理(如事务提交)自动管理会话
使用方式直接调用方法(如opsFor...通过execute(RedisCallback)通过execute(SessionCallback)

总结

  • RedisTemplate:常规操作首选,无需复杂配置。
  • RedisCallback:需直接操作底层客户端或执行原生命令时使用。
  • SessionCallback:需原子性操作或多命令组合时选择,简化事务管理。
http://www.dtcms.com/a/107532.html

相关文章:

  • 系统思考与时间管理
  • 在MFC中使用Qt(五):MFC和Qt的共存和交互
  • 经典算法 最长公共子序列问题
  • GPU与CUDA对应
  • 阿里云服务器对接高防的时候可能会出现的问题
  • 鸿蒙应用元服务开发-Account Kit 常见问题说明
  • BRC认证是什么?如何获得BRC认证?对企业发展的好处
  • 解决Oracle PL/SQL中“表或视图不存在“错误的完整指南
  • 数据分析与知识发现 论文阅读【信息抽取】
  • OSD显示
  • 动态规划——区间DP
  • RedisTemplate 的 6 个可配置序列化器属性对比
  • apk签名与对齐
  • android databinding使用教程
  • modelscope环境准备--装conda、内网穿透、配置HuggingFace
  • 在线sql 转 rust 模型(Diesel、SeaORM),支持多数据 mysql, pg等
  • Java 大视界 -- Java 大数据在智能教育自适应学习平台中的用户行为分析与个性化推荐(169)
  • 合并空值运算符??
  • 爬虫【Scrapy框架的概念与执行流程】
  • c++中%符号使用的注意事项/易错点
  • limma差异分析
  • Scala面向对象
  • 多层内网渗透测试虚拟仿真实验环境(Tomcat、ladon64、frp、Weblogic、权限维持、SSH Server Wrapper后门)
  • 鸿蒙开发_TS快速入门_TS中模块化操作_模块的导入导出---纯血鸿蒙HarmonyOS5.0工作笔记008
  • MySQL主从复制(三)
  • 【Axure元件分享】时间范围选择器
  • 阿里云国际站代理商:模型训练中断数据丢失怎么办?
  • DAY 34 leetcode 349--哈希表.两个数组的交集
  • 【Linux网络与网络编程】04.TCP Socket编程
  • BUUCTF-web刷题篇(7)