spring的 @Cacheable 怎么做分布式?
时间: 2023-08-17 19:07:48 浏览: 135
spring + JTA + atomikos 实现分布式事务
5星 · 资源好评率100%
在 Spring 中,@Cacheable 注解默认是针对单个应用的本地缓存,如果需要将缓存变为分布式的,可以使用一些第三方的缓存中间件或缓存服务器。
一种常见的方式是使用 Redis 作为分布式缓存。你可以通过配置 RedisCacheManager 来实现将缓存数据存储在 Redis 中。
首先,确保你的项目中已经引入了 Redis 相关的依赖。然后,在 Spring 的配置文件中配置 Redis 连接信息,例如:
```xml
<!-- 配置 Redis 连接池 -->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<!-- 其他配置参数 -->
</bean>
<!-- 配置 Redis 连接工厂 -->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="poolConfig" ref="jedisPoolConfig"/>
<!-- 其他配置参数 -->
</bean>
<!-- 配置 Redis 缓存管理器 -->
<bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager">
<constructor-arg name="redisOperations" ref="redisTemplate"/>
</bean>
<!-- 配置 Redis 模板 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory"/>
<!-- 其他配置参数 -->
</bean>
```
接下来,在需要使用缓存的方法上加上 @Cacheable 注解,并指定缓存的名称和键生成策略,例如:
```java
@Cacheable(value = "myCache", key = "#param")
public Object getData(String param) {
// 从数据库或其他数据源获取数据
// ...
return data;
}
```
这样配置之后,@Cacheable 注解会将方法的返回值缓存到 Redis 中,并根据指定的缓存名称和键生成策略进行缓存数据的存储和获取。
当多个应用实例都连接到同一个 Redis 缓存服务器时,它们可以共享同一个缓存数据。这样就实现了分布式缓存的功能。
阅读全文