redis的双写问题一般都是出现在高并发的情况下,什么是双写问题呢?就拿库存服务来说。
1、redis双写
redis双写问题就是当前端有一个修改数据请求发送到库存服务时,库存服务会将redis中的缓存进行删除,如果这时由于网络问题停顿了一秒(象征一下),恰恰有一个查询请求访问库存服务,库存服务就会去拉取redis中的数据,而这是由于redis中的缓存已经进行了删除,所以redis就会去数据库拉取数据到redis中,也就是这段时间的请求都会访问以前的旧数据,这就是redis中的双写问题。
2、解决办法
相信一些人已经想到了解决的方法,那就是队列。还拿库存服务来说,在库存服务中加入队列,当请求过来时就将请求保存进队列中,这样数据的不同步问题就会解决。这样就会出现有一个问题当队列中有一个更新请求,两个读请求。这样的话读请求会不会显得多余,是我们的队列很冗余,所以我们往往在队列中只保存一个读的请求。这样就会有一个极端的情况出现,就是当你更新完数据的时候,redis中的内存满了,读请求就发送过去,就会被redis中的缓存淘汰算法淘汰(LRU),而其他的读请求又进入不了队列所以就导致读请求被阻塞的情况。所以我们就需要设置一个超时时间,如果超时就会从数据库中拉取数据,要是数据库中也没有数据的话,那么redis缓存中也不会有数据。