添加项目文件。

This commit is contained in:
fuenmao
2025-09-29 13:48:36 +08:00
parent f61e922f0c
commit 5dc1780ef1
407 changed files with 63703 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
{
//缓存设置
"CacheSettings": {
"UseRedis": false, //启用redis
"RedisSettings": {
"Address": "127.0.0.1:6379", //地址
"Password": "123456", //Redis服务密码
"Db": 9, //默认库
"ClearRedis": true //是否每次启动都清除Redis缓存
}
}
}
+12
View File
@@ -0,0 +1,12 @@
{
//缓存设置
"CacheSettings": {
"UseRedis": false, //启用redis
"RedisSettings": {
"Address": "127.0.0.1:6379", //地址
"Password": "123456", //Redis服务密码
"Db": 9, //默认库
"ClearRedis": true //是否每次启动都清除Redis缓存
}
}
}
+19
View File
@@ -0,0 +1,19 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
global using MoYu;
global using Masuit.Tools;
global using Microsoft.AspNetCore.Builder;
global using Microsoft.AspNetCore.Hosting;
global using Microsoft.Extensions.DependencyInjection;
global using NewLife.Caching;
global using NewLife.Serialization;
global using SimpleAdmin.Core;
global using SimpleRedis;
@@ -0,0 +1,70 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
namespace SimpleAdmin.Cache;
/// <summary>
/// 缓存服务
/// </summary>
public partial interface ISimpleCacheService
{
/// <summary>
/// 添加一条数据到HashMap
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="hashKey">hash列表里的Key</param>
/// <param name="value">值</param>
void HashAdd<T>(string key, string hashKey, T value);
/// <summary>
/// 添加多条数据到HashMap
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="dic">键值对字典</param>
/// <returns></returns>
bool HashSet<T>(string key, Dictionary<string, T> dic);
/// <summary>
/// 从HashMap中删除数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="fields">hash键列表</param>
/// <returns>执行结果</returns>
int HashDel<T>(string key, params string[] fields);
/// <summary>
/// 根据键获取hash列表中的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="fields">hash键列表</param>
/// <returns>数据列表</returns>
List<T> HashGet<T>(string key, params string[] fields);
/// <summary>
/// 根据键获取hash列表中的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="field">hash键</param>
/// <returns></returns>
T HashGetOne<T>(string key, string field);
/// <summary>
/// 获取所有键值对
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <returns>数据字典</returns>
IDictionary<string, T> HashGetAll<T>(string key);
}
@@ -0,0 +1,108 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
using NewLife.Caching.Queues;
namespace SimpleAdmin.Cache;
/// <summary>
/// 缓存服务
/// </summary>
public partial interface ISimpleCacheService
{
#region 普通队列
/// <summary>
/// 添加到队列
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="value">值数组</param>
/// <returns>添加数量</returns>
int AddQueue<T>(string key, T[] value);
/// <summary>
/// 添加到队列
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <returns>添加数量</returns>
int AddQueue<T>(string key, T value);
/// <summary>
/// 获取队列实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <returns>队列实例</returns>
RedisQueue<T> GetRedisQueue<T>(string key);
/// <summary>
/// 从队列中获取数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="Count">数量</param>
/// <returns>数据列表</returns>
List<T> GetQueue<T>(string key, int Count = 1);
/// <summary>
/// 取一条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="timeout">阻塞时间</param>
/// <returns>数据</returns>
T GetQueueOne<T>(string key, int timeout = 1);
/// <summary>
/// 异步取一条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="timeout">阻塞时间</param>
/// <returns>数据</returns>
Task<T> GetQueueOneAsync<T>(string key, int timeout = 1);
#endregion
#region 延迟队列
/// <summary>
/// 添加一条数据到延迟队列
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="delay">延迟时间</param>
/// <returns>添加成功数量</returns>
int AddDelayQueue<T>(string key, T value, int delay);
/// <summary>
/// 批量添加数据到延迟队列
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="delay">延迟时间</param>
/// <returns>添加成功数量</returns>
int AddDelayQueue<T>(string key, List<T> value, int delay);
/// <summary>
/// 获取延迟队列实例
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key">键</param>
/// <returns></returns>
RedisDelayQueue<T> GetDelayQueue<T>(string key);
#endregion
}
@@ -0,0 +1,191 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
namespace SimpleAdmin.Cache;
/// <summary>
/// 缓存服务
/// </summary>
public partial interface ISimpleCacheService
{
#region 基础操作
/// <summary>是否包含缓存项</summary>
/// <param name="key"></param>
/// <returns></returns>
bool ContainsKey(string key);
/// <summary>设置缓存项</summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="expire">过期时间,秒。小于0时采用默认缓存时间</param>
/// <returns></returns>
bool Set<T>(string key, T value, int expire = -1);
/// <summary>设置缓存项</summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="expire">过期时间</param>
/// <returns></returns>
bool Set<T>(string key, T value, TimeSpan expire);
/// <summary>获取缓存项</summary>
/// <param name="key">键</param>
/// <returns></returns>
T Get<T>(string key);
/// <summary>批量移除缓存项</summary>
/// <param name="keys">键集合</param>
/// <returns></returns>
int Remove(params string[] keys);
/// <summary>清空所有缓存项</summary>
void Clear();
/// <summary>设置缓存项有效期</summary>
/// <param name="key">键</param>
/// <param name="expire">过期时间</param>
bool SetExpire(string key, TimeSpan expire);
/// <summary>获取缓存项有效期</summary>
/// <param name="key">键</param>
/// <returns></returns>
TimeSpan GetExpire(string key);
/// <summary>
/// 模糊删除
/// </summary>
/// <param name="pattern">匹配关键字</param>
void DelByPattern(string pattern);
#endregion 基础操作
#region 集合操作
/// <summary>批量获取缓存项</summary>
/// <typeparam name="T"></typeparam>
/// <param name="keys"></param>
/// <returns></returns>
IDictionary<string, T> GetAll<T>(IEnumerable<string> keys);
/// <summary>批量设置缓存项</summary>
/// <typeparam name="T"></typeparam>
/// <param name="values"></param>
/// <param name="expire">过期时间,秒。小于0时采用默认缓存时间</param>
void SetAll<T>(IDictionary<string, T> values, int expire = -1);
/// <summary>获取列表</summary>
/// <typeparam name="T">元素类型</typeparam>
/// <param name="key">键</param>
/// <returns></returns>
IList<T> GetList<T>(string key);
/// <summary>获取哈希</summary>
/// <typeparam name="T">元素类型</typeparam>
/// <param name="key">键</param>
/// <returns></returns>
IDictionary<string, T> GetDictionary<T>(string key);
/// <summary>获取队列</summary>
/// <typeparam name="T">元素类型</typeparam>
/// <param name="key">键</param>
/// <returns></returns>
IProducerConsumer<T> GetQueue<T>(string key);
/// <summary>获取栈</summary>
/// <typeparam name="T">元素类型</typeparam>
/// <param name="key">键</param>
/// <returns></returns>
IProducerConsumer<T> GetStack<T>(string key);
/// <summary>获取Set</summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
ICollection<T> GetSet<T>(string key);
#endregion 集合操作
#region 高级操作
/// <summary>添加,已存在时不更新</summary>
/// <typeparam name="T">值类型</typeparam>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <param name="expire">过期时间,秒。小于0时采用默认缓存时间</param>
/// <returns></returns>
bool Add<T>(string key, T value, int expire = -1);
/// <summary>设置新值并获取旧值,原子操作</summary>
/// <remarks>
/// 常常配合Increment使用,用于累加到一定数后重置归零,又避免多线程冲突。
/// </remarks>
/// <typeparam name="T">值类型</typeparam>
/// <param name="key">键</param>
/// <param name="value">值</param>
/// <returns></returns>
T Replace<T>(string key, T value);
/// <summary>尝试获取指定键,返回是否包含值。有可能缓存项刚好是默认值,或者只是反序列化失败,解决缓存穿透问题</summary>
/// <typeparam name="T">值类型</typeparam>
/// <param name="key">键</param>
/// <param name="value">值。即使有值也不一定能够返回,可能缓存项刚好是默认值,或者只是反序列化失败</param>
/// <returns>返回是否包含值,即使反序列化失败</returns>
bool TryGetValue<T>(string key, out T value);
/// <summary>累加,原子操作</summary>
/// <param name="key">键</param>
/// <param name="value">变化量</param>
/// <returns></returns>
long Increment(string key, long value);
/// <summary>累加,原子操作</summary>
/// <param name="key">键</param>
/// <param name="value">变化量</param>
/// <returns></returns>
double Increment(string key, double value);
/// <summary>递减,原子操作</summary>
/// <param name="key">键</param>
/// <param name="value">变化量</param>
/// <returns></returns>
long Decrement(string key, long value);
/// <summary>递减,原子操作</summary>
/// <param name="key">键</param>
/// <param name="value">变化量</param>
/// <returns></returns>
double Decrement(string key, double value);
#endregion 高级操作
#region 事务
/// <summary>提交变更。部分提供者需要刷盘</summary>
/// <returns></returns>
int Commit();
/// <summary>申请分布式锁</summary>
/// <param name="key">要锁定的key</param>
/// <param name="msTimeout">锁等待时间,单位毫秒</param>
/// <returns></returns>
IDisposable AcquireLock(string key, int msTimeout);
/// <summary>申请分布式锁</summary>
/// <param name="key">要锁定的key</param>
/// <param name="msTimeout">锁等待时间,申请加锁时如果遇到冲突则等待的最大时间,单位毫秒</param>
/// <param name="msExpire">锁过期时间,超过该时间如果没有主动释放则自动释放锁,必须整数秒,单位毫秒</param>
/// <param name="throwOnFailure">失败时是否抛出异常,如果不抛出异常,可通过返回null得知申请锁失败</param>
/// <returns></returns>
IDisposable AcquireLock(string key, int msTimeout, int msExpire,
bool throwOnFailure);
#endregion 事务
}
@@ -0,0 +1,55 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
using MoYu.ConfigurableOptions;
namespace SimpleAdmin.Cache;
/// <summary>
/// 缓存设置
/// </summary>
public class CacheSettingsOptions : IConfigurableOptions
{
/// <summary>
/// 使用Redis
/// </summary>
public bool UseRedis { get; set; }
/// <summary>
/// Redis设置
/// </summary>
public RedisSettings RedisSettings { get; set; }
}
/// <summary>
/// Redis设置
/// </summary>
public class RedisSettings
{
/// <summary>
/// 连接地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 密码
/// </summary>
public string Password { get; set; }
/// <summary>
/// 数据库
/// </summary>
public int Db { get; set; } = 0;
/// <summary>
/// 是否每次启动都清空
/// </summary>
public bool ClearRedis { get; set; } = false;
}
@@ -0,0 +1,98 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
namespace SimpleAdmin.Cache;
/// <summary>
/// <inheritdoc cref="ISimpleCacheService"/>
/// 内存缓存
/// </summary>
public partial class MemoryCacheService
{
/// <inheritdoc/>
public void HashAdd<T>(string key, string hashKey, T value)
{
//获取字典
var exist = _memoryCache.GetDictionary<T>(key);
if (exist.ContainsKey(hashKey))//如果包含Key
exist[hashKey] = value;//重新赋值
else exist.TryAdd(hashKey, value);//加上新的值
_memoryCache.Set(key, exist);
}
//private IDictionary<string,T> GetDictionary(string key,string)
/// <inheritdoc/>
public bool HashSet<T>(string key, Dictionary<string, T> dic)
{
//获取字典
var exist = _memoryCache.GetDictionary<T>(key);
dic.ForEach(it =>
{
if (exist.ContainsKey(it.Key))//如果包含Key
exist[it.Key] = it.Value;//重新赋值
else exist.Add(it.Key, it.Value);//加上新的值
});
return true;
}
/// <inheritdoc/>
public int HashDel<T>(string key, params string[] fields)
{
var result = 0;
//获取字典
var exist = _memoryCache.GetDictionary<T>(key);
foreach (var field in fields)
{
if (field != null && exist.ContainsKey(field))//如果包含Key
{
exist.Remove(field);//删除
result++;
}
}
return result;
}
/// <inheritdoc/>
public List<T> HashGet<T>(string key, params string[] fields)
{
var list = new List<T>();
//获取字典
var exist = _memoryCache.GetDictionary<T>(key);
foreach (var field in fields)
{
if (exist.TryGetValue(field, out var value))//如果包含Key
{
list.Add(value);
}
else { list.Add(default); }
}
return list;
}
/// <inheritdoc/>
public T HashGetOne<T>(string key, string field)
{
//获取字典
var exist = _memoryCache.GetDictionary<T>(key);
exist.TryGetValue(field, out var result);
var data = result.DeepClone();
return data;
}
/// <inheritdoc/>
public IDictionary<string, T> HashGetAll<T>(string key)
{
var data = _memoryCache.GetDictionary<T>(key);
return data;
}
}
@@ -0,0 +1,74 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
using NewLife.Caching.Queues;
namespace SimpleAdmin.Cache;
/// <summary>
/// <inheritdoc cref="ISimpleCacheService"/>
/// 内存缓存
/// </summary>
public partial class MemoryCacheService
{
/// <inheritdoc/>
public int AddQueue<T>(string key, T[] value)
{
throw new NotImplementedException();
}
/// <inheritdoc/>
public int AddQueue<T>(string key, T value)
{
throw new NotImplementedException();
}
/// <inheritdoc/>
public RedisQueue<T> GetRedisQueue<T>(string key)
{
throw new NotImplementedException();
}
/// <inheritdoc/>
public List<T> GetQueue<T>(string key, int Count = 1)
{
throw new NotImplementedException();
}
/// <inheritdoc/>
public T GetQueueOne<T>(string key, int timeout = 1)
{
throw new NotImplementedException();
}
/// <inheritdoc/>
public async Task<T> GetQueueOneAsync<T>(string key, int timeout = 1)
{
throw new NotImplementedException();
}
/// <inheritdoc/>
public int AddDelayQueue<T>(string key, T value, int delay)
{
throw new NotImplementedException();
}
/// <inheritdoc/>
public int AddDelayQueue<T>(string key, List<T> value, int delay)
{
throw new NotImplementedException();
}
/// <inheritdoc/>
public RedisDelayQueue<T> GetDelayQueue<T>(string key)
{
throw new NotImplementedException();
}
}
@@ -0,0 +1,229 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
namespace SimpleAdmin.Cache;
/// <summary>
/// <inheritdoc cref="ISimpleCacheService"/>
/// 内存缓存
/// </summary>
public partial class MemoryCacheService : ISimpleCacheService
{
private readonly MemoryCache _memoryCache;
public MemoryCacheService()
{
_memoryCache = new MemoryCache();
}
#region 普通操作
/// <inheritdoc/>
public T Get<T>(string key)
{
var data = _memoryCache.Get<string>(key);
return data.ToObject<T>();
}
/// <inheritdoc/>
public int Remove(params string[] keys)
{
return _memoryCache.Remove(keys);
}
/// <inheritdoc/>
public bool Set<T>(string key, T value, int expire = -1)
{
return _memoryCache.Set(key, value.ToJson(), expire);
}
/// <inheritdoc/>
public bool Set<T>(string key, T value, TimeSpan expire)
{
return _memoryCache.Set(key, value.ToJson(), expire);
}
/// <inheritdoc/>
public bool SetExpire(string key, TimeSpan expire)
{
return _memoryCache.SetExpire(key, expire);
}
/// <inheritdoc/>
public TimeSpan GetExpire(string key)
{
return _memoryCache.GetExpire(key);
}
/// <inheritdoc/>
public bool ContainsKey(string key)
{
return _memoryCache.ContainsKey(key);
}
/// <inheritdoc/>
public void Clear()
{
_memoryCache.Clear();
}
/// <inheritdoc/>
public void DelByPattern(string pattern)
{
var keys = _memoryCache.Keys.ToList();//获取所有key
keys.ForEach(it =>
{
if (it.Contains(pattern))//如果匹配
_memoryCache.Remove(pattern);
});
}
#endregion 普通操作
#region 集合操作
/// <inheritdoc/>
public IDictionary<string, T> GetAll<T>(IEnumerable<string> keys)
{
IDictionary<string, T>? result = default;//定义集合
var data = _memoryCache.GetAll<string>(keys);//获取数据
data.ForEach(it =>
{
result.Add(it.Key, it.Value.ToObject<T>());//遍历数据,格式化并加到新的数据集合
});
return result;
}
/// <inheritdoc/>
public void SetAll<T>(IDictionary<string, T> values, int expire = -1)
{
IDictionary<string, string>? result = default;//定义集合
values.ForEach(it =>
{
result.Add(it.Key, it.Value.ToJson());//遍历数据,格式化并加到新的数据集合
});
_memoryCache.SetAll(values, expire);
}
/// <inheritdoc/>
public IDictionary<string, T> GetDictionary<T>(string key)
{
IDictionary<string, T>? result = default;//定义集合
var data = _memoryCache.GetDictionary<string>(key);
data.ForEach(it =>
{
result.Add(it.Key, it.Value.ToObject<T>());//遍历数据,格式化并加到新的数据集合
});
return result;
}
/// <inheritdoc/>
public IProducerConsumer<T> GetQueue<T>(string key)
{
return _memoryCache.GetQueue<T>(key);
}
/// <inheritdoc/>
public IProducerConsumer<T> GetStack<T>(string key)
{
return _memoryCache.GetStack<T>(key);
}
/// <inheritdoc/>
public ICollection<T> GetSet<T>(string key)
{
return _memoryCache.GetSet<T>(key);
}
#endregion 集合操作
#region 高级操作
/// <inheritdoc/>
public bool Add<T>(string key, T value, int expire = -1)
{
return _memoryCache.Add(key, value.ToJson(), expire);
}
/// <inheritdoc/>
public IList<T> GetList<T>(string key)
{
IList<T> result = default;//定义集合
var data = _memoryCache.GetList<string>(key);
data.ForEach(it =>
{
result.Add(it.ToObject<T>());//遍历数据,格式化并加到新的数据集合
});
return result;
}
/// <inheritdoc/>
public T Replace<T>(string key, T value)
{
return _memoryCache.Replace(key, value);
}
/// <inheritdoc/>
public bool TryGetValue<T>(string key, out T value)
{
_ = _memoryCache.TryGetValue<string>(key, out var result);
value = result.ToObject<T>();
return value == null;
}
/// <inheritdoc/>
public long Decrement(string key, long value)
{
return _memoryCache.Decrement(key, value);
}
/// <inheritdoc/>
public double Decrement(string key, double value)
{
return _memoryCache.Decrement(key, value);
}
/// <inheritdoc/>
public long Increment(string key, long value)
{
return _memoryCache.Increment(key, value);
}
/// <inheritdoc/>
public double Increment(string key, double value)
{
return _memoryCache.Increment(key, value);
}
#endregion 高级操作
#region 事务
/// <inheritdoc/>
public int Commit()
{
return _memoryCache.Commit();
}
/// <inheritdoc/>
public IDisposable AcquireLock(string key, int msTimeout)
{
return _memoryCache.AcquireLock(key, msTimeout);
}
/// <inheritdoc/>
public IDisposable AcquireLock(string key, int msTimeout, int msExpire,
bool throwOnFailure)
{
return _memoryCache.AcquireLock(key, msTimeout, msExpire, throwOnFailure);
}
#endregion 事务
}
@@ -0,0 +1,54 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
namespace SimpleAdmin.Cache;
/// <summary>
/// <inheritdoc cref="ISimpleCacheService"/>
/// Redis缓存
/// </summary>
public partial class RedisCacheService
{
/// <inheritdoc/>
public void HashAdd<T>(string key, string hashKey, T value)
{
_simpleRedis.HashAdd<T>(key, hashKey, value);
}
/// <inheritdoc/>
public bool HashSet<T>(string key, Dictionary<string, T> dic)
{
return _simpleRedis.HashSet<T>(key, dic);
}
/// <inheritdoc/>
public int HashDel<T>(string key, params string[] fields)
{
return _simpleRedis.HashDel<T>(key, fields);
}
/// <inheritdoc/>
public List<T> HashGet<T>(string key, params string[] fields)
{
return _simpleRedis.HashGet<T>(key, fields);
}
/// <inheritdoc/>
public T HashGetOne<T>(string key, string field)
{
return _simpleRedis.HashGetOne<T>(key, field);
}
/// <inheritdoc/>
public IDictionary<string, T> HashGetAll<T>(string key)
{
return _simpleRedis.HashGetAll<T>(key);
}
}
@@ -0,0 +1,74 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
using NewLife.Caching.Queues;
namespace SimpleAdmin.Cache;
/// <summary>
/// <inheritdoc cref="ISimpleCacheService"/>
/// Redis缓存
/// </summary>
public partial class RedisCacheService
{
/// <inheritdoc/>
public int AddQueue<T>(string key, T[] value)
{
return _simpleRedis.AddQueue(key, value);
}
/// <inheritdoc/>
public int AddQueue<T>(string key, T value)
{
return _simpleRedis.AddQueue(key, value);
}
/// <inheritdoc/>
public RedisQueue<T> GetRedisQueue<T>(string key)
{
return _simpleRedis.GetRedisQueue<T>(key);
}
/// <inheritdoc/>
public List<T> GetQueue<T>(string key, int Count = 1)
{
return _simpleRedis.GetQueue<T>(key, Count);
}
/// <inheritdoc/>
public T GetQueueOne<T>(string key, int timeout = 1)
{
return _simpleRedis.GetQueueOne<T>(key, timeout);
}
/// <inheritdoc/>
public async Task<T> GetQueueOneAsync<T>(string key, int timeout = 1)
{
return await _simpleRedis.GetQueueOneAsync<T>(key, timeout);
}
/// <inheritdoc/>
public int AddDelayQueue<T>(string key, T value, int delay)
{
return _simpleRedis.AddDelayQueue(key, value, delay);
}
/// <inheritdoc/>
public int AddDelayQueue<T>(string key, List<T> value, int delay)
{
return _simpleRedis.AddDelayQueue(key, value, delay);
}
/// <inheritdoc/>
public RedisDelayQueue<T> GetDelayQueue<T>(string key)
{
return _simpleRedis.GetDelayQueue<T>(key);
}
}
@@ -0,0 +1,201 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
using NewLife.Caching.Queues;
namespace SimpleAdmin.Cache;
/// <summary>
/// <inheritdoc cref="ISimpleCacheService"/>
/// Redis缓存
/// </summary>
public partial class RedisCacheService : ISimpleCacheService
{
private readonly ISimpleRedis _simpleRedis;
public RedisCacheService(ISimpleRedis simpleRedis)
{
_simpleRedis = simpleRedis;
}
#region 普通操作
/// <inheritdoc/>
public T Get<T>(string key)
{
return _simpleRedis.Get<T>(key);
}
/// <inheritdoc/>
public int Remove(params string[] keys)
{
return _simpleRedis.GetFullRedis().Remove(keys);
}
/// <inheritdoc/>
public bool Set<T>(string key, T value, int expire = -1)
{
return _simpleRedis.Set(key, value, expire);
}
/// <inheritdoc/>
public bool Set<T>(string key, T value, TimeSpan expire)
{
return _simpleRedis.Set(key, value, expire);
}
/// <inheritdoc/>
public bool SetExpire(string key, TimeSpan expire)
{
return _simpleRedis.GetFullRedis().SetExpire(key, expire);
}
/// <inheritdoc/>
public TimeSpan GetExpire(string key)
{
return _simpleRedis.GetFullRedis().GetExpire(key);
}
/// <inheritdoc/>
public bool ContainsKey(string key)
{
return _simpleRedis.ContainsKey(key);
}
/// <inheritdoc/>
public void Clear()
{
_simpleRedis.Clear();
}
/// <inheritdoc/>
public void DelByPattern(string pattern)
{
_simpleRedis.DelByPattern(pattern);
}
#endregion 普通操作
#region 集合操作
/// <inheritdoc/>
public IDictionary<string, T> GetAll<T>(IEnumerable<string> keys)
{
return _simpleRedis.GetFullRedis().GetAll<T>(keys);
}
/// <inheritdoc/>
public void SetAll<T>(IDictionary<string, T> values, int expire = -1)
{
_simpleRedis.GetFullRedis().SetAll(values, expire);
}
/// <inheritdoc/>
public IDictionary<string, T> GetDictionary<T>(string key)
{
return _simpleRedis.GetFullRedis().GetDictionary<T>(key);
}
/// <inheritdoc/>
public IProducerConsumer<T> GetQueue<T>(string key)
{
return _simpleRedis.GetFullRedis().GetQueue<T>(key);
}
/// <inheritdoc/>
public IProducerConsumer<T> GetStack<T>(string key)
{
return _simpleRedis.GetFullRedis().GetStack<T>(key);
}
/// <inheritdoc/>
public ICollection<T> GetSet<T>(string key)
{
return _simpleRedis.GetFullRedis().GetSet<T>(key);
}
#endregion 集合操作
#region 高级操作
/// <inheritdoc/>
public bool Add<T>(string key, T value, int expire = -1)
{
return _simpleRedis.GetFullRedis().Add(key, value, expire);
}
/// <inheritdoc/>
public IList<T> GetList<T>(string key)
{
return _simpleRedis.GetFullRedis().GetList<T>(key);
}
/// <inheritdoc/>
public T Replace<T>(string key, T value)
{
return _simpleRedis.GetFullRedis().Replace(key, value);
}
/// <inheritdoc/>
public bool TryGetValue<T>(string key, out T value)
{
return _simpleRedis.GetFullRedis().TryGetValue(key, out value);
}
/// <inheritdoc/>
public long Decrement(string key, long value)
{
return _simpleRedis.GetFullRedis().Decrement(key, value);
}
/// <inheritdoc/>
public double Decrement(string key, double value)
{
return _simpleRedis.GetFullRedis().Decrement(key, value);
}
/// <inheritdoc/>
public long Increment(string key, long value)
{
return _simpleRedis.GetFullRedis().Increment(key, value);
}
/// <inheritdoc/>
public double Increment(string key, double value)
{
return _simpleRedis.GetFullRedis().Increment(key, value);
}
#endregion 高级操作
#region 事务
/// <inheritdoc/>
public int Commit()
{
return _simpleRedis.GetFullRedis().Commit();
}
/// <inheritdoc/>
public IDisposable AcquireLock(string key, int msTimeout)
{
return _simpleRedis.GetFullRedis().AcquireLock(key, msTimeout);
}
/// <inheritdoc/>
public IDisposable AcquireLock(string key, int msTimeout, int msExpire,
bool throwOnFailure)
{
return _simpleRedis.GetFullRedis().AcquireLock(key, msTimeout, msExpire, throwOnFailure);
}
#endregion 事务
}
@@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<PackageReference Include="SimpleRedis" Version="1.2.0"/>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SimpleAdmin.Core\SimpleAdmin.Core.csproj"/>
</ItemGroup>
<ItemGroup>
<None Update="Cache.Development.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="Cache.Production.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Const\"/>
</ItemGroup>
</Project>
+637
View File
@@ -0,0 +1,637 @@
<?xml version="1.0"?>
<doc>
<assembly>
<name>SimpleAdmin.Cache</name>
</assembly>
<members>
<member name="T:SimpleAdmin.Cache.ISimpleCacheService">
<summary>
缓存服务
</summary>
<summary>
缓存服务
</summary>
<summary>
缓存服务
</summary>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.HashAdd``1(System.String,System.String,``0)">
<summary>
添加一条数据到HashMap
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="hashKey">hash列表里的Key</param>
<param name="value">值</param>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.HashSet``1(System.String,System.Collections.Generic.Dictionary{System.String,``0})">
<summary>
添加多条数据到HashMap
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="dic">键值对字典</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.HashDel``1(System.String,System.String[])">
<summary>
从HashMap中删除数据
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="fields">hash键列表</param>
<returns>执行结果</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.HashGet``1(System.String,System.String[])">
<summary>
根据键获取hash列表中的值
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="fields">hash键列表</param>
<returns>数据列表</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.HashGetOne``1(System.String,System.String)">
<summary>
根据键获取hash列表中的值
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="field">hash键</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.HashGetAll``1(System.String)">
<summary>
获取所有键值对
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<returns>数据字典</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.AddQueue``1(System.String,``0[])">
<summary>
添加到队列
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="value">值数组</param>
<returns>添加数量</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.AddQueue``1(System.String,``0)">
<summary>
添加到队列
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="value">值</param>
<returns>添加数量</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetRedisQueue``1(System.String)">
<summary>
获取队列实例
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<returns>队列实例</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetQueue``1(System.String,System.Int32)">
<summary>
从队列中获取数据
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="Count">数量</param>
<returns>数据列表</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetQueueOne``1(System.String,System.Int32)">
<summary>
取一条数据
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="timeout">阻塞时间</param>
<returns>数据</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetQueueOneAsync``1(System.String,System.Int32)">
<summary>
异步取一条数据
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="timeout">阻塞时间</param>
<returns>数据</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.AddDelayQueue``1(System.String,``0,System.Int32)">
<summary>
添加一条数据到延迟队列
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="value">值</param>
<param name="delay">延迟时间</param>
<returns>添加成功数量</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.AddDelayQueue``1(System.String,System.Collections.Generic.List{``0},System.Int32)">
<summary>
批量添加数据到延迟队列
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<param name="value">值</param>
<param name="delay">延迟时间</param>
<returns>添加成功数量</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetDelayQueue``1(System.String)">
<summary>
获取延迟队列实例
</summary>
<typeparam name="T"></typeparam>
<param name="key">键</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.ContainsKey(System.String)">
<summary>是否包含缓存项</summary>
<param name="key"></param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Set``1(System.String,``0,System.Int32)">
<summary>设置缓存项</summary>
<param name="key">键</param>
<param name="value">值</param>
<param name="expire">过期时间,秒。小于0时采用默认缓存时间</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Set``1(System.String,``0,System.TimeSpan)">
<summary>设置缓存项</summary>
<param name="key">键</param>
<param name="value">值</param>
<param name="expire">过期时间</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Get``1(System.String)">
<summary>获取缓存项</summary>
<param name="key">键</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Remove(System.String[])">
<summary>批量移除缓存项</summary>
<param name="keys">键集合</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Clear">
<summary>清空所有缓存项</summary>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.SetExpire(System.String,System.TimeSpan)">
<summary>设置缓存项有效期</summary>
<param name="key">键</param>
<param name="expire">过期时间</param>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetExpire(System.String)">
<summary>获取缓存项有效期</summary>
<param name="key">键</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.DelByPattern(System.String)">
<summary>
模糊删除
</summary>
<param name="pattern">匹配关键字</param>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetAll``1(System.Collections.Generic.IEnumerable{System.String})">
<summary>批量获取缓存项</summary>
<typeparam name="T"></typeparam>
<param name="keys"></param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.SetAll``1(System.Collections.Generic.IDictionary{System.String,``0},System.Int32)">
<summary>批量设置缓存项</summary>
<typeparam name="T"></typeparam>
<param name="values"></param>
<param name="expire">过期时间,秒。小于0时采用默认缓存时间</param>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetList``1(System.String)">
<summary>获取列表</summary>
<typeparam name="T">元素类型</typeparam>
<param name="key">键</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetDictionary``1(System.String)">
<summary>获取哈希</summary>
<typeparam name="T">元素类型</typeparam>
<param name="key">键</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetQueue``1(System.String)">
<summary>获取队列</summary>
<typeparam name="T">元素类型</typeparam>
<param name="key">键</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetStack``1(System.String)">
<summary>获取栈</summary>
<typeparam name="T">元素类型</typeparam>
<param name="key">键</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.GetSet``1(System.String)">
<summary>获取Set</summary>
<typeparam name="T"></typeparam>
<param name="key"></param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Add``1(System.String,``0,System.Int32)">
<summary>添加,已存在时不更新</summary>
<typeparam name="T">值类型</typeparam>
<param name="key">键</param>
<param name="value">值</param>
<param name="expire">过期时间,秒。小于0时采用默认缓存时间</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Replace``1(System.String,``0)">
<summary>设置新值并获取旧值,原子操作</summary>
<remarks>
常常配合Increment使用,用于累加到一定数后重置归零,又避免多线程冲突。
</remarks>
<typeparam name="T">值类型</typeparam>
<param name="key">键</param>
<param name="value">值</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.TryGetValue``1(System.String,``0@)">
<summary>尝试获取指定键,返回是否包含值。有可能缓存项刚好是默认值,或者只是反序列化失败,解决缓存穿透问题</summary>
<typeparam name="T">值类型</typeparam>
<param name="key">键</param>
<param name="value">值。即使有值也不一定能够返回,可能缓存项刚好是默认值,或者只是反序列化失败</param>
<returns>返回是否包含值,即使反序列化失败</returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Increment(System.String,System.Int64)">
<summary>累加,原子操作</summary>
<param name="key">键</param>
<param name="value">变化量</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Increment(System.String,System.Double)">
<summary>累加,原子操作</summary>
<param name="key">键</param>
<param name="value">变化量</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Decrement(System.String,System.Int64)">
<summary>递减,原子操作</summary>
<param name="key">键</param>
<param name="value">变化量</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Decrement(System.String,System.Double)">
<summary>递减,原子操作</summary>
<param name="key">键</param>
<param name="value">变化量</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.Commit">
<summary>提交变更。部分提供者需要刷盘</summary>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.AcquireLock(System.String,System.Int32)">
<summary>申请分布式锁</summary>
<param name="key">要锁定的key</param>
<param name="msTimeout">锁等待时间,单位毫秒</param>
<returns></returns>
</member>
<member name="M:SimpleAdmin.Cache.ISimpleCacheService.AcquireLock(System.String,System.Int32,System.Int32,System.Boolean)">
<summary>申请分布式锁</summary>
<param name="key">要锁定的key</param>
<param name="msTimeout">锁等待时间,申请加锁时如果遇到冲突则等待的最大时间,单位毫秒</param>
<param name="msExpire">锁过期时间,超过该时间如果没有主动释放则自动释放锁,必须整数秒,单位毫秒</param>
<param name="throwOnFailure">失败时是否抛出异常,如果不抛出异常,可通过返回null得知申请锁失败</param>
<returns></returns>
</member>
<member name="T:SimpleAdmin.Cache.CacheSettingsOptions">
<summary>
缓存设置
</summary>
</member>
<member name="P:SimpleAdmin.Cache.CacheSettingsOptions.UseRedis">
<summary>
使用Redis
</summary>
</member>
<member name="P:SimpleAdmin.Cache.CacheSettingsOptions.RedisSettings">
<summary>
Redis设置
</summary>
</member>
<member name="T:SimpleAdmin.Cache.RedisSettings">
<summary>
Redis设置
</summary>
</member>
<member name="P:SimpleAdmin.Cache.RedisSettings.Address">
<summary>
连接地址
</summary>
</member>
<member name="P:SimpleAdmin.Cache.RedisSettings.Password">
<summary>
密码
</summary>
</member>
<member name="P:SimpleAdmin.Cache.RedisSettings.Db">
<summary>
数据库
</summary>
</member>
<member name="P:SimpleAdmin.Cache.RedisSettings.ClearRedis">
<summary>
是否每次启动都清空
</summary>
</member>
<member name="T:SimpleAdmin.Cache.MemoryCacheService">
<summary>
<inheritdoc cref="T:SimpleAdmin.Cache.ISimpleCacheService"/>
内存缓存
</summary>
<summary>
<inheritdoc cref="T:SimpleAdmin.Cache.ISimpleCacheService"/>
内存缓存
</summary>
<summary>
<inheritdoc cref="T:SimpleAdmin.Cache.ISimpleCacheService"/>
内存缓存
</summary>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.HashAdd``1(System.String,System.String,``0)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.HashSet``1(System.String,System.Collections.Generic.Dictionary{System.String,``0})">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.HashDel``1(System.String,System.String[])">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.HashGet``1(System.String,System.String[])">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.HashGetOne``1(System.String,System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.HashGetAll``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.AddQueue``1(System.String,``0[])">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.AddQueue``1(System.String,``0)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetRedisQueue``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetQueue``1(System.String,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetQueueOne``1(System.String,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetQueueOneAsync``1(System.String,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.AddDelayQueue``1(System.String,``0,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.AddDelayQueue``1(System.String,System.Collections.Generic.List{``0},System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetDelayQueue``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Get``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Remove(System.String[])">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Set``1(System.String,``0,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Set``1(System.String,``0,System.TimeSpan)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.SetExpire(System.String,System.TimeSpan)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetExpire(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.ContainsKey(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Clear">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.DelByPattern(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetAll``1(System.Collections.Generic.IEnumerable{System.String})">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.SetAll``1(System.Collections.Generic.IDictionary{System.String,``0},System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetDictionary``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetQueue``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetStack``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetSet``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Add``1(System.String,``0,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.GetList``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Replace``1(System.String,``0)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.TryGetValue``1(System.String,``0@)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Decrement(System.String,System.Int64)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Decrement(System.String,System.Double)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Increment(System.String,System.Int64)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Increment(System.String,System.Double)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.Commit">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.AcquireLock(System.String,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.MemoryCacheService.AcquireLock(System.String,System.Int32,System.Int32,System.Boolean)">
<inheritdoc/>
</member>
<member name="T:SimpleAdmin.Cache.RedisCacheService">
<summary>
<inheritdoc cref="T:SimpleAdmin.Cache.ISimpleCacheService"/>
Redis缓存
</summary>
<summary>
<inheritdoc cref="T:SimpleAdmin.Cache.ISimpleCacheService"/>
Redis缓存
</summary>
<summary>
<inheritdoc cref="T:SimpleAdmin.Cache.ISimpleCacheService"/>
Redis缓存
</summary>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.HashAdd``1(System.String,System.String,``0)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.HashSet``1(System.String,System.Collections.Generic.Dictionary{System.String,``0})">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.HashDel``1(System.String,System.String[])">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.HashGet``1(System.String,System.String[])">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.HashGetOne``1(System.String,System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.HashGetAll``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.AddQueue``1(System.String,``0[])">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.AddQueue``1(System.String,``0)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetRedisQueue``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetQueue``1(System.String,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetQueueOne``1(System.String,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetQueueOneAsync``1(System.String,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.AddDelayQueue``1(System.String,``0,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.AddDelayQueue``1(System.String,System.Collections.Generic.List{``0},System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetDelayQueue``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Get``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Remove(System.String[])">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Set``1(System.String,``0,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Set``1(System.String,``0,System.TimeSpan)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.SetExpire(System.String,System.TimeSpan)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetExpire(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.ContainsKey(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Clear">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.DelByPattern(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetAll``1(System.Collections.Generic.IEnumerable{System.String})">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.SetAll``1(System.Collections.Generic.IDictionary{System.String,``0},System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetDictionary``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetQueue``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetStack``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetSet``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Add``1(System.String,``0,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.GetList``1(System.String)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Replace``1(System.String,``0)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.TryGetValue``1(System.String,``0@)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Decrement(System.String,System.Int64)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Decrement(System.String,System.Double)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Increment(System.String,System.Int64)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Increment(System.String,System.Double)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.Commit">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.AcquireLock(System.String,System.Int32)">
<inheritdoc/>
</member>
<member name="M:SimpleAdmin.Cache.RedisCacheService.AcquireLock(System.String,System.Int32,System.Int32,System.Boolean)">
<inheritdoc/>
</member>
<member name="T:SimpleAdmin.Cache.Startup">
<summary>
AppStartup启动类
</summary>
</member>
<member name="M:SimpleAdmin.Cache.Startup.ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection)">
<summary>
ConfigureServices中不能解析服务,比如App.GetService(),尤其是不能在ConfigureServices中获取诸如缓存等数据进行初始化,应该在Configure中进行
服务都还没初始化完成,会导致内存中存在多份 IOC 容器!!
正确应该在 Configure 中,这个时候服务(IServiceCollection 已经完成 BuildServiceProvider() 操作了
</summary>
<param name="services"></param>
</member>
</members>
</doc>
+58
View File
@@ -0,0 +1,58 @@
// Copyright (c) 2022-Now 少林寺驻北固山办事处大神父王喇嘛
//
// SimpleAdmin 基于 Apache License Version 2.0 协议发布,可用于商业项目,但必须遵守以下补充条款:
// 1.请不要删除和修改根目录下的LICENSE文件。
// 2.请不要删除和修改SimpleAdmin源码头部的版权声明。
// 3.分发源码时候,请注明软件出处 https://gitee.com/dotnetmoyu/SimpleAdmin
// 4.基于本软件的作品,只能使用 SimpleAdmin 作为后台服务,除外情况不可商用且不允许二次分发或开源。
// 5.请不得将本软件应用于危害国家安全、荣誉和利益的行为,不能以任何形式用于非法为目的的行为。
// 6.任何基于本软件而产生的一切法律纠纷和责任,均于我司无关。
namespace SimpleAdmin.Cache;
/// <summary>
/// AppStartup启动类
/// </summary>
[AppStartup(97)]
public class Startup : AppStartup
{
/// <summary>
/// ConfigureServices中不能解析服务,比如App.GetService(),尤其是不能在ConfigureServices中获取诸如缓存等数据进行初始化,应该在Configure中进行
/// 服务都还没初始化完成,会导致内存中存在多份 IOC 容器!!
/// 正确应该在 Configure 中,这个时候服务(IServiceCollection 已经完成 BuildServiceProvider() 操作了
/// </summary>
/// <param name="services"></param>
public void ConfigureServices(IServiceCollection services)
{
//缓存设置配置转实体
services.AddConfigurableOptions<CacheSettingsOptions>();
//禁止在主机启动时通过 App.GetOptions<TOptions> 获取选项,如需获取配置选项理应通过 App.GetConfig<TOptions>("配置节点", true)。
var cacheSettings = App.GetConfig<CacheSettingsOptions>("CacheSettings", true);
//如果有redis连接字符串
if (cacheSettings.UseRedis)
{
var connectionString =
$"server={cacheSettings.RedisSettings.Address};password={cacheSettings.RedisSettings.Password};db={cacheSettings.RedisSettings.Db}";
//注入redis
services.AddSimpleRedis(connectionString);
services.AddSingleton<ISimpleCacheService, RedisCacheService>();
}
else
{
services.AddSingleton<ISimpleCacheService, MemoryCacheService>();
}
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//通过 App.GetOptions<TOptions> 获取选项
var cacheSettings = App.GetOptions<CacheSettingsOptions>();
//如果需要清除缓存
if (cacheSettings.UseRedis && cacheSettings.RedisSettings.ClearRedis)
{
var redis = App.GetService<ISimpleCacheService>();//获取redis服务
//删除redis的key
redis.DelByPattern(CacheConst.CACHE_PREFIX_WEB);
}
}
}