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();
}
}
缓存尽量在数据量小、重复查询量大的情况下使用。因为缓存也是要耗内存的,服务器内存是有限的!