深刻淺出分佈式緩存的通用方法

各類分佈式緩存如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項目實現了註解法,經過註解就能夠在一個方法內部使用緩存,緩存操做都是透明的,咱們再也不須要重複寫上面的一段代碼。

相關文章
相關標籤/搜索