博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转贴:Cache 总结
阅读量:7219 次
发布时间:2019-06-29

本文共 1960 字,大约阅读时间需要 6 分钟。

原文链接:

 

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. }

转载于:https://www.cnblogs.com/binzhou75/archive/2012/11/16/2773507.html

你可能感兴趣的文章
一致性hash算法
查看>>
lua + redis 的去重队列
查看>>
web负载均衡(ipvsadm)(未成)
查看>>
抓取存储quota超过80%的users
查看>>
C语言经典算法100例
查看>>
速成CAD版本转换的教程
查看>>
CAD文件图纸过大,该怎么解决?
查看>>
Spring aop 切不进去原因。。
查看>>
PHP获取客户端IP
查看>>
php开发APP接口-封装通信接口改进版
查看>>
Android系统性能演变历程
查看>>
OSChina 周三乱弹 —— 打醒精神去瞌睡
查看>>
SSH 密钥登录linux
查看>>
你必须掌握的 21 个 Java 核心技术!
查看>>
告诉你WHT中文站是什么?
查看>>
4、Juniper SSG520 PPTP映射到ROS后MAC无法连接解决方法
查看>>
利用批处理文件来建立一个记录3389登陆者信息
查看>>
Linux 系统下双机HA的实现
查看>>
02_swarm mode key concepts
查看>>
Eclipse打包插件Fat Jar 解压打包
查看>>