zoukankan      html  css  js  c++  java
  • 转贴:Cache 总结

    原文链接:http://blog.csdn.net/collinye/article/details/2808613

    Cache过期策略

         1. 永不过期。和Application一样,缓存永不过期。

            代码:(永不过期。直接赋值缓存的Key和Value即可)

    1. DataSet ds = GetData();
    2. Cache.Insert("Data", ds);

        2. 绝对时间过期。缓存在某一时间过期,比如5分钟后。

           绝对时间过期。DateTime.Now.AddSeconds(10)表示缓存在10秒后过期,TimeSpan.Zero表示不使用平滑过期策略。

    1. DataSet ds = GetData();
    2. Cache.Insert("Data", ds,null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);

        3.变化时间过期(平滑过期)。缓存在某一时间内未访问则超时过期,这个和Session有点类似,比如我们可以设定缓存5分钟没有人访问则过期。

        变化时间过期(平滑过期)。DateTime.MaxValue表示不使用绝对时间过期策略,TimeSpan.FromSeconds(10)表示缓存连续10秒没有访问就过期。

    1. DataSet ds = GetData();
    2. Cache.Insert("Data", ds, null, DateTime.MaxValue, TimeSpan.FromSeconds(10));

        4.依赖过期。缓存依赖于数据库中的数据或者文件中的内容。一旦数据库中某些表的数据发生变动或者文件内容发生变动,则缓存自动过期。

        代码:文件依赖(修改文件时就更新缓存)

    1. CacheDependency cd = new CacheDependency(Server.MapPath("test.txt"));
    2. DataSet ds = GetData();
    3. Cache.Insert("Data", ds, cd);

    缓存过期后我们就要更新缓存了,ASP.NET提供了两种更新策略。

        1.被动更新。缓存过期以后手动进行更新。

             在Web程序中我们通常会使用被动更新。所谓被动更新,就是在调用数据的时候判断缓存是否为空,如果为空则先更新缓存然后再从缓存中读取数据,如果不为空则直接从缓存中读取数据。

    代码:

    1.  if (Cache["Data"] == null)
    2.     {
    3.         ds = GetData();
    4.         Cache.Insert("Data", ds, null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);
    5.     }
    6.     else
    7.     {
    8.         ds = Cache["Data"as DataSet;
    9.     }

        2.主动更新。缓存过期以后在回调方法中更新。

            如果没有人访问数据缓存是不会更新的,只有缓存被 访问的时候发现缓存无效才会去更新。这样很明显的一个缺点就是,如果缓存过期了更新操作将花费很长时间,这个时候的查询也需要花费很多时间。我们可以利用 缓存的回调功能让缓存过期后自动续建实现自动更新的目的

    1.  DataSet ds = GetData();
    2.  Cache.Insert("Data", ds, null, DateTime.Now.AddSeconds(10), TimeSpan.Zero,
    3.  CacheItemPriority.Default, CacheRemovedCallback);
    1. //代码说明:
    2. //最后一个参数表明缓存被移除以后自动调用CacheRemovedCallback()方法,方法实现如下。
    3. private void CacheRemovedCallback(String key, object value, CacheItemRemovedReason 
    4. removedReason)
    5. {
    6.     DataSet ds = GetData();
    7.     Cache.Insert(key, ds, null, DateTime.Now.AddSeconds(10), TimeSpan.Zero, CacheItemPriority.
    8.     Default, CacheRemovedCallback);
    9. }

    最后就是移除Cache

    1.移除一个:Cache.Remove(key);

    2.移除所有:

    • IDictionaryEnumerator CacheEnum = HttpRuntime.Cache.GetEnumerator();
    • while (CacheEnum.MoveNext())
    • {
    •     Cache.Remove(CacheEnum.Key.ToString());
    1. }
  • 相关阅读:
    区块链技术赋能证券业 多家券商业务率先“上链”
    分布式金融的基础设施:如何驱动主流采用?
    回顾|2019年中国金融科技行业研究报告
    智能投顾行业深度报告:技术为镐,蓝海掘金
    毕马威举办2019中国领先金融科技企业50颁奖典礼
    智能投顾监管半年考:牌照合规 接受度仍待考验
    PostgreSQL串行化隔离级别(SSI)的能力与实现
    邹传伟:对人民银行DC/EP的初步分析
    央行辟谣未发行“DC/EP”和“DCEP” 法定数字货币仍在测试阶段
    php进程daemon化的正确做法
  • 原文地址:https://www.cnblogs.com/binzhou75/p/2773507.html
Copyright © 2011-2022 走看看