缓存的概念及优缺点在这里就不多做介绍,当然缓存包含多种有普通缓存、客户端缓存、DNS缓存、反向代理缓存以及分布式缓存等等。今天主要聊一聊C#通过编码来实现普通的缓存、话不多说直接上代码。
一、首先,新建控制台程序(.NET Core)、以下为项目结构
- CacheHelper缓存帮助类
- DemoTest 为测试有无缓存的Demo代码
- Program 你们懂得 就不多说了
二、编写缓存类
public class CacheHelper
{
//缓存容器
private static Dictionary<string, object> CacheDictionary = new Dictionary<string, object>();
/// <summary>
/// 添加缓存
/// </summary>
public static void Add(string key, object value)
{
CacheDictionary.Add(key, value);
}
/// <summary>
/// 获取缓存
/// </summary>
public static T Get <T>(string key)
{
return (T)CacheDictionary[key];
}
/// <summary>
/// 缓存获取方法
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">缓存字典容器对应key</param>
/// <param name="func">委托方法 传入操作对象</param>
/// <returns></returns>
public static T GetCache<T>(string key, Func<T> func)
{
T t = default(T);
if (CacheHelper.Exsits(key))
{
//缓存存在,直接获取原数据
t = CacheHelper.Get<T>(key);
}
else
{
//缓存不存在,去生成缓存,并加入容器
t = func.Invoke();
CacheHelper.Add(key, t);
}
return t;
}
/// <summary>
/// 判断缓存是否存在
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static bool Exsits(string key)
{
return CacheDictionary.ContainsKey(key);
}
public static T GetCache<T>(string key, Func<T> func)
我这里直接使用泛型委托封装了缓存的方法了。当然你也可以不封装直接使用if else 判断
if (CacheHelper.Exsits(key)){} else{}
但是实际开发使用缓存应该不是一个地方使用缓存、频繁的使用if else 判断代码有点冗余、所有我就使用采用泛型委托方式封装方法 这个大家可以自行选择
以上一般采用静态字典添加缓存数据、为了有更好的兼容性我这里直接采用泛型(泛型的好处这里就不多说了、总之性能相对更好、能够提高代码的重用性)
三、编写有缓存和没有缓存方法
public class DemoTest
{
/// <summary>
/// 使用缓存测试
/// </summary>
/// <param name="count"></param>
/// <returns></returns>
public static List<People> CacheTest(int count)
{
People people = new People();
List<People> ListPeople = new List<People>();
for (int i = count; i < 100000; i++)
{
Console.WriteLine($"------第{i}次请求------");
//int result = DataSource.GetDataByDB(666);
//key的名字一定要确保请求的准确性 DataSource GetDataByDB 666缺一不可
string key = "DataSource_GetDataByDB_666";
ListPeople = CacheHelper.GetCache(key, () => DemoTest.GetListData());
Console.WriteLine($"第{i}次请求获得的数据为:{people}");
}
return ListPeople;
}
/// <summary>
/// 没有使用缓存
/// </summary>
/// <param name="count"></param>
/// <returns></returns>
public static List<People> NoCacheTest(int count)
{
People people = new People();
List<People> ListPeople = new List<People>();
for (int i = count; i < 100000; i++)
{
Console.WriteLine($"------第{i}次请求------");
//int result = DataSource.GetDataByDB(666);
//key的名字一定要确保请求的准确性 DataSource GetDataByDB 666缺一不可
string key = "DataSource_GetDataByDB_666";
//if (CacheHelper.Exsits(key))
//{
// //缓存存在,直接获取原数据
// result = CacheHelper.Get<int>(key);
/
沃梦达教程
本文标题为:详解C#中普通缓存的使用
猜你喜欢
- Unity Shader实现模糊效果 2023-04-27
- 在C# 8中如何使用默认接口方法详解 2023-03-29
- Unity3D实现渐变颜色效果 2023-01-16
- c# 模拟线性回归的示例 2023-03-14
- user32.dll 函数说明小结 2022-12-26
- WPF使用DrawingContext实现绘制刻度条 2023-07-04
- .NET CORE DI 依赖注入 2023-09-27
- C# 使用Aspose.Cells 导出Excel的步骤及问题记录 2023-05-16
- 如何使用C# 捕获进程输出 2023-03-10
- Oracle中for循环的使用方法 2023-07-04