• Cache_MemoryCache_1简介


    1.ASP.NET GitHub地址:https://github.com/aspnet

    2.ASP.NET Core缓存 MemoryCache 和 Redis

    1.MemoryCache简介

      内存缓存。

      区别:缓存HttpRuntime.Cache 位于System.Web命名空间下。 但是在 ASP.NET Core中System.Web已经不存在。

    2.MemoryCacheManager

      

      public class MemoryCacheManager:ICacheManager
      {
        public void Set(string key,object value,TimeSpan cacheTime){
          MemoryCache.Default.Add(key,value,new CacheItemPolicy{SlidingExpireation=cacheTime});
        }
        public T Get<T>(string key){
          return (T)MemoryCache.Default.Get(key);
        }
        public bool Contains(string key){
          return MemoryCache.Default.Contains(key);
        }
        public void Remove(string key){
          MemoryCache.Default.Remove(key);
        }
        public void Clear(){
          foreach(var item in MemoryCache.Default){
          this.Remove(item.Key);
        }
      }

    2..为了减少磁盘的读取次数,提高程序性能,将频繁读取的配置文件缓存到内存中,加速配置的读取。并且,在磁盘的配置文件更改后,更新缓存。

    //获取内存缓存中的配置字典,如果不存在,读取字典,存入缓存中。

    private Dictionary<string,string> GetConfigDictionary(string cacheKey){

      Dictionary<string,string> configs=null;

      ObjectCache cache=MemoryCache.Default;

      if(cache.Contains(cacheKey)){

        return cache.GetCacheItem(cacheKey).Value as Dictionary<string,string>;

      }else{

        configs=GetFormXml();

        //判断是否读取到内容

        if(configs!=null){

          //新建一个策略对象,该对象用于声明配置 对象在缓存中的处理策略

          CacheItemPolicy policy=new CacheItemPolicy();

          //因为配置文件要一直读取,因为在此设置优先级为不删除

          policy.Priority=CacheItemPolicy.NotRemovable;

          //Set方法,会先检查是否存在key ,如果存在,更新value,不存在则创建。

          //这里先加入再加入缓存原因,在缓存加入时,也会触发监视事件,会导致出错。

          cache.Set(cacheKey,configs,policy);

          //新建一个文件监视器对象,添加对资源文件的监视

          List<string> filePaths=new List<string>(){"c:/config.xml"};

          HostFileChangeMonitor monitor=new HostFileChangeMonitor(filePaths);

          //调用监视器的NotifyOnChanged方法,传入发生改变时的回调方法

          monitor.NotifyOnChanged(new OnChangedCallback(o=>{

            cache.Remove(key);

          }));

          policy.ChangeMonitors.Add(monitor);

        }

      }

      return configs;

    }

  • 相关阅读:
    包含了访问命名服务的类和接口
    JNDI架构提供了一组标准的独立于命名系统的API
    利用JNDI的命名与服务功能来满足企业级API对命名与服务的访问
    JNDI(Java Naming and Directory Interface,Java命名和目录接口)
    Servlet 国际化
    重要的调试技巧
    使用 JDB 调试器
    Servlet 调试
    Servlet 打包部署
    编译包中的 Servlet
  • 原文地址:https://www.cnblogs.com/sujingnuli/p/9052425.html
Copyright © 2020-2023  润新知