下面是常见四种NoSql的简单对比。
今天主要学习Redis。
在windows上安装Redis只需要解压Redis安装包,得到如下文件列表。
开启redis-server程序,会看到下面的画面。
可以看到Redis使用的端口号是6379,已经成功启动,准备好接受连接。
我们开启redis-cli程序,输入ping命令,如果返回PONG信息则说明服务器运行正常。
我们在客户端输入一些命令进行练习。
下面开始在Springboot项目中集成Redis。
只需要在新建项目时加入Redis依赖就可以把Redis引入到项目中,maven自动导入需要的jar包。
从上图可以看到lettuce替换了之前的jedis,这是SpringBoot2.x之后做出的改变。
我们在application.properties中配置Redis的属性。
我们可以看到在官方的配置类中并没有给过多的配置,我们可以自己写一个配置类来覆盖它。
public class RedisAutoConfiguration {
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")//我们可以自己定义一个redisTemplate来替换这个。
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
//默认的RedisTemplate没有过多的配置,redis对象都是需要序列化的。
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean //由于String类型最常用,所以单独提出来一个bean。
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
我们模仿官方的配置类,加入序列化操作。
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<String,Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
//json序列化配置
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
//string的序列化
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
//配置具体的序列化方式
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
}
我们在测试类中测试一下Redis简单的操作。
@Test
void contextLoads() {
redisTemplate.opsForValue().set("name","梁鹏辉");
System.out.println(redisTemplate.opsForValue().get("name"));
}
下面是测试结果:
我们测试存储一个对象。
@Test
void test01() throws JsonProcessingException {
//使用json来传递对象
User user = new User("liang",22);
String jsonUser = new ObjectMapper().writeValueAsString(user);
redisTemplate.opsForValue().set("user",jsonUser);
System.out.println(redisTemplate.opsForValue().get("user"));
}
测试结果如下,为json格式。
我们在控制台开启redis-cli客户端程序,加–raw参数解决中文乱码问题,
查询结果如:
上面存储的user对象,pojo类如下,有name和age两个属性。
public class User implements Serializable {
private String name;
private int age;
}