本文方案适用于高并发环境,普通环境可采用更简洁的方案。
一、缓存更新
采用先更新数据库,再删除缓存的策略。步骤如下:
1)收到写请求首先更新数据库,并确定更新成功
2)删除Redis缓存,如果删除成功,流程结束。
3)如果Redis缓存没有删除成功,则将相关key放入消息队列,消费者进行重试操作,直到删除成功。
二、缓存读取
1)收到读请求,首先读取Redis,判断缓存是否存在,如果存在,流程结束。
2)如果Redis中,相关key的缓存不存在,则判断全局环境是否存在相同key的读请求。
3)如果不存在相同读请求,则查询mysql,并将相关value更新到缓存。
4)如果已存在相同读请求,则沉默一定时间,重新读取,直到读取成功。可以设置读取的重试次数,前提是确保99%的概率能读取成功。设置重试次数,也是为了保证不发生读取死循环。