Spring Boot 系列文章源于 深入实践Spring Boot 一书(感谢作者)。时过境迁,我使用了更新的版本来学习,并且拓展了许多内容(结合文档)。写下系列的博客,一则为了加强记忆,便于回顾,再则也希望帮助到正在学习 Spring Boot 的同学。当然,这也算给自己列下了一个学习计划吧!
在 Maven 中加入 spring-boot-starter-data-redis
依赖:
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
dependency>
您可以像注入任何其他Spring Bean一样注入自动配置的RedisConnectionFactory
、StringRedisTemplate
或普通RedisTemplate
实例。默认情况下,实例尝试连接到 localhost:6379
的Redis服务器。下面的清单显示了这样一个bean的例子:
@Component
public class MyBean {
private StringRedisTemplate template;
@Autowired
public MyBean(StringRedisTemplate template) {
this.template = template;
}
// ...
}
Redis 提供了下列几种数据类型可供存取:
创建一个 RedisServer
来封装对 Redis 的操作:
@Repository
public class RedisServer {
@Autowired
private StringRedisTemplate redisTemplate;
public void putValue(String key, String value){
redisTemplate.opsForValue().set(key, value);
}
public String getValue(String key){
return redisTemplate.opsForValue().get(key);
}
}
上面的代码实现了对 String 类型的存取值操作,其它用法还请参考文档;
由于安装的 Redis 默认是不需要密码验证的,我修改了配置文件,使其需要密码验证,这时默认的配置便不可用,所以需要做改动,加入以下的依赖:
<dependency>
<groupId>redis.clientsgroupId>
<artifactId>jedisartifactId>
<version>2.9.1version>
dependency>
编写如下配置类:
@Configuration
public class RedisConfiguration {
@Bean
public RedisConnectionFactory redisConnectionFactory(){
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
configuration.setPassword("123456");
RedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(configuration);
return redisConnectionFactory;
}
@Bean
public StringRedisTemplate redisTemplate(){
StringRedisTemplate redisTemplate = new StringRedisTemplate(redisConnectionFactory());
return redisTemplate;
}
}
在上面的配置类中加入 开启 redis repository 注解 :
@EnableRedisRepositories
实体类 User :
@Data
@RedisHash("member")
public class Member {
private String id;
@Id
private String name;
private Integer age;
}
@Id
注解协助 key 的生成,如果没有该注解,key 为 member: id的实际值,为 name 加上该注解后,key 为 member: name的实际值。
该注解的全限定类名为
org.springframework.data.annotation.Id
MemberRepository
类为:
@Repository
public interface MemberRepository extends CrudRepository<Member,String> {
}
服务类以及 repository 的测试均在以下的代码中:
@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {
@Autowired
private RedisServer redisServer;
@Autowired
private MemberRepository memberRepository;
@Test
public void stringOps(){
redisServer.putValue("author", "duofei");
String author = redisServer.getValue("author");
Assert.assertNotNull(author);
}
@Test
public void repositoryOps() {
Member member = new Member();
member.setId("001");
member.setName("duofei");
member.setAge(24);
memberRepository.save(member);
Iterable<Member> result = memberRepository.findAll();
result.forEach(mb -> {
System.out.println(mb.getId() + " -.- " + mb.getName());
} );
Assert.assertNotNull(result);
}
}
由于对 redis 的熟悉程度不够,所以并未进行更多的操作。但脚手架已经好了,不是嘛?