在SpringBoot项目中应用RedisCache功能

2024-05-29 20:28

本文主要是介绍在SpringBoot项目中应用RedisCache功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.application.yaml中添加cache配置

spring:cache:type: redisredis:time-to-live: 72000000key-prefix: 'redis:cache:'use-key-prefix: truecache-null-values: true

2.封装RedisCache配置类

@EnableConfigurationProperties(CacheProperties.class)
@Configuration
@EnableCaching
public class RedisCacheConfig {@Beanpublic RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties) {RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();// config = config.entryTtl();config = config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));config = config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));CacheProperties.Redis redisProperties = cacheProperties.getRedis();//将配置文件中所有的配置都生效if (redisProperties.getTimeToLive() != null) {config = config.entryTtl(redisProperties.getTimeToLive());}if (redisProperties.getKeyPrefix() != null) {config = config.computePrefixWith(cacheName -> redisProperties.getKeyPrefix() + cacheName);}if (!redisProperties.isCacheNullValues()) {config = config.disableCachingNullValues();}if (!redisProperties.isUseKeyPrefix()) {config = config.disableKeyPrefix();}return config;}
}

3.封装RedisCache缓存Key生成器

/*** @ClassName redisCacheKeyGenerator* @description: Redis缓存key 生成策略*/
@Slf4j
@Component("redisCacheKeyGenerator")
public class RedisCacheKeyGenerator implements KeyGenerator {private final static int NO_PARAM_KEY = 0;public static final char SP = ':';@Autowired(required = false)private CacheManager cacheManager;@PostConstructpublic void init() {log.info("cacheManager:{}",cacheManager);}@Overridepublic Object generate(Object target, Method method, Object... parameters) {StringBuilder strBuilder = new StringBuilder(30);// 类名strBuilder.append(SP);// 方法名strBuilder.append(method.getName());strBuilder.append(SP);if (parameters.length > 0) {// 参数值for (Object object : parameters) {if (isSimpleValueType(object.getClass())) {strBuilder.append(object);} else {strBuilder.append(JSONUtil.toJsonStr(object).hashCode());}}} else {strBuilder.append(NO_PARAM_KEY);}log.info("生成缓存序列:{}",strBuilder);return strBuilder.toString();}/*** 判断是否是简单值类型.包括:基础数据类型、CharSequence、Number、Date、URL、URI、Locale、Class;** @param clazz* @return*/public static boolean isSimpleValueType(Class<?> clazz) {return (ClassUtils.isPrimitiveOrWrapper(clazz) || clazz.isEnum() || CharSequence.class.isAssignableFrom(clazz)|| Number.class.isAssignableFrom(clazz) || Date.class.isAssignableFrom(clazz) || URI.class == clazz|| URL.class == clazz || Locale.class == clazz || Class.class == clazz);}}

4.Service类中应用RedisCache

@Service
@CacheConfig(cacheNames = "productAlbum",keyGenerator = "redisCacheKeyGenerator")
public class ProductAlbumServiceImpl extends ServiceImpl<ProductAlbumMapper, ProductAlbum> implements IProductAlbumService {@Override@Transactional(rollbackFor = Exception.class)@Caching(evict = {@CacheEvict(key = "':getAlbumPics_'+#productSn"),@CacheEvict(key = "':getAlbumPicsBySn_'+#productSn")})public void saveAlbumPics(String productSn, String pic) {// 业务代码}@Override@Caching(evict = {@CacheEvict(key = "':getAlbumPics_'+#productSn"),@CacheEvict(key = "':getAlbumPicsBySn_'+#productSn")})public void doAlbumPics(String productSn,List<ProductAlbumResp> albumList) {// 业务代码}@Override@Cacheable(key = "':getAlbumPics_'+#productSn")public String getAlbumPics(String productSn) {// 业务代码}@Override@Cacheable(key = "':getAlbumPicsBySn_'+#productSn")public List<ProductAlbumResp> getAlbumPicsBySn(String productSn) {// 业务代码}@Override@Caching(evict = {@CacheEvict(key = "':getAlbumPics_'+#productSn"),@CacheEvict(key = "':getAlbumPicsBySn_'+#productSn")})public void saveAlbumPicsByNotExist(String productSn, String pic) {// 业务代码}
}

这篇关于在SpringBoot项目中应用RedisCache功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014555

相关文章

分布式锁在Spring Boot应用中的实现过程

《分布式锁在SpringBoot应用中的实现过程》文章介绍在SpringBoot中通过自定义Lock注解、LockAspect切面和RedisLockUtils工具类实现分布式锁,确保多实例并发操作... 目录Lock注解LockASPect切面RedisLockUtils工具类总结在现代微服务架构中,分布

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

破茧 JDBC:MyBatis 在 Spring Boot 中的轻量实践指南

《破茧JDBC:MyBatis在SpringBoot中的轻量实践指南》MyBatis是持久层框架,简化JDBC开发,通过接口+XML/注解实现数据访问,动态代理生成实现类,支持增删改查及参数... 目录一、什么是 MyBATis二、 MyBatis 入门2.1、创建项目2.2、配置数据库连接字符串2.3、入

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

深度解析Spring Security 中的 SecurityFilterChain核心功能

《深度解析SpringSecurity中的SecurityFilterChain核心功能》SecurityFilterChain通过组件化配置、类型安全路径匹配、多链协同三大特性,重构了Spri... 目录Spring Security 中的SecurityFilterChain深度解析一、Security

SpringBoot多环境配置数据读取方式

《SpringBoot多环境配置数据读取方式》SpringBoot通过环境隔离机制,支持properties/yaml/yml多格式配置,结合@Value、Environment和@Configura... 目录一、多环境配置的核心思路二、3种配置文件格式详解2.1 properties格式(传统格式)1.

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.