Redis是一种特殊类型的数据库,它被称为key-value存储。
Redis教程官网:http://www.redis.net.cn/tutorial/3501.html
Spring Data Redis是Spring Data系列的一部分,使用它可以轻松配置和访问Spring应用程序中的redis。如果直接操作redis,我们需要处理字节数组和各种类型之间的转换问题,类似于JDBC模板,Spring Data Redis提供了RedisTemplate。
废话少说,咱们来实践一下。
pom.xml
Spring Data Redis使用spring-data-redis,同时依赖jedis。
这里需要非常注意版本问题。
spring-data-redis 2.0版本
2.0以上版本要求 jdk 6以上, 以及Spring Framework 5.0.3以上。
spring-data-redis 1.8版本
这里1.8版本要求jdk 6以上,以及spring framework4.3.15以上。
我一开始用的使用spring-data-redis 2.0.6,但是spring是4.3.13。所以装配Bean的时候一直报错。1
2
3
4
5
6
7
8
9
10<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>1.8.11.RELEASE</version>
</dependency>
JavaConfig配置
Redis连接工厂会生成到Redis数据库服务器的连接。Spring Data Redis为四种Redis客户端实现提供了连接工厂:
- JedisConnectionFactory
- JredisConnectionFactory
- LettuceConnectionFactory
- SrpConnectionFactory
这里使用JedisConnectionFactory1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25/**
* Redis连接工厂
* @return
*/
public RedisConnectionFactory redisConnectionFactory(){
return new JedisConnectionFactory();
}
/**
* Redis访问模板
* @param redisConnectionFactory
* @return
*/
public RedisTemplate<String, Spitter> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String, Spitter> redisTemplate = new RedisTemplate<String, Spitter>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory){
return new StringRedisTemplate(redisConnectionFactory);
}
Spring Data Redis以模板的形式提供了较高等级的数据访问方案 。实际上,Spring Data Redis提供了两个模板:
- RedisTemplate
- StringRedisTemplate
RedisTemplate<K, V>使用两个类型进行参数化。第一个是key类型,第二个是value类型。
如果你所使用的value和key都是String类型,那么可以考虑使用StringRedisTemplate。
使用RedisTemplate
对于每一种数据类型都有相应的方法,详细可以查阅源码或API文档有多少方法。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 (SpringJUnit4ClassRunner.class)
(classes = {SpittrConfig.class})
public class ISpitterServiceTest {
private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(ISpitterServiceTest.class);
public RedisTemplate<String, Spitter> redisTemplate;
public void registerTest(){
Spitter capljf = new Spitter();
capljf.setUsername("capljf");
capljf.setPassword("123456");
// 操作单个值
redisTemplate.opsForValue().set(capljf.getUsername(),capljf);
String out = redisTemplate.opsForValue().get("capljf").toString();
LOG.info("======================={}", out);
// 操作List
redisTemplate.opsForList().leftPush("spitterList",capljf);
List<Spitter> spitterList = redisTemplate.opsForList().range("spitterList", 0, 2);
LOG.info("======================={}", spitterList);
// 操作Set
redisTemplate.opsForSet().add("spitterSet", capljf);
Spitter spitter = redisTemplate.opsForSet().randomMember("spitterSet");
LOG.info("======================={}", spitter);
redisTemplate.opsForSet().remove("spitterSet",capljf);
spitter = redisTemplate.opsForSet().randomMember("spitterSet");
LOG.info("======================={}", spitter);
}
}
参考文献
[1] 《Spring实战》4th
[2] Spring Data Redis
[3] Spring Data Redis 实践