c# 缓存 简单概念

1)什么是缓存

   如果之前有输入这个数据,可以直接取出 。不用再次输入 如QQ登入。。。。

  2)简单的概念 方便理解

     1  创建一个操作缓存的类

  

class CacheHelper
    {

        /// <summary>
        /// 缓存的操作类
        /// </summary>
        /// 声明一个字典 用于存储数据
        private static Dictionary<string, object> CacheDictionary = new Dictionary<string, object>();
        //添加数据
        public static void Add(string key, object value)
        {
            CacheDictionary.Add(key, value);

        }
        //用 Key 查找数据
        public static T Get<T>(string key)
        {
            return (T)CacheDictionary[key];
        }
        //是否存在数据
        public static bool Exsits(string key)
        {
            return CacheDictionary.ContainsKey(key);
        }
        /// <summary>
        /// 缓存的获取的方法
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <param name="func"></param>
        /// <returns></returns>
        public static T GetCache<T>(string key, Func<T> func)
        {
            T t = default(T);
            if (Exsits(key))
            {
                //缓存存在,直接获取原数据
                t =Get<T>(key);
            }
            else
            {
                //缓存不存在,去生成缓存,并加入容器
                t = func.Invoke();
                Add(key, t);
            }
            return t;
        }
    }

  

     2创建一个方法模仿数据写入

 class DB
    {
        public static int GetDataDB(int count)
        {

            Console.WriteLine("--------GetDataByDB---------");
            int result = 0;
            for (int i = count; i < 999999; i++)
            {
                result+= i;
            }
            Thread.Sleep(2000);
            return result;
        }


    }

  

     3调用

  class Program
    {
        
        static void Main(string[] args)
        {
            for (int i = 1; i < 6; i++)
            {
                Console.WriteLine($"------第{i}次请求------");
                int result = 0;
                //key的名字一定要确保请求的准确性 DataSource GetDataByDB 666缺一不可
                string key = "DataSource_GetDataByDB_666";

                //将需要执行的获取数据操作编写成委托传入方法(重点)
                //Func<int> func = new Func<int>(() => { return DataSource.GetDataByDB(666); });

                result = CacheHelper.GetCache(key, () => DB.GetDataDB(666));
                Console.WriteLine($"第{i}次请求获得的数据为:{result}");
            }
            Console.ReadLine();
        }


    }

  缓存尽量在数据量小、重复查询量大的情况下使用。因为缓存也是要耗内存的,服务器内存是有限的!

 

posted @ 2020-03-25 18:57  子小子小  阅读(349)  评论(0编辑  收藏  举报