日期:2014-05-18  浏览次数:20541 次

如何在更新数据库时,同时更新缓存的数据(不丢弃缓存再重新读取数据来缓存)
网站中使用的缓存有一个数据集(一个表),如:Cache.Insert( "MyCache ",   ds)

我现在遇到这样的问题:
数据必须要缓存,因为数据表比较大,而且要经常性调用;
但数据也经常更新,每次更新仅更新其中一条记录(比如每天要更新1万次);

我试了一下,如果每次更新后重新读取数据来缓存的话,相当消耗CPU。

如何在数据更新时,同步更新数据库的表和缓存的表的相应记录,而不是放弃并重新读取所有缓存数据??

还是这种情况有其他办法?谢谢


------解决方案--------------------
缓存一个表也太奢侈了。

SqlDataSource如果启用缓存,也不过缓存一页(例如只有30条记录)数据而已。

------解决方案--------------------
如果可能,建议用实时数据库
------解决方案--------------------
当我说“把它分段读取到1000个缓存项中”时,千万不要以为一次性读入1000个对象,读入1000个对象也太笨了,实际上一开始一块数据也不需要读入。这只是一个逻辑上的类比,是说要以业务上的分类、分组为缓存依赖的主键而已,千万不要幼稚、机械地真的理解为把数据划分为1000个相互互斥的区域。

例如我们按照“最近一周更新过的数据、宁夏自治区的数据”两个key来保存了两块缓存数据,那么显然它们中的数据是有交集的。

缓存,是当它的依赖项通知它已经改变时就自动释放掉的。楼主所说的“先更新缓存中的数据再更新数据库中的数据”是非常有害的逻辑,这种错误的依赖关系逻辑其实让缓存系统失去了功能。