1
This commit is contained in:
95
iMES.Core/CacheManager/IService/ICacheService.cs
Normal file
95
iMES.Core/CacheManager/IService/ICacheService.cs
Normal file
@@ -0,0 +1,95 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace iMES.Core.CacheManager
|
||||
{
|
||||
public interface ICacheService : IDisposable
|
||||
{
|
||||
/// <summary>
|
||||
/// 验证缓存项是否存在
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
bool Exists(string key);
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// List写入head
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="val"></param>
|
||||
void LPush(string key, string val);
|
||||
|
||||
void RPush(string key, string val);
|
||||
/// <summary>
|
||||
/// List出队 lpop
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
object ListDequeue(string key);
|
||||
|
||||
/// <summary>
|
||||
/// List出队 lpop
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <returns></returns>
|
||||
T ListDequeue<T>(string key) where T : class;
|
||||
|
||||
/// <summary>
|
||||
/// 移除list中的数据,keepIndex为保留的位置到最后一个元素如list 元素为1.2.3.....100
|
||||
/// 需要移除前3个数,keepindex应该为4
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="keepIndex"></param>
|
||||
void ListRemove(string key, int keepIndex);
|
||||
|
||||
/// <summary>
|
||||
/// 添加缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <param name="value">缓存Value</param>
|
||||
/// <param name="expiresIn">缓存时长</param>
|
||||
/// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间) //new TimeSpan(0, 60, 0);</param>
|
||||
/// <returns></returns>
|
||||
bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false);
|
||||
|
||||
bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false);
|
||||
|
||||
/// <summary>
|
||||
/// 删除缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
bool Remove(string key);
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 批量删除缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key集合</param>
|
||||
/// <returns></returns>
|
||||
void RemoveAll(IEnumerable<string> keys);
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
T Get<T>(string key) where T : class;
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
string Get(string key);
|
||||
}
|
||||
}
|
||||
189
iMES.Core/CacheManager/Service/MemoryCacheService .cs
Normal file
189
iMES.Core/CacheManager/Service/MemoryCacheService .cs
Normal file
@@ -0,0 +1,189 @@
|
||||
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace iMES.Core.CacheManager
|
||||
{
|
||||
public class MemoryCacheService : ICacheService
|
||||
{
|
||||
protected IMemoryCache _cache;
|
||||
public MemoryCacheService(IMemoryCache cache)
|
||||
{
|
||||
_cache = cache;
|
||||
|
||||
}
|
||||
/// <summary>
|
||||
/// 验证缓存项是否存在
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
public bool Exists(string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(key));
|
||||
}
|
||||
return _cache.Get(key) != null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 添加缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <param name="value">缓存Value</param>
|
||||
/// <returns></returns>
|
||||
public bool Add(string key, object value)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(key));
|
||||
}
|
||||
if (value == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(value));
|
||||
}
|
||||
_cache.Set(key, value);
|
||||
return Exists(key);
|
||||
}
|
||||
|
||||
public bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false)
|
||||
{
|
||||
if (expireSeconds != -1)
|
||||
{
|
||||
_cache.Set(key,
|
||||
value,
|
||||
new MemoryCacheEntryOptions()
|
||||
.SetSlidingExpiration(new TimeSpan(0, 0, expireSeconds))
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
_cache.Set(key, value);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
public bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false)
|
||||
{
|
||||
return AddObject(key, value, expireSeconds, isSliding);
|
||||
}
|
||||
public void LPush(string key, string val)
|
||||
{
|
||||
}
|
||||
public void RPush(string key, string val)
|
||||
{
|
||||
}
|
||||
public T ListDequeue<T>(string key) where T : class
|
||||
{
|
||||
return null;
|
||||
}
|
||||
public object ListDequeue(string key)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
public void ListRemove(string key, int keepIndex)
|
||||
{
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <param name="value">缓存Value</param>
|
||||
/// <param name="expiresSliding">滑动过期时长(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
|
||||
/// <param name="expiressAbsoulte">绝对过期时长</param>
|
||||
/// <returns></returns>
|
||||
public bool Add(string key, object value, TimeSpan expiresSliding, TimeSpan expiressAbsoulte)
|
||||
{
|
||||
_cache.Set(key, value,
|
||||
new MemoryCacheEntryOptions()
|
||||
.SetSlidingExpiration(expiresSliding)
|
||||
.SetAbsoluteExpiration(expiressAbsoulte)
|
||||
);
|
||||
|
||||
return Exists(key);
|
||||
}
|
||||
/// <summary>
|
||||
/// 添加缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <param name="value">缓存Value</param>
|
||||
/// <param name="expiresIn">缓存时长</param>
|
||||
/// <param name="isSliding">是否滑动过期(如果在过期时间内有操作,则以当前时间点延长过期时间)</param>
|
||||
/// <returns></returns>
|
||||
public bool Add(string key, object value, TimeSpan expiresIn, bool isSliding = false)
|
||||
{
|
||||
if (isSliding)
|
||||
_cache.Set(key, value,
|
||||
new MemoryCacheEntryOptions()
|
||||
.SetSlidingExpiration(expiresIn)
|
||||
);
|
||||
else
|
||||
_cache.Set(key, value,
|
||||
new MemoryCacheEntryOptions()
|
||||
.SetAbsoluteExpiration(expiresIn)
|
||||
);
|
||||
|
||||
return Exists(key);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 删除缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
public bool Remove(string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(key));
|
||||
}
|
||||
_cache.Remove(key);
|
||||
|
||||
return !Exists(key);
|
||||
}
|
||||
/// <summary>
|
||||
/// 批量删除缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key集合</param>
|
||||
/// <returns></returns>
|
||||
public void RemoveAll(IEnumerable<string> keys)
|
||||
{
|
||||
if (keys == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(keys));
|
||||
}
|
||||
|
||||
keys.ToList().ForEach(item => _cache.Remove(item));
|
||||
}
|
||||
public string Get(string key)
|
||||
{
|
||||
return _cache.Get(key)?.ToString();
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
public T Get<T>(string key) where T : class
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(key));
|
||||
}
|
||||
return _cache.Get(key) as T;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_cache != null)
|
||||
_cache.Dispose();
|
||||
GC.SuppressFinalize(this);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
119
iMES.Core/CacheManager/Service/RedisCacheService.cs
Normal file
119
iMES.Core/CacheManager/Service/RedisCacheService.cs
Normal file
@@ -0,0 +1,119 @@
|
||||
using CSRedis;
|
||||
using Newtonsoft.Json;
|
||||
using StackExchange.Redis;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using iMES.Core.Configuration;
|
||||
using iMES.Core.Const;
|
||||
|
||||
namespace iMES.Core.CacheManager
|
||||
{
|
||||
public class RedisCacheService : ICacheService
|
||||
{
|
||||
public RedisCacheService()
|
||||
{
|
||||
var csredis = new CSRedisClient(AppSetting.RedisConnectionString);
|
||||
RedisHelper.Initialization(csredis);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 验证缓存项是否存在
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
public bool Exists(string key)
|
||||
{
|
||||
if (key == null)
|
||||
{
|
||||
throw new ArgumentNullException(nameof(key));
|
||||
}
|
||||
return RedisHelper.Exists(key);
|
||||
}
|
||||
|
||||
public void LPush(string key, string val)
|
||||
{
|
||||
RedisHelper.LPush(key, val);
|
||||
}
|
||||
|
||||
public void RPush(string key, string val)
|
||||
{
|
||||
RedisHelper.RPush(key, val);
|
||||
}
|
||||
|
||||
public T ListDequeue<T>(string key) where T : class
|
||||
{
|
||||
string value = RedisHelper.RPop(key);
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return null;
|
||||
return JsonConvert.DeserializeObject<T>(value);
|
||||
}
|
||||
public object ListDequeue(string key)
|
||||
{
|
||||
string value = RedisHelper.RPop(key);
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return null;
|
||||
return value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 移除list中的数据,keepIndex为保留的位置到最后一个元素如list 元素为1.2.3.....100
|
||||
/// 需要移除前3个数,keepindex应该为4
|
||||
/// </summary>
|
||||
/// <param name="key"></param>
|
||||
/// <param name="keepIndex"></param>
|
||||
public void ListRemove(string key, int keepIndex)
|
||||
{
|
||||
RedisHelper.LTrim(key, keepIndex, -1);
|
||||
}
|
||||
public bool Add(string key, string value, int expireSeconds = -1, bool isSliding = false)
|
||||
{
|
||||
return RedisHelper.Set(key, value, expireSeconds);
|
||||
}
|
||||
public bool AddObject(string key, object value, int expireSeconds = -1, bool isSliding = false)
|
||||
{
|
||||
return RedisHelper.Set(key, value, expireSeconds);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
public bool Remove(string key)
|
||||
{
|
||||
RedisHelper.Del(key);
|
||||
return true;
|
||||
}
|
||||
/// <summary>
|
||||
/// 批量删除缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key集合</param>
|
||||
/// <returns></returns>
|
||||
public void RemoveAll(IEnumerable<string> keys)
|
||||
{
|
||||
RedisHelper.Del(keys.ToArray());
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
public T Get<T>(string key) where T : class
|
||||
{
|
||||
return RedisHelper.Get<T>(key);
|
||||
}
|
||||
/// <summary>
|
||||
/// 获取缓存
|
||||
/// </summary>
|
||||
/// <param name="key">缓存Key</param>
|
||||
/// <returns></returns>
|
||||
public string Get(string key)
|
||||
{
|
||||
return RedisHelper.Get(key);
|
||||
}
|
||||
public void Dispose()
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user