本学期我已经学习了一个数据库类,并且正在研究如何维护RDBMS和缓存服务器(如memcached)之间的缓存一致性。存在竞争条件时会出现一致性问题。例如:使用memcached和像MySQL这样的rdbms时的缓存一致性
- 假设我从缓存中做一个
get(key)
,并有高速缓存未命中。因为我得到一个缓存未命中,我从数据库中获取数据,然后在缓存中执行一个put(key,value)
。 - 但是,竞争条件可能会发生,其中一些其他用户可能会删除从数据库中提取的数据。在我将
put
放入缓存之前,可能会发生此删除操作。
因此,理想情况下put
进入缓存不应该发生,因为数据在数据库中较长。
如果高速缓存条目具有TTL,则高速缓存中的条目可能会过期。但仍有一个窗口,其中缓存中的数据与数据库不一致。
我一直在寻找关于这类问题的文章/研究论文。但是,我找不到任何有用的资源。
请解释如何解决问题中提到的竞争条件。你的回答显然不能解决问题。 – Alexey