深入浅出分布式缓存的通用方法

各种分布式缓存如Redis,都提供了不同语言的客户端API,我们可以使用这些API直接访问缓存,也可以通过注解等方法使用缓存。

1、编程法

编程法指通过编程的方式直接访问缓存,伪代码如下:

1String userKey = ...;
2User user = (User)cacheService.getObject(userKey)
3if (user == null) {
4User user = (User)userDBService.getUser(userKey)
5if (user != null)
6cacheService.setObject(userKey, user);
7}
8return user;

这种方法实现起来简单,但是每次使用时都得敲入类似上面这样的一段代码,很繁琐。可以将这部分内容抽象成一个框架,请参考下文。

2、Spring注入法

spring-data-redis项目实现了注入法,通过Bean注入就可以直接使用Spring的缓存模板提供的方法。

(spring-data-redis项目链接:https://projects.spring.io/spring-data-redis)

首先,引入spring-data-redis包:

1<dependencies>
2 <dependency>
3 <groupId>org.springframework.data</groupId>
4 <artifactId>spring-data-redis</artifactId>
5 <version>2.0.2.RELEASE</version>
6 </dependency>
7</dependencies>

然后在Spring环境下进行如下配置:

1<bean id="jedisConnFactory"
2 class="org.springframework.data.redis.connection.jedis.JedisConnection Factory"
3 p:use-pool="true"/>
4<!—redis模板定义 -->
5<bean id="redisTemplate"
6 class="org.springframework.data.redis.core.RedisTemplate"
7 p:connection-factory-ref="jedisConnFactory"/>

再通过Spring环境注入使用的服务中:

 1public class UserLinkService{
 2 // 注入Redis的模板
 3 @Autowired
 4 private RedisTemplate<String, String> template;
 5 // 把模板当作ListOperations接口类型注入,也可以当作Value、Set、Zset、HashOperations接口类型注入
 6 @Resource(name="redisTemplate")
 7 private ListOperations<String, String> listOps;
 8 public void addLink(String userId, URL url) {
 9 //使用注入的接口类型 
10 listOps.leftPush(userId, url.toExternalForm());
11 //直接使用模板 
12 redisTemplate.boundListOps(userId).leftPush(url.toExternalForm());
13 }
14}
 

3、注解法

spring-data-redis项目实现了注解法,通过注解就可以在一个方法内部使用缓存,缓存操作都是透明的,我们不再需要重复写上面的一段代码。

猜你喜欢

转载自my.oschina.net/u/3611008/blog/1815992