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