






















安装
Install-Package CSRedisCore
# 或 .NET Core CLI
dotnet add package CSRedisCore
注册
using CSRedis; builder.Services.AddSingleton<CSRedisClient>(sp => { return new CSRedisClient("127.0.0.1:6379,password=123456,ConnectTimeout=3000,defaultDatabase=0,abortConnect=false,poolsize=5000"); }); // 或直接初始化 RedisHelper(全局静态) RedisHelper.Initialization(new CSRedisClient("127.0.0.1:6379"));
公共类,也可以使用RedisHelper替换
using CSRedis; using Newtonsoft.Json; namespace XCGWebApp.Common { /// <summary> /// CSRedis公共类 /// </summary> public interface IRedisRepository { Task SetAsync<T>(string key, T value, TimeSpan? expiry = null); Task<T> GetAsync<T>(string key); Task<T> HGetAsync<T>(string key, string field); Task<bool> HSetAsync(string key, string field, string value); Task ReleaseLockAsync(string key); Task<bool> AcquireLockAsync(string key, TimeSpan expiry); Task<long> HDelAsync(string key, params string[] fields); } public class RedisRepository : IRedisRepository { private readonly CSRedisClient _redis; public RedisRepository(CSRedisClient redis) => _redis = redis; /// <summary> /// 使用管道批量设置Key-Value /// </summary> /// <typeparam name="T"></typeparam> /// <param name="dic"></param> /// <param name="expiry"></param> public void BatchSetAsync<T>(Dictionary<string, T> dic, TimeSpan? expiry = null) { var clientPipe = _redis.StartPipe(); foreach (var key in dic.Keys) { var value = dic[key]; var json = JsonConvert.SerializeObject(value); if (expiry.HasValue) clientPipe.Set(key, json, expiry.Value); else clientPipe.Set(key, json); } clientPipe.EndPipe(); } /// <summary> /// 获取Hash类型单字段值 /// </summary> /// <typeparam name="T">自动反序列化类型</typeparam> /// <param name="key">总键</param> /// <param name="field">具体字段名</param> /// <returns></returns> public async Task<T> HGetAsync<T>(string key, string field) { var res = await _redis.HGetAsync<T>(key, field); return res; } /// <summary> /// 设置Hash类型单字段值 /// </summary> /// <param name="key">总键</param> /// <param name="field">具体字段名</param> /// <param name="value">值</param> /// <returns></returns> public async Task<bool> HSetAsync(string key, string field, string value) { return await _redis.HSetAsync(key, field, value); } /// <summary> /// 删除Hash类型某些单字段值 /// </summary> /// <param name="key">总键</param> /// <param name="fields">具体字段名 数组</param> /// <returns></returns> public async Task<long> HDelAsync(string key, params string[] fields) { return await _redis.HDelAsync(key, fields); } public async Task<T> GetAsync<T>(string key) { //var res = await RedisHelper.GetAsync<T>(key); var res = await _redis.GetAsync<T>(key); return res; } public async Task SetAsync<T>(string key, T value, TimeSpan? expiry = null) { var json = JsonConvert.SerializeObject(value); if (expiry.HasValue) await _redis.SetAsync(key, json, expiry.Value); else await _redis.SetAsync(key, json); } /// <summary> /// 可靠的分布式锁,对防止并发问题至关重要。 /// </summary> /// <param name="key"></param> /// <param name="expiry"></param> /// <returns></returns> public async Task<bool> AcquireLockAsync(string key, TimeSpan expiry) { return await _redis.SetAsync(key, "locked", expiry, RedisExistence.Nx); } /// <summary> /// 删除一个key /// </summary> /// <param name="key"></param> /// <returns></returns> public async Task ReleaseLockAsync(string key) { await _redis.DelAsync(key); } } }
注册RepositoryRedis
builder.Services.AddScoped<IRedisRepository, RedisRepository>();//CSRedisCore
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。