App Engine NDB有一个很好的数据存储缓存策略,它可以在memcache中缓存实体,并且可以确保缓存始终与底层数据存储同步。
以下是伪代码策略的概述:
从数据存储中获取实体:
if entity in memcache:
return entity
else:
add memcache lock for entity
get memcache lock for later CAS use
check get memcache lock retrieved the same add memcache lock
get entity from datastore
save entity to memcache using CAS
return entity
将实体放入数据存储区:
add memcache lock for entity
put entity into datastore
remove memcache lock
从数据存储中删除实体:
add memcache lock for entity
delete entity from datastore
这种设计的优点是缓存与数据存储区不同步的机会很少。但是,有几种情况我可以想到它可能发生的地方:
我在这里更详细地描述了它们:https://github.com/qedus/nds/labels/consistency
什么是缓存策略,数据存储不会与缓存不同步?