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

SpringBoot项目使用Redis作为数据缓存

一、基础配置步骤

1. 添加依赖

pom.xml中引入Redis和Cache依赖:

<!-- Redis Starter -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency><!-- Spring Cache Abstraction -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId>
</dependency>
2. 配置Redis连接,YAML格式配置文件中配置如下:
spring:redis:host: 127.0.0.1      # Redis服务器IP地址(默认本地)port: 6379           # Redis服务端口(默认6379)password:            # 访问密码(没有密码则留空)database: 0          # 使用的Redis数据库索引(0-15)jedis:               # Jedis连接池配置pool:max-active: 8    # 连接池最大活跃连接数(默认8)max-wait: -1ms   # 获取连接最大等待时间(-1表示无限等待)max-idle: 8      # 连接池最大空闲连接数(建议与max-active相同)min-idle: 0      # 连接池最小空闲连接数(默认0)

关键参数说明:

  1. max-active 和 max-idle 建议设为相同值,避免频繁创建/销毁连接
  2. max-wait: -1ms 表示如果没有可用连接会一直阻塞等待
  3. database 可指定0-15之间的值,不同业务建议使用不同库隔离数据

‌3.配置RedisTemplate(可选)
如果需要自定义序列化方式,可以创建配置类: 

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {RedisTemplate<String, Object> template = new RedisTemplate<>();template.setConnectionFactory(factory);template.setKeySerializer(RedisSerializer.string());template.setValueSerializer(new GenericJackson2JsonRedisSerializer());return template;}
}
4. 启用缓存功能

在启动类上添加@EnableCaching注解:

@SpringBootApplication
@EnableCaching  // 关键注解:启用缓存
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}

直接使用RedisTemplate

注入RedisTemplate进行操作:

@Autowired
private RedisTemplate<String, Object> redisTemplate;public void setValue(String key, Object value) {redisTemplate.opsForValue().set(key, value);
}public Object getValue(String key) {return redisTemplate.opsForValue().get(key);
}

二、使用缓存注解

常用注解示例:
@Service
public class ProductService {// 缓存结果,若缓存存在则直接返回@Cacheable(value = "products", key = "#id")public Product getProductById(Long id) {// 模拟数据库查询return productRepository.findById(id).orElse(null);}// 更新缓存@CachePut(value = "products", key = "#product.id")public Product updateProduct(Product product) {return productRepository.save(product);}// 删除缓存@CacheEvict(value = "products", key = "#id")public void deleteProduct(Long id) {productRepository.deleteById(id);}
}

 

注解说明:
注解作用
@Cacheable方法结果缓存,若缓存命中则直接返回结果,不执行方法体
@CachePut强制更新缓存(始终执行方法体,并将结果存入缓存)
@CacheEvict删除指定缓存
@Caching组合多个缓存操作

三、高级配置(可选)

通过RedisCacheManager配置:

@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory factory) {RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(30));  // 设置全局默认过期时间30分钟return RedisCacheManager.builder(factory).cacheDefaults(config).build();
}

 

四、常见问题解决

  1. 缓存不生效‌:
    • 检查是否漏加@EnableCaching
    • 确认方法调用来自外部类(同类内调用因代理问题不生效)
  2. 序列化错误‌:
    • 默认使用JDK序列化,建议配置JSON序列化
http://www.xdnf.cn/news/967213.html

相关文章:

  • 业务:资产管理功能
  • 亚远景-ASPICE评估标准解析:汽车软件开发的过程能力模型
  • 【Java多线程从青铜到王者】懒汉模式的优化(九)
  • WebLogic简介
  • 第6章 方法 笔记
  • DevSecOps实践:CI/CD流水线集成SAST工具的完整指南
  • 【LeetCode】二叉树相关算法题
  • 笔记 软件工程复习
  • Vue.js教学第二十二章:vue实战项目商城项目
  • el-upload组件,上传文件失败,:on-error方法失效
  • 人工智能与大数据融合发展:新一代智能系统的演进路径
  • 计算机行业光辉开始暗淡
  • Unity3D中Gfx.WaitForPresent优化方案
  • 性能监控的核心要点
  • RestClient
  • AI书签管理工具开发全记录(二十):打包(完结篇)
  • 零基础学前端-传统前端开发(第一期-开发软件介绍与本系列目标)(VScode安装教程)
  • 群晖Nas - Docker(ContainerManager)上安装GitLab
  • Linux内核 -- INIT_WORK 使用与注意事项
  • Windows 文件路径与文件名限制
  • 如何根据excel表生成sql的insert脚本
  • ABP vNext + Hive 集成:多租户大数据 SQL 查询与报表分析
  • 【iOS】cell的复用以及自定义cell
  • 使用NNI剪枝工具对VGG16网络进行剪枝,同时使用知识蒸馏对剪枝后结果进行优化。(以猫狗二分类为例)
  • 认证与授权的区别与联系
  • 看板任务描述不清如何解决
  • 数据库学习笔记(十五)--变量与定义条件与处理程序
  • 云蝠智能大模型语音智能体:构建心理咨询领域的智能助手
  • leetcode1034. 边界着色-medium
  • 使用mpu6500, PID,互补滤波实现一个简单的飞行自稳控制系统