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

缓存问题,插入,更新,删除时的问题
一般情况下,插入,更新,删除时,因依赖关系,缓存会被自动释放掉,能不能实现数据库某条记录变动后,缓存中修改相应记录?

------解决方案--------------------
一般情况下,插入,更新,删除时,因依赖关系,缓存会被自动释放掉,能不能实现数据库某条记录变动后,缓存中修改相应记录?
——————————————————————————————————————————
显然应该第一次(释放掉内容后第一次)读取时才读取(修改),这才叫做缓存吗。否则,就直接成了触发器了。

即使是触发器,关于读取数据重新保存的代码也可能需要你来写,我看不出asp.net项目组有什么高招能够聪明地在不知你的程序设计细节的情况下代替你读取数据。

对于一些可以办到的地方,asp.net已经逐渐办到了。例如SqlDataSource一旦启用缓存,就会在自动读取数据库来刷新当前页面内的记录行,因为它知道你的SelectCommand属性了嘛。对于ObjectDataSource,以及其它一些类型的控件,asp.net也是这样自动更新缓存数据的。因为这些控件水平相对不高(假设你的要求很高),这些控件都严格限制了操作细节。如果你已经熟练地用了这些控件,还不够,你还可以自己仿照它们的控制逻辑设计自己的控件。

多用高级的控件,少往低级的编程方面设计(但是你要精通它们以便自己创造高级的东西),能用来点石成金的东西就会越来越多。
------解决方案--------------------
还有,我的缓存方法是:
1.将A表记录全部读取出来放入缓存
2.按页面搜索条件的不同,启用DefaultView的RowFilter筛选条件
这种方式,在记录集不多的情况下还可以,但数据量大了以后,启用DefaultView的速度就很慢很慢.
是否有更好的办法实现筛选?
由于页面中搜索条件有好几个,所以只能先将全部数据读出放入内存中,然后靠筛选了,不知有没有更好的办法?
————————————————————————————————————————
应该把 RowFilter 作为被缓存数据的关键key中的主要组成部分,在Cache中仅保存筛选出的部分数据(例如只有20条记录),不能保存“整个表”这么庞大。

如果你以为把整个表读到内存就节省内存了,以为根据筛选条件为数据块缓存就有很多“重复”数据于是就浪费内存了?90%以上的情况下这是错误的、没有仔细推算的理由。