DoubleCache思考
最近想修改网站的架构。改成凡是读操作,都走缓存。写操作写入数据库里,然后通知独立的线程去更新缓存中的数据。这样子会遇到的问题就是如果独立的线程删除了缓存,那么读的操作就读不到数据了。因此就想了个临时双缓存的方式去缓存读的数据。
解决的问题:
- 非必要实时数据的请求确保用户的请求速度
- 尽可能地让用户更快地看到新数据
关于读写操作
在我们的Web请求中,可以分成两类。一类是读:get,另外一类是写:post put delete
所以,只要是get都从缓存中获取。而post put delete的请求,全部是修改数据库,然后发送消息给更新缓存的线程。更新缓存的线程收到消息后,根据key去更新缓存。
重点是这里,更新缓存的动作。
缓存里有一个版本号标识。
- 首先是获取缓存端,如果此版本没有了缓存,就尝试去获取下一个版本的缓存。
- 然后是更新缓存端,更新的时候,自定在原来的版本上加1,等到缓存更新完毕,延时一定的时间去删除旧缓存
所以虽然某些情况下,用户请求到的是旧数据,但是也能及时地请求到数据,这就解决了体验上当用户缓存过期,或者要更新时,某个用户的请求时间非常长的问题。
结构设计
以上是数据流,重点在于缓存任务的设计,缓存版本的管理,异常的处理,特殊case的处理
关于代码编写
按断点的说法,以他多年的经验,一般要3个月以上。
后面实时了再加上代码吧,只是个想法。