这是我参与11月更文挑战的第8天,活动详情查看:2021最后一次更文挑战
前言
本节介绍RuoYi-Vue的缓存帮助类,在Ruoyi中,实际上它的RedisCache实际上就是对RedisTemplate做了一次包装,主要是一些常见的使用方法,比如缓存数据的存入、获取、删除,设置有效时间。但是感觉这个帮助类中还是缺少一些命令,下面补充两个,算是抛砖引玉吧。
incr方法
我觉得在Ruoyi的帮助类中缺少一个incr命令,我们日常工作中经常会遇到要从1开始进行整数数据的自增的情况,比如工号之类的,如果用数据库的自增Id不是不可以,但是如果考虑以后可能会有多个表的情况的话,我们还是使用incr方法吧,它是一个更优雅的解决方案。
/**
* 实现命令 : INCR key
* 给 value 加 1,value 必须是整数
* @param key
* @return
*/
public Long incr(String key) {
return redisTemplate.opsForValue().increment(key);
}
但是需要注意,我们如果将这个字段保存在Redis中,那么我们一定要考虑如果Redis突然整个崩溃之后所有数据丢失的问题,此时如果这个键丢失了,而且数据库中对应的列设置了唯一约束,那么就会不停地报错。。所以我们在对应的代码处必须要对对应的数据进行检查,如果返回的值是1的话,我们就可以考虑去数据库进行一次查询,将对应的最新数据拿到。
unlink方法
Redis UNLINK 命令跟 DEL命令基本类似,都是用于删除指定的 key ,如果 key 不存在,则将其忽略。但是,该命令会用执行命令之外的线程中执行实际的内存回收, DEL进行内存回收时是阻塞的。而UNLINK命令只是将键与键空间断开连接。实际的删除将稍后异步进行。
/**
* 删除单个对象(异步清除内存)
*
* @param key
*/
public boolean unlinkObject(final String key) {
return redisTemplate.unlink(key);
}
这样可以帮助我们删除大体量的数据缓存时不会长时间阻塞在这里。