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

各类分布式缓存如Redis,都提供了不一样语言的客户端API,咱们能够使用这些API直接访问缓存,也能够经过注解等方法使用缓存。redis

1、编程法spring

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

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)url

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

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环境下进行以下配置:orm

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项目实现了注解法,经过注解就能够在一个方法内部使用缓存,缓存操做都是透明的,咱们再也不须要重复写上面的一段代码。

相关文章
相关标签/搜索