2024年3月14日发(作者:)
缓存管理面临的主要问题
缓存作为一个数据中心,具备添加、更新、删除数据的操作,因此跟数据库类似,会
存在事务性、并发情况下数据一致性等问题需要解决
使用缓存比较典型的方式如下面代码:
Database db = new Database();
Transaction tx = ransaction();
try
{
//从缓存读取
MyEntity1 entity1 =
//缓存中没有时从数据库读取
if (entity1 == null) entity1 =
//对entity1进行处理
updated = (entity1); //entity1的更新保存到数据库中
if (updated) (entity1); //数据库更新成功,则更新缓存
//事务中的其他处理
();
}
catch
{
ck();
throw;
}
上面的示例代码,是在一个事务性环境中使用缓存,存在更新操作(非只读缓存),如
果这是一个共享缓存,这样的使用方式存在很多问题,比如说: 如果事务中的其他处理导
致异常,数据库中对entity1的更新可以被回滚掉,但是cache中的entity1已经被更新
了,如果不处理这样的情况后续从cache中读出的entity1就是一个不正确的数据
所以,要正确的使用缓存,必须有一个完善的方案,充分考虑事务、并发等状况,确


发布评论