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