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

解决方案 »

  1.   

    还有,我的缓存方法是:
    1.将A表记录全部读取出来放入缓存
    2.按页面搜索条件的不同,启用DefaultView的RowFilter筛选条件
    这种方式,在记录集不多的情况下还可以,但数据量大了以后,启用DefaultView的速度就很慢很慢.
    是否有更好的办法实现筛选?
    由于页面中搜索条件有好几个,所以只能先将全部数据读出放入内存中,然后靠筛选了,不知有没有更好的办法?
      

  2.   

    有啥不可以的,比如你用entlib就可以很方便的定义缓存失效是的动作
    这里就再取一次缓存起来好了
      

  3.   

    truecoffeefox(咖啡狐) 能说得具体点吗?
      

  4.   

    还有,我的缓存方法是:
    1.将A表记录全部读取出来放入缓存
    2.按页面搜索条件的不同,启用DefaultView的RowFilter筛选条件
    这种方式,在记录集不多的情况下还可以,但数据量大了以后,启用DefaultView的速度就很慢很慢.
    是否有更好的办法实现筛选?
    由于页面中搜索条件有好几个,所以只能先将全部数据读出放入内存中,然后靠筛选了,不知有没有更好的办法?ajax实现那么方便现在,干嘛不做成向导式的,逐步求精
      

  5.   

    我习惯用EntLib,比如
    infoCacheManager.Add(CacheKey, objObject, 缓存优先级, new InfoCacheItemRefreshAction(),失效时间刻度);里边的InfoCacheItemRefreshAction是刷新缓存
     public class InfoCacheItemRefreshAction : ICacheItemRefreshAction
        {
            public void Refresh(string key, object expiredValue, CacheItemRemovedReason removalReason)
            {
                处理
            }
        }
      

  6.   

    做的那么适时不可能~~~你可以在后台跑几个线程去查数据库,发现有更新了替换原来的内容那还要单独做个控制台定时轮询多麻烦啊--------------------------------------------------------------------------------这个,我们就是这样做的 - -!
    不过现在的基本都是SQL Server确发生成XML,前台直接读XML数据了
      

  7.   

    truecoffeefox(咖啡狐) 我习惯用EntLib,比如
    infoCacheManager.Add(CacheKey, objObject, 缓存优先级, new InfoCacheItemRefreshAction(),失效时间刻度);里边的InfoCacheItemRefreshAction是刷新缓存
     public class InfoCacheItemRefreshAction : ICacheItemRefreshAction
        {
            public void Refresh(string key, object expiredValue, CacheItemRemovedReason removalReason)
            {
                处理
            }
        }
    -------------------------------------------------------------------
    处理的内容是什么呢,InfoCacheItemRefreshAction 具体怎么使用?
      

  8.   

    EntLib没听说过适当的应用缓存
      

  9.   

    一般情况下,插入,更新,删除时,因依赖关系,缓存会被自动释放掉,能不能实现数据库某条记录变动后,缓存中修改相应记录?
    ——————————————————————————————————————————
    显然应该第一次(释放掉内容后第一次)读取时才读取(修改),这才叫做缓存吗。否则,就直接成了触发器了。即使是触发器,关于读取数据重新保存的代码也可能需要你来写,我看不出asp.net项目组有什么高招能够聪明地在不知你的程序设计细节的情况下代替你读取数据。对于一些可以办到的地方,asp.net已经逐渐办到了。例如SqlDataSource一旦启用缓存,就会在自动读取数据库来刷新当前页面内的记录行,因为它知道你的SelectCommand属性了嘛。对于ObjectDataSource,以及其它一些类型的控件,asp.net也是这样自动更新缓存数据的。因为这些控件水平相对不高(假设你的要求很高),这些控件都严格限制了操作细节。如果你已经熟练地用了这些控件,还不够,你还可以自己仿照它们的控制逻辑设计自己的控件。多用高级的控件,少往低级的编程方面设计(但是你要精通它们以便自己创造高级的东西),能用来点石成金的东西就会越来越多。
      

  10.   

    还有,我的缓存方法是:
    1.将A表记录全部读取出来放入缓存
    2.按页面搜索条件的不同,启用DefaultView的RowFilter筛选条件
    这种方式,在记录集不多的情况下还可以,但数据量大了以后,启用DefaultView的速度就很慢很慢.
    是否有更好的办法实现筛选?
    由于页面中搜索条件有好几个,所以只能先将全部数据读出放入内存中,然后靠筛选了,不知有没有更好的办法?
    ————————————————————————————————————————
    应该把 RowFilter 作为被缓存数据的关键key中的主要组成部分,在Cache中仅保存筛选出的部分数据(例如只有20条记录),不能保存“整个表”这么庞大。如果你以为把整个表读到内存就节省内存了,以为根据筛选条件为数据块缓存就有很多“重复”数据于是就浪费内存了?90%以上的情况下这是错误的、没有仔细推算的理由。
      

  11.   

    重载一个EntLib中的内存失效机制,自己建立刷新器和存储过程来检视关键表的动作。如果有修改则失效其缓存。然后重读。别用时间过期模式。很原始。不灵活。