一、redis安装
1、使用docker安装redis
(1)
(2)
2、使用RedisDesktopManager连接工具进行测试
(1)可以看到edis的16个数据库,成功
(2)
二、引入redis的starter
1、https://docs.spring.io/spring-boot/docs/1.5.12.RELEASE/reference/htmlsingle/
<!--引入redis的starter-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、引入的操作redis客户端
(1)springboot2.0使用lettuce操作redis
(2)springboot 1.x
3、配置文件中配置redis
spring.redis.host=192.168.93.101
spring.redis.port=6379
三、操作redis
1、RedisAutoConfiguration.java
2、测试
StringRedisTemplate 操作字符串
@Autowired
private RedisTemplate redisTemplate; //操作k-v都是对象
@Autowired
private StringRedisTemplate stringRedisTemplate; //操作字符串的
/**
* stringRedisTemplate.opsForValue()[String]
* stringRedisTemplate.opsForList()
* stringRedisTemplate.opsForSet()
*/
@Test
public void test02(){
String msg = stringRedisTemplate.opsForValue().get("msg");
System.out.println(msg);
String mylist = stringRedisTemplate.opsForList().leftPop("mylist");
System.out.println(mylist.toString());
}
3、测试
redisTemplate 保存对象
//测试保存对象
@Test
public void test03(){
Employee e = employeeMapper.getEmpById(1);
redisTemplate.opsForValue().set("emp-01", e);
}
运行报错:
解决: 默认如果保存对象,使用jdk序列化机制,序列化后的数据保存到redis中
public class Employee implements Serializable {
序列化后的结果,可读性差
默认如果保存对象,使用jdk序列化机制,序列化后的数据保存到redis中
4、我们都希望以json的形式来保存对象
(1) 自己将数据转为json
<!--引入fastjson-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.68</version>
</dependency>
//测试保存对象
@Test
public void test03(){
Employee e = employeeMapper.getEmpById(1);
//1.数据以json的方法保存
//(1)自己将数据转为json
String jsonStr = JSON.toJSONString(e);
//默认如果保存对象,使用jdk序列化机制,序列化后的数据保存到redis中
redisTemplate.opsForValue().set("emp-02", jsonStr);
}
(2)编写MyRedisConfig
@Configuration
public class MyRedisConfig {
@Bean
public RedisTemplate<Object, Employee> redisTemplate(RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Employee> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer<Employee> serializer = new Jackson2JsonRedisSerializer<Employee>();
template.setDefaultSerializer(serializer);
return template;
}
}
也可以换成:
@Bean public RedisTemplate<Object, Object> objRedisTemplate(RedisConnectionFactory redisConnectionFactory)
template.setDefaultSerializer();需要传入一个RedisSerializer<?>
我们使用
Jackson2JsonRedisSerializer
(3)测试
//测试保存对象
@Test
public void test03(){
Employee e = employeeMapper.getEmpById(1);
//1.数据以json的方法保存
//(1)自己将数据转为json
//String jsonStr = JSON.toJSONString(e);
//默认如果保存对象,使用jdk序列化机制,序列化后的数据保存到redis中
//redisTemplate.opsForValue().set("emp-01", jsonStr);
empRedisTemplate.opsForValue().set("emp-02", e);
}