本文通过给springboot程序集成redis实现缓存,解决并发行的查询带来的数据库压力。采用redis序列化器,使redis数据库更加易读
1.安装redis和redis客户端
mac版本redis https://www.jianshu.com/p/bb7c19c5fc47
redis客户端 http://www.pc6.com/mac/486661.html
2.pom.xml添加如下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
3.配置application.yml
spring:
redis:
host: localhost
port: 6379
4.配置了上述步骤,Springboot将自动配置RedisTemplate,在需要操作redis的类中注入redisTemplate;
springboot的redisTemplate类,泛型里面只能写<String,String>,<Object,Object>
@Autowired
private RedisTemplate<Object,Object> redisTemplate;
//查询缓存
List<Rank> rankList=(List<Rank>) redisTemplate.opsForValue().get("checkRank");
//把数据库查询出来的数据,放入redis中
redisTemplate.opsForValue().set("checkRank",rankList);
在service的查询数据库函数里里添加如下
@Service
public class WeightService {
/**注入springboot自动配置的redisTemplate**/
//打卡排行榜
public List<Rank> getCheckRank(){
//查询缓存
List<Rank> rankList=(List<Rank>) redisTemplate.opsForValue().get("checkRank");
if(null==rankList)
{
//缓存为空,查询一遍数据库
rankList=weightMapper.getCheckRank();
//把数据库查询出来的数据,放入redis中
redisTemplate.opsForValue().set("checkRank",rankList);
}
return rankList;
}
}
5. 序列化接口
修改Rank类,继承Serializable. 否则报Cannot serialize 不能序列化的错
public class Rank implements Serializable {
.....
}
6. 运行一下,运行结果如下:
现在key和value都是序列化后的,现在显示的跟乱码一样
7.为了解决序列化后,redis显示的乱码问题,添加key值字符串的序列化器,value不需要序列化
//字符串的序列化器
RedisSerializer redisSerializer=new StringRedisSerializer();
redisTemplate.setKeySerializer(redisSerializer);
修改后的代码如下:
/**注入springboot自动配置的redisTemplate**/
//打卡排行榜
public List<Rank> getCheckRank(){
//字符串的序列化器
RedisSerializer redisSerializer=new StringRedisSerializer();
redisTemplate.setKeySerializer(redisSerializer);
//查询缓存
List<Rank> rankList=(List<Rank>) redisTemplate.opsForValue().get("checkRank");
if(null==rankList)
{
//缓存为空,查询一遍数据库
rankList=weightMapper.getCheckRank();
//把数据库查询出来的数据,放入redis中
redisTemplate.opsForValue().set("checkRank",rankList);
}
return rankList;
}
重新运行一下代码