2024年3月14日发(作者:)

缓存管理面临的主要问题

缓存作为一个数据中心,具备添加、更新、删除数据的操作,因此跟数据库类似,会

存在事务性、并发情况下数据一致性等问题需要解决

使用缓存比较典型的方式如下面代码:

Database db = new Database();

Transaction tx = ransaction();

try

{

//从缓存读取

MyEntity1 entity1 = ("pk of entity1");

//缓存中没有时从数据库读取

if (entity1 == null) entity1 = ("pk of entity1");

//对entity1进行处理

updated = (entity1); //entity1的更新保存到数据库中

if (updated) (entity1); //数据库更新成功,则更新缓存

//事务中的其他处理

();

}

catch

{

ck();

throw;

}

上面的示例代码,是在一个事务性环境中使用缓存,存在更新操作(非只读缓存),如

果这是一个共享缓存,这样的使用方式存在很多问题,比如说: 如果事务中的其他处理导

致异常,数据库中对entity1的更新可以被回滚掉,但是cache中的entity1已经被更新

了,如果不处理这样的情况后续从cache中读出的entity1就是一个不正确的数据

所以,要正确的使用缓存,必须有一个完善的方案,充分考虑事务、并发等状况,确