这篇文章适合Springboot增删改查很熟练的人
整合此老师的Redis教程:朝月余晖的个人空间_哔哩哔哩_Bilibili
业务场景1:比如获取文章列表,当页面创建的时候就可以调用后端的数据,这时候要请求数据库。
但是!!!你用户一旦刷新页面了,那么文章列表的数据将重新请求后端接口,很没必要,同时也会施加服务器的压力。
配置Spring缓存,在Springboot项目入口配置@EnableCaching
再在获取列表的ServiceImpl方法上添加@Cacheable注解
含义是:当这个方法第一次被调用时,这个方法的返回值存入指定的缓存区域中
当这个方法第二次被调用时,首先是查看缓存中是否有这个key="'getProviderList'"
常用的按条件搜索也可以加缓存
业务场景2:当我删除其中一个文章,再获取所有文章的时候,获取的居然还是原来的文章(因为是在取缓存),这里就需要清除缓存
在ServiceImple删除方法上面添加删除缓存的注解@CacheEvict
你也可以清除所有缓存 list和byid啥的,因为删除一个文章也会影响其他的缓存
这些Spring自带的缓存注解确实可以让数据请求次数减少很多,而且缓存是存在服务器之中,因此会给这个服务器带来很大的压力,所以引出了为啥要用redis,把redis配置在指定一台服务器上。
依赖添加
org.springframework.boot
spring-boot-starter-data-redis
配置文件
#redis
spring.cache.type=redis
#缓存超时时间
spring.cache.redis.time-to-live=60000
#是否缓存空值
spring.cache.redis.cache-null-values=false
spring.redis.host=xxx.xxx.xxx.xxx
#Redis服务器连接端口
spring.redis.port=6379
Postman测试获取http://localhost:9000/comment/all?pageNum=1&pageSize=4
在redis里直接存入这个结果,如果出现乱码,那么就是需要序列化
可以在方法里随意进行个性化存储,比如一个订单支付时间只有30分钟,这时候你就要有个30分钟倒计时,那么可以让redis设置订单id30分钟,只需要写下面这一句即可,其他语句忽略,redisTemplate.opsForValue().set("order_id",1232324, Duration.ofMinutes(30L));
@Autowired
RedisTemplate redisTemplate;
// 订单id存在redis,存30分钟
redisTemplate.opsForValue().set("order_id",1232324, Duration.ofMinutes(30L));
取redis时间
// 获取订单剩余时间
Long expire=redisTemplate.getExpire(order_id);
测试成功!
// 删除key
public void delete(String key){
redisTemplate.delete(key);
}
// 删除多个key
public void deleteKey (String ...keys){
redisTemplate.delete(keys);
}
// 指定key的失效时间
public void expire(String key,long time){
redisTemplate.expire(key,time,TimeUnit.MINUTES);
}
// 根据key获取过期时间
public long getExpire(String key){
Long expire = redisTemplate.getExpire(key);
return expire;
}
// 判断key是否存在
public boolean hasKey(String key){
return redisTemplate.hasKey(key);
}