提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
在开发应用程序时,很多时候我们需要频繁地从数据库、API 或文件等地方读取数据。每次都去获取这些数据可能会很耗时,并且会增加系统负担。为了解决这个问题,我们可以使用缓存
一、MemoryCache缓存的使用
引入库
项目中添加System.Runtime.Caching引用
如果没有需要去NuGet安装System.Runtime.Caching包
二、System.Runtime.Caching 简介
System.Runtime.Caching 是 .NET 提供的一个缓存类库,它支持将数据存储在内存中,并提供缓存的管理功能。这里的核心组件是 MemoryCache,它是缓存的实际实现
-
ObjectCache 是缓存的基类,定义了缓存操作的基本功能。
-
MemoryCache 是 ObjectCache 的一个具体实现,用于管理内存缓存。
-
MemoryCache.Default 是一个默认的缓存实例,我们通常通过它来操作缓存数据。
三、CacheHelper 类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.Caching;
namespace Common
{
public class CacheHelper
{
/// <summary>
/// •ObjectCache 是 MemoryCache 的基类,MemoryCache.Default 是默认的内存缓存实例。
/// •Cache 是一个静态只读字段,表示应用程序的默认内存缓存。
/// </summary>
private static readonly ObjectCache Cache = MemoryCache.Default;
/// <summary>
/// •将一个键值对添加到缓存中
/// </summary>
/// <param name="key">缓存项的键,用于唯一标识缓存项</param>
/// <param name="value">要缓存的对象</param>
public static void Add(string key, object value)
{
try
{
if (value == null)
{
return;
}
Cache.Add(key, value, null);
}
catch (Exception ex)
{
throw;
}
}
/// <summary>
/// •从缓存中获取指定键的值,并将其转换为指定类型 T
/// </summary>
/// <typeparam name="T">T 是一个泛型类型参数,表示返回值的类型</typeparam>
/// <param name="key">缓存项的键</param>
/// <returns></returns>
/// <exception cref="ArgumentNullException"></exception>
public static T Get<T>(string key)
{
try
{
if (string.IsNullOrEmpty(key))
{
throw new ArgumentNullException(nameof(key), "Key cannot be null or empty");
}
object cachedObject = Cache.Get(key);
if (cachedObject == null)
{
//类型的默认值(例如,int 的默认值是 0,string 的默认值是 null)
return default(T);
}
return (T)cachedObject;
}
catch (Exception)
{
return default(T);
}
}
/// <summary>
/// • 检查缓存中是否存在指定键的值。
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public static bool Contains(string key)
{
try
{
if (string.IsNullOrEmpty(key))
{
return false;
}
return Cache.Contains(key);
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 从缓存中移除指定键的值
/// </summary>
/// <param name="key"></param>
public static void Remove(string key)
{
try
{
if (string.IsNullOrEmpty(key))
{
return;
}
Cache.Remove(key);
}
catch (Exception ex)
{
throw;
}
}
}
}