using System;
using Microsoft.Extensions.Caching.Memory;
namespace Yus.Net.Utility.Cache
{
public class MemoryCacheUtility
{
public static MemoryCache Caches = new MemoryCache(new MemoryCacheOptions());
/// <summary>
/// 验证缓存项是否存在
/// </summary>
/// <param name="key">缓存Key</param>
/// <returns></returns>
public static bool Exists(string key)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
object cached;
return Caches.TryGetValue(key, out cached);
}
/// <summary>
/// 刷新缓存
/// </summary>
public static void EmptyClear()
{
Caches.Dispose();
Caches = new MemoryCache(new MemoryCacheOptions());
}
/// <summary>
/// 获取缓存
/// </summary>
/// <param name="key">缓存Key</param>
/// <returns></returns>
public static object Get(string key)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
return Caches.Get(key);
}
/// <summary>
/// 添加缓存
/// </summary>
/// <param name="key">缓存Key</param>
/// <param name="value">缓存Value</param>
/// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
/// <param name="expireAbsolute">绝对过期时长</param>
/// <returns></returns>
public static bool AddMemoryCache(string key, object value, TimeSpan expiresSliding, TimeSpan expireAbsolute)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
Caches.Set(key, value,
new MemoryCacheEntryOptions()
.SetSlidingExpiration(expiresSliding)
.SetAbsoluteExpiration(expireAbsolute)
);
return Exists(key);
}
/// <summary>
/// 添加缓存
/// </summary>
/// <param name="key">缓存Key</param>
/// <param name="value">缓存Value</param>
/// <returns></returns>
public static bool AddMemoryCache(string key, object value)
{
if (key == null)
{
throw new ArgumentNullException(nameof(key));
}
if (value == null)
{
throw new ArgumentNullException(nameof(value));
}
Caches.Set(key, value);
return Exists(key);
}
}
}