为什么是删除,⽽不是更新缓存?
我们以先更新数据库,再删除缓存来举例。
如果是更新的话,那就是先更新数据库,再更新缓存。
举个例⼦:如果数据库1⼩时内更新了1000次,那么缓存也要更新1000次,但是这个缓存可能在1⼩时内只被读取了1次,那么这1000次的更新有必要吗?
反过来,如果是删除的话,就算数据库更新了1000次,那么也只是做了1次缓存删除,只有当缓存真正被读取的时候才去数据库加载。
总结
⾸先,我们要明确⼀点,缓存不是更新,⽽应该是删除。
删除缓存有两种⽅式:
1. 先删除缓存,再更新数据库。解决⽅案是使⽤延迟双删。
2. 先更新数据库,再删除缓存。解决⽅案是消息队列或者其他binlog同步,引⼊消息队列会带来更多的问题,并不推荐直接使⽤。
针对缓存⼀致性要求不是很⾼的场景,那么只通过设置超时时间就可以了。其实,如果不是很⾼的并发,⽆论你选择先删缓存还是后删缓存的⽅式,都⼏乎很少能产⽣这种问题,但是在⾼并发下,你应该知道怎么解决问题。
网友评论