redis延迟双删是怎么双删的
时间: 2024-01-02 19:06:57 浏览: 107
Redis延迟双删是指在缓存中删除某个key时,为了避免缓存雪崩或缓存穿透等问题,采用了一种延迟删除的方式,即先将该key的过期时间设置成一定的时间(比如几分钟或几小时),然后再立即删除该key。这样,在这段时间内,即使有请求访问该缓存,由于该key并未真正删除,仍能从缓存中获取到数据,从而避免了缓存穿透的问题。
如果在延迟时间内,有新的请求需要访问该key,此时缓存中已经没有该key,就会出现缓存穿透的问题。为了避免这种情况,又会进行一次双删操作,即再次查询数据库获取数据,并将其写入缓存中,然后再次删除该key。这样,即使在延迟时间内,有新的请求需要访问该key,也能从缓存中获取到数据,从而避免了缓存穿透的问题。
相关问题
redis延迟双删是怎么双删的?
Redis延迟双删是指在缓存中删除某个key时,为了避免缓存雪崩或缓存穿透等问题,采用了一种延迟删除的方式,即先将该key的过期时间设置成一定的时间(比如几分钟或几小时),然后再立即删除该key。这样,在这段时间内,即使有请求访问该缓存,由于该key并未真正删除,仍能从缓存中获取到数据,从而避免了缓存穿透的问题。
如果在延迟时间内,有新的请求需要访问该key,此时缓存中已经没有该key,就会出现缓存穿透的问题。为了避免这种情况,又会进行一次双删操作,即再次查询数据库获取数据,并将其写入缓存中,然后再次删除该key。这样,即使在延迟时间内,有新的请求需要访问该key,也能从缓存中获取到数据,从而避免了缓存穿透的问题。
redis延迟双删的代码
根据提供的引用内容,可以看出延迟双删是一种不推荐使用的方案。在实际开发中,我们应该尽量避免这种方案的使用。如果您非常需要使用延迟双删,可以参考以下代码实现:
```java
public void deleteMayiktRedis(String key) {
// 先删除缓存
redisTemplate.delete(key);
// 更新db中的数据
updateMayiktDB(user);
try {
// 延迟一段时间,在删除该缓存key
Thread.sleep(u);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 先更新DB,在删除缓存
updateMayiktDB(user);
redisTemplate.delete(key);
}
```
需要注意的是,这段代码仅供参考,实际使用时需要根据具体业务场景进行修改和优化。
阅读全文