各种分布式缓存如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项目实现了注解法,通过注解就可以在一个方法内部使用缓存,缓存操作都是透明的,我们不再需要重复写上面的一段代码。