Springboot自定义缓存配置 CacheManager集成redis

引入依赖

java 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
     <groupId>redis.clients</groupId>
     <artifactId>jedis</artifactId>
     <version>3.3.0</version>
</dependency>

application.properties中

java 复制代码
redis.host=192.168.1.252
redis.port=6379
redis.database=1
redis.password=1234
redis.alive=600s

redis配置类

java 复制代码
@Data
@Component
@ConfigurationProperties(prefix = "redis")
public class RedisProperties {
	private String host;

	private String port;

	private String database;

	private String password;

	private String alive;
}

CacheManager与Redis整合配置类

java 复制代码
@EnableConfigurationProperties(RedisProperties.class)
@Configuration
@EnableCaching
public class RedisConfig {
	
    @Autowired
	RedisProperties redisProperties;

	 /**
     * jedis连接工厂
     * @return
     */
    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setDatabase(redisProperties.getDatabase());
        redisStandaloneConfiguration.setPort(redisProperties.getPort());
        redisStandaloneConfiguration.setHostName(redisProperties.getHost());
        redisStandaloneConfiguration.setPassword(RedisPassword.of(redisProperties.getPassword()));
        JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration);
        return factory;
    }
    
    @Bean
    public RedisCacheManager redisCacheManager(RedisConnectionFactory jedisConnectionFactory) {
 
        GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
        // 设置过期时间和序列化类型
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig().entryTtl(cacheProperties.getAlive()).computePrefixWith(cacheName -> "demoService".concat(":").concat(cacheName).concat(":")).serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(stringRedisSerializer)).serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(genericJackson2JsonRedisSerializer));
 
        return RedisCacheManager.builder(jedisConnectionFactory)
                .cacheDefaults(config).build();

}

Springboot 集成redis后使用缓存

Service 层

java 复制代码
@Service
public class StuService {
    //@Cacheable: 标记方法的结果可以被缓存,下次调用时直接从缓存中获取结果,如果缓存中不存在,则执行方法并将结果放入缓存
	@Cacheable(value = "stus", key = "#id")
	public Student getStuById(Long id) {
	    // 从数据库中获取用户信息
	    return stuRepository.findById(id);
	}

    //@CachePut: 标记方法的结果可以被缓存,每次调用方法都会执行方法并将结果放入缓存,适用于更新缓存数据的场景
	@CachePut(value = "stus", key = "#stu.id")
	public Student updateStu(Student stu) {
	    // 更新数据库中的用户信息
	    return stuRepository.save(stu);
	}

	//@CacheEvict:标记方法会从缓存中移除指定的数据,可以通过指定的条件来决定移除哪些缓存数据
	@CacheEvict(value = "stus", key = "#id")
	public void deleteStuById(Long id) {
	    // 从数据库中删除学生信息
	    stuRepository.deleteById(id);
	}

	//@Caching:可以同时使用多个缓存注解,用于组合多个缓存操作
	@Caching(
	    cacheable = {
	        @Cacheable(value = "stus", key = "#id")
	    },
	    evict = {
	        @CacheEvict(value = "stus", key = "#stu.id")
	    }
	)
	public Student getStuByIdAndUpdate(Long id, Student stu) {
	    // 更新数据库中的学生信息
	    return stuRepository.save(stu);
	}
}

参考博客:https://blog.csdn.net/yu619251940/article/details/130244927

https://blog.csdn.net/yiqiu1959/article/details/126151591

https://blog.csdn.net/weixin_45962741/article/details/120710578?spm=1001.2014.3001.5506

相关推荐
学无止境w1 小时前
高并发系统架构设计原则:无状态、水平扩展、异步化、缓存优先
缓存·系统架构
Javashop_jjj1 小时前
三勾软件| 用SpringBoot+Element-UI+UniApp+Redis+MySQL打造的点餐连锁系统
spring boot·ui·uni-app
PHP源码1 小时前
SpringBoot校园二手商城系统
java·spring boot·springboot二手商城·java校园二手商城系统
qqxhb1 小时前
系统架构设计师备考第45天——软件架构演化评估方法和维护
分布式·缓存·系统架构·集群·cdn·单体·已知未知评估
毕业设计制作和分享2 小时前
springboot159基于springboot框架开发的景区民宿预约系统的设计与实现
java·spring boot·后端
MC丶科3 小时前
【SpringBoot常见报错与解决方案】端口被占用?Spring Boot 修改端口号的 3 种方法,第 3 种 90% 的人不知道!
java·linux·spring boot
怪兽20143 小时前
Redis常见性能问题和解决方案
java·数据库·redis·面试
计算机学长felix4 小时前
基于SpringBoot的“中学信息技术课程教学网站”的设计与实现(源码+数据库+文档+PPT)_2025-10-17
数据库·spring boot·后端
长安城没有风4 小时前
从入门到精通【Redis】Redis 典型应⽤ --- 缓存 (cache)
数据库·redis·后端·缓存
骇客野人4 小时前
【软考备考】软件架构设计需要考虑系统性能 如何使用缓存提高系统性能知识点七
缓存