Spring Boot 中使用 Redis 做集中式缓存
Spring Boot 文档中定义了对项目中的缓存,提供的一种简便的解决方案,可以通过注解的方式设置需要缓存的方法,从而减少缓存代码和业务代码的耦合,并且可以方便得集成第三方缓存技术。
缓存配置
在 Spring Boot 中通过 @EnableCaching
注解自动化配置合适的缓存管理器(CacheManager),Spring Boot 将根据下面的顺序去侦测缓存提供者:
- Generic
- JCache (JSR-107) (EhCache 3, Hazelcast, Infinispan, and others)
- EhCache 2.x
- Hazelcast
- Infinispan
- Couchbase
- Redis
- Caffeine
- Simple
也可以通过配置属性 spring.cache.type
来强制指定。
Maven
<!-- cache --> <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>
Application
@EnableTransactionManagement @SpringBootApplication @EnableCaching public class SunWebApplication { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Bean public Object testBean(PlatformTransactionManager platformTransactionManager){ logger.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>> platformTransactionManager name: " + platformTransactionManager.getClass().getName()); return new Object(); } public static void main(String[] args) { SpringApplication.run(SunWebApplication.class, args); } }
Service
@CacheConfig(cacheNames = "users") public interface UserService { /** * 根据用户名查询用户信息 * @param username * @return */ @Cacheable Users findByUsername(String username); }
yml
cache: type: redis redis: host: 172.0.0.1 port: 6379 password: "pwd" database: 0 timeout: 50ms
注解的使用
@Cacheable
标记方法为被缓存的方法,当通过参数拼接出的key在缓存中找不到对应的value时,会调用该方法,然后将参数以一定规则拼接为key,方法的返回值作为value记录到缓存数据库中。常用于select操作。
主要属性:
** cacheNames(value) **:缓存名,可指定多个。
** key **:缓存的key的取值规则,可通过SpEl表达式自定义,如#code,则表示key取值为传入的code参数。为空则默认将所有参数拼接为一个key值。
** condition **:记录缓存的条件,可通过SpEl表达式自定义,保证表达式返回true或false,返回true时才会记录缓存。
@CacheEvict
标记方法为更新缓存方法,当此方法被调用后,会清空缓存,从而让被@Cacheable标记的方法在调用时重新获取值存入缓存。常用于delete操作。
主要属性:
前三个属性与@Cacheable注解类似,除了condition,这里的condition是返回true时才会清除缓存。
** allEntries **:是否清空所有缓存,默认为false。默认情况是只有key值相同的缓存才会被清除,若指定为true,则清空所有cacheName相同的缓存记录。
** beforeInvocation **:是否在调用方法之前就执行清除缓存操作,默认是false,当调用方法抛出异常时不会清除缓存,如果指定为true就表示无论方法是否执行成功,都一定会清除缓存。
@CachePut
与@Cacheable注解一样都可以使标记方法被缓存,但不同之处在于,@CachePut标记的方法无论是否有缓存记录都会被执行,因此常用于update操作。
@CacheConfig
作用于类上,可以为此类所有的方法上的缓存注解设置默认的属性。
如:@CacheConfig(cacheNames = "users")
则标记的类的所有方法上的缓存相关注解的cacheNames属性默认都为"users"。
REFER:
https://github.com/alibaba/jetcache
https://gitee.com/ld/J2Cache
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-caching
相关文章
- spring boot 配置redis
- python redis之连接池的原理
- springboot整合spring data redis
- 图解 Redis 分布式锁,写得太好了!
- Spring Boot 如何快速集成 Redis 哨兵?
- Spring Data Redis 详解及实战一文搞定
- Redis实战之征服 Redis + Jedis + Spring (一)
- spring redis java.lang.IllegalStateException: Cannot load configuration class: redis.RedisTemplet报错
- Redis学习之Redis概述及原理、基本操作及持久化
- Spring之Redis访问(Spring-data-redis)
- springboot中使用spring-session实现共享会话到redis(二)
- Spring Data操作Redis时,发现key值出现 xacxedx00x05tx00tb
- 关于php-redis的pconnect长链接的思考
- Redis数据类型
- Redis数据结构详解之List(二)
- Spring Boot + Redis 解决重复提交问题,还有谁不会
- Spring Boot + Redis 搞定搜索栏热搜、不雅文字过滤功能
- Redis6入门到实战------ 八、Redis与Spring Boot整合
- Redis 一二事 - 在spring中使用jedis 连接调试单机redis以及集群redis
- Jeesite增加spring-data-redis缓存功能以及相关配置
- spring 整合 redis 单机版
- 大数据Flink(十六):流批一体API Connectors Redis
- SpringBoot2.x系列教程(六十八)Spring Boot集成Redis的坑,踩了!
- redis参数改进建议