参考视频:https://www.bilibili.com/video/BV1844y1z7LQ?spm_id_from=333.337.search-card.all.click
下载地址:https://github.com/tporadowski/redis/releases
菜鸟教程:https://www.runoob.com/redis/redis-install.html
一、引入依赖
<!-- Redis数据库 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
还需要引入通用池
参考:java-commons-pool2—(1)—连接池详解
<!-- 通用连接池-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
二、配置redis数据源
# redis数据源
redis:
host: localhost
port: 6379
三、redis序列化配置
如果不配置,就会使用默认的配置。
package com.tj.demo.config;
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisConfig {
/**
* 设置Redis序列化方式,默认使用的JDKSerializer的序列化方式,效率低,这里我们使用 FastJsonRedisSerializer
*
* @param redisConnectionFactory
* @return
*/
@Bean
public RedisTemplate<String, Object> redisTemplate(LettuceConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
// key序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
// value序列化
redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
// Hash key序列化
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
// Hash value序列化
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
//连接工厂对象
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}
四、业务实现
1、redisTemplate
redisTemplate.opsForValue();//操作String类型数据
redisTemplate.opsForHash(); //操作Hash类型
redisTemplate.opsForList(); //操作List类型
redisTemplate.opsForSet(); //操作Set类型
redisTemplate.opsForZSet(); //操作SortedSet类型
2、测试案例
import org.springframework.data.redis.core.RedisTemplate;
//加载redis模版
@Autowired(required = false)
RedisTemplate redisTemplate;
@Test
void testRedis() throws IOException {
//设置key-value
redisTemplate.opsForValue().set("tang", "ceshi123");
//根据key读取value
Object tang = redisTemplate.opsForValue().get("tang");
log.info(tang.toString());
}
五、同步代码优化
如果用redis缓存数据库数据,应该用同步代码块来优化
//同步代码逻辑
synchronized (this.getClass()){
//这个里面是同步代码
//里面要再测进行验证,缓存里是否有数据,
//如果有就取缓存的,如果没有就去查数据库,并把数据库的结果再缓存到redis里面
}
六、实际案例
1、JWT和redis结合的登录验证案例
参考:JWT后台实现旧Token失效的问题(添加黑名单方式)
Redis设置过期时间
TimeUnit用法
POST用户退出登录API
七、其他
1、连接redis的桌面工具
2、redis设置密码的方法
局域网可以不需要设置密码
在redis根目录下,打开redis.windows.conf配置文件,查找requirepass,添加密码。
注意,行前不能有空格。
# requirepass foobared
requirepass "abcd"
3、windows下载自动启动redis
redis-server --service-install redis.windows-service.conf --loglevel verbose
//启动命令
redis-server --service-start
//停止服务
redis-server --service-stop