一、使用 Docker 快速安装 Redis
1、安装 redis,使用 docker 方式
使用 Docker 中国,镜像中国 加速下载 https://www.bbsmax.com/A/amd083yqdg/
2、命令安装
获取 Redis 镜像
docker pull registry.docker-cn.com/library/redis
启动 Redis 容器,并设置端口映射
docker run -d -p 6379:6379 --name myredis imgId
查看运行的 Docker 容器
docker ps
二、引入 redis 的 starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
三、配置 Redis
在 SpringBoot 的配置文件中配置 Redis 信息
#redis 的配置信息
spring.redis.host=192.168.8.119
四、RedisAutoConfiguration
当在项目中导入 redis 的相关依赖时,RedisAutoConfiguration 就会生效。
RedisAutoConfiguration 会给我们导入两个用于操作 Redis 的类:
其中:
StringRedisTemplate stringRedisTemplate; //操作k-v都是字符串的
RedisTemplate redisTemplate; //k-v 都是对象的
五、使用 RedisTemplate 操作 Redis
1、操作常用数据结构
Redis 常见的五大数据类型
String 字符串 redisTemplate.opsForValue(); //操作字符串
list 列表 redisTemplate.opsForList(); //操作list
Set 集合 redisTemplate.opsForSet(); //操作set
Hash 散列 redisTemplate.opsForHash(); //操作hash
ZSet 有序集合 redisTemplate.opsForZSet(); //操作有序set
代码示例:
@Test
public void test01() {
// redis 中保存数据
//stringRedisTemplate.opsForValue().append("msg", "hello");
// 读取数据
String msg = stringRedisTemplate.opsForValue().get("msg");
System.out.println("msg = " + msg);
//操作列表
stringRedisTemplate.opsForList().leftPush("myList", "1");
stringRedisTemplate.opsForList().leftPush("myList", "2");
stringRedisTemplate.opsForList().leftPush("myList", "3");
}
2、保存对象
使用 Redis 保存自定义的 JavaBean 对象,JavaBean 需要实现序列化 Serializable 接口。
示例:
@Test
public void test02() {
Employee emp = employeeMapper.getEmpById(1);
//默认如果保存对象,使用 jdk 序列化机制,序列化后的数据保存到 redis 中
redisTemplate.opsForValue().set("emp-01", emp);
}
通过 Redis 的可视化工具看到的效果:
默认使用的是 JDK 序列化机制来保存的。
如果想把数据以 JSON 的方式保存,怎么办呢?
(1)保存数据的时候,自己将对象转为 json 字符串
(2)redisTemplate 有默认的序列化规则,可以自己定制序列化器
配置自定义序列化器:
@Configuration
public class MyRedisConfig {
@Bean
public RedisTemplate<Object, Employee> empRedisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Employee> template = new RedisTemplate<Object, Employee>();
//设置默认的序列化器
template.setDefaultSerializer(new Jackson2JsonRedisSerializer<Employee>(Employee.class));
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
保存数据:
@Autowired
RedisTemplate<Object, Employee> empRedisTemplate; //使用自定义的 redisTemplate
@Test
public void test02() {
Employee emp = employeeMapper.getEmpById(1);
//如果想保存 JSON 字符串
//1. 将数据以 json 的方式保存,自己将对象转为 json 字符串
//2. redisTemplate 有默认的序列化规则
empRedisTemplate.opsForValue().set("emp-02", emp);
}
查看效果: