zoukankan      html  css  js  c++  java
  • WisDom.Net 框架设计(三) 数据缓存

    WisDom.Net  --数据缓存

    1.几种缓存方式

          1.静态全局变量

             C#静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问一个类的所有实例的同一C#静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值。静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。

          2.System.Runtime.Caching 中缓存类库

            这个是.Net 4.0新出的一个命名空间,提供缓存对所有 .NET framework 应用程序 (而不仅仅是 ASP.NET) 进行访问,高速缓存是可扩展的。您   可以创建自定义高速缓存提供程序。例如,您可以不使用默认的内存高速缓存引擎,而是创建自定义提供程序,在数据库、自定义对象或文件系统中存储高速缓存数据。具体参见MSDN.这里不展开讲

          3.页面缓存,(显然这里不合适)

    2.WisDom.net.DataCahce 设计构想

         

    1.我们设计数据缓存基类如下。这里使用模板模式(附上基类的代码希望大家指正)

     public abstract class DataCacheCoomon<T>
        {
            protected  List<T> DataCacheDict = null;
            private static object _obj = new object();
    
            public  DataCacheCoomon()
            {
                if (DataCacheDict==null||DataCacheDict.Count == 0)
                {
                    lock (_obj)
                    {
                        if (DataCacheDict == null || DataCacheDict.Count == 0)
                        {
                            DataCacheDict = new List<T>();
                            GetDataFromDb();
                        }
                    }
                }
            }
    
            protected abstract void GetDataFromDb();
    
    
            /// <summary>
            /// 增加数据缓存
            /// </summary>
            /// <param name="dataItem"></param>
            public void AddDataCache(List<T> dataItem)
            {
                foreach (T data in dataItem)
                {
                    DataCacheDict.Add(data);
                }
            }
    
            /// <summary>
            /// 删除数据缓存
            /// </summary>
            /// <param name="dataItem"></param>
            public void DelDataCache(List<T> dataItem)
            {
                foreach (T data in dataItem)
                {
                    DataCacheDict.Remove(data);
                }
            }
    
            /// <summary>
            /// 获取字典缓存
            /// </summary>
            /// <returns></returns>
            public List<T> GetDataCacheDict()
            {
                return DataCacheDict;
            }
    
            
        }

     

     2.在具体某个缓存项目时都需要继承上面的基类

     3. 使用并行方式将数据加到MemoryCache  中 示例如下(一个简单的例子给大家参考,)从缓存中获取

       

         ObjectCache objectCache = MemoryCache.Default;//
    
    
    
    
                Parallel.Invoke(() =>
                {
                    CacheItem Iten = new CacheItem("aaa", 1);
                    objectCache.Add(Iten, new CacheItemPolicy());
                },
                      () =>
                      {
                          CacheItem Iten = new CacheItem("Bbb", 1);
                          objectCache.Add(Iten, new CacheItemPolicy());
                      });

     

     

        

       

     

     

     

     

     

  • 相关阅读:
    01 网络基础
    01 ansible的基本介绍
    10 面向对象的编程
    03 docker容器镜像基础
    09 异常处理
    08 输入输出
    07 数据结构
    02 docker的基本用法
    01 docker容器技术基础入门
    06 字符串
  • 原文地址:https://www.cnblogs.com/crystal189/p/3680076.html
Copyright © 2011-2022 走看看