参考视频: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: localhostport: 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;@Configurationpublic class RedisConfig {/*** 设置Redis序列化方式,默认使用的JDKSerializer的序列化方式,效率低,这里我们使用 FastJsonRedisSerializer** @param redisConnectionFactory* @return*/@Beanpublic 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;@Testvoid testRedis() throws IOException {//设置key-valueredisTemplate.opsForValue().set("tang", "ceshi123");//根据key读取valueObject 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 foobaredrequirepass "abcd"
3、windows下载自动启动redis
redis-server --service-install redis.windows-service.conf --loglevel verbose//启动命令redis-server --service-start//停止服务redis-server --service-stop

