2026/2/21 20:57:58
网站建设
项目流程
淘宝客做网站推广,上海响应式网站设计,自己做网站要花钱吗,网站例子大全#x1f3ac; HoRain 云小助手#xff1a;个人主页
⛺️生活的理想#xff0c;就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站#xff0c;性价比超高#xff0c;大内存超划算#xff01;忍不住分享一下给大家。点击跳转到网站。 目录
⛳️ 推荐 … HoRain 云小助手个人主页⛺️生活的理想就是为了理想的生活!⛳️ 推荐前些天发现了一个超棒的服务器购买网站性价比超高大内存超划算忍不住分享一下给大家。点击跳转到网站。目录⛳️ 推荐 核心概念Spring Cache 与 Redis⚙️ 项目配置步骤 核心注解的使用 进阶特性与注意事项 实践建议Spring Cache与Redis的整合确实能大幅提升应用性能。下面是一个简明指南帮你快速上手。 核心概念Spring Cache 与 RedisSpring Cache这是Spring框架提供的缓存抽象层它定义了一套统一的缓存操作接口。使用Spring Cache的好处在于你可以通过简单的注解来管理缓存而无需关心底层缓存的具体实现使得代码更简洁且易于维护。Redis一个高性能的内存键值数据库常被用作分布式缓存后端。当Spring Cache与Redis结合时Redis就成为了缓存数据的实际存储位置。这种组合让你能够用简单的注解来管理缓存同时享受Redis高性能和分布式特性的好处。⚙️ 项目配置步骤将Spring Cache与Redis集成到Spring Boot项目中只需几个关键步骤。添加依赖在pom.xml中引入必要的依赖主要是Spring Boot为缓存和Redis提供的Starter。dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-cache/artifactId /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency配置Redis连接在application.yml或application.properties中配置Redis服务器的基础信息。spring: redis: host: localhost port: 6379 # password: your-password # 如果Redis设置了密码需要配置此项 database: 0启用缓存并自定义序列化创建一个配置类主要完成两件事使用EnableCaching注解开启缓存功能。配置RedisCacheManager关键之一是设置序列化方式。默认的JDK序列化方式可读性差通常建议改为JSON序列化如Jackson。Configuration EnableCaching public class RedisConfig { Bean public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) { RedisCacheConfiguration config RedisCacheConfiguration.defaultCacheConfig() .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) // Key使用字符串序列化 .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())) // Value使用JSON序列化 .entryTtl(Duration.ofMinutes(30)) // 设置全局缓存过期时间 .disableCachingNullValues(); // 不缓存null值 return RedisCacheManager.builder(connectionFactory).cacheDefaults(config).build(); } } 核心注解的使用配置完成后就可以在业务层Service的方法上使用缓存注解了。以下是三个最核心的注解注解作用适用场景示例Cacheable将方法返回值存入缓存。后续调用相同参数时直接返回缓存值不执行方法体。数据查询Cacheable(value user, key #id)CacheEvict从缓存中删除数据。数据更新、删除CacheEvict(value user, key #user.id)CachePut总是执行方法体并用返回值更新缓存。数据新增、强制更新CachePut(value user, key #user.id)代码示例Service public class UserService { // 查询用户如果缓存有则直接返回没有则执行方法并缓存结果 Cacheable(value users, key #id) public User getUserById(Long id) { // 模拟从数据库查询 return userRepository.findById(id).orElse(null); } // 更新用户先更新数据库然后清除缓存失效模式 CacheEvict(value users, key #user.id) public void updateUser(User user) { userRepository.save(user); } // 新增用户执行方法并将结果放入缓存双写模式 CachePut(value users, key #user.id) public User addUser(User user) { userRepository.save(user); return user; } } 进阶特性与注意事项掌握基础使用后了解这些进阶特性和常见问题能让你的缓存方案更稳健。防止缓存击穿对于热点数据如果缓存恰好过期大量并发请求可能瞬间压垮数据库。可以在Cacheable中设置sync true属性这样在缓存失效后只有一个线程能去查询数据库其他线程会等待。缓存失效策略处理数据更新时通常有两种策略确保缓存与数据库的一致性失效模式常用使用CacheEvict在更新数据后直接删除缓存。下次查询时自动从数据库加载最新数据并缓存。双写模式使用CachePut在更新数据后同时更新缓存。这要求方法有返回值且是更新后的最新数据。缓存相关问题缓存穿透查询不存在的数据可通过在配置中设置cache-null-values: true来缓存空对象防止反复查询数据库。缓存雪崩大量缓存同时失效为不同的缓存设置随机的过期时间TTL避免同时失效。 实践建议缓存键Key设计使用key属性明确指定缓存键避免使用默认生成规则可能导致的冲突。灵活运用SpEL表达式如key #id或key user #user.id。序列化兼容性使用JSON序列化如GenericJackson2JsonRedisSerializer后存储在Redis中的数据是可读的并且更容易被其他非Java语言理解。希望这份指南能帮助你顺利上手。如果在具体配置或注解使用中遇到问题可以随时提出。❤️❤️❤️本人水平有限如有纰漏欢迎各位大佬评论批评指正如果觉得这篇文对你有帮助的话也请给个点赞、收藏下吧非常感谢! Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧