using Microsoft.Extensions.Options; using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using Yi.Framework.Common.IOCOptions; using CSRedis; using static CSRedis.CSRedisClient; namespace Yi.Framework.Core.Cache { public class RedisCacheClient : CacheInvoker { private readonly RedisConnOptions _RedisOptions; private CSRedisClient _client; public RedisCacheClient(IOptionsMonitor redisConnOptions) { this._RedisOptions = redisConnOptions.CurrentValue; _client = new CSRedisClient($"{_RedisOptions.Host}:{_RedisOptions.Prot},password={_RedisOptions.Password},defaultDatabase ={ _RedisOptions.DB }"); } public override bool Exits(string key) { return _client.Exists(key); } public override T Get(string key) { return _client.Get(key); } public override bool Set(string key, T data, TimeSpan time) { return _client.Set(key, data, time); } public override bool Set(string key, T data) { return _client.Set(key, data); } public override long Del(string key) { return _client.Del(key); } public override bool HSet(string key, string fieId, object data) { return _client.HSet(key, fieId, data); } public override bool HSet(string key, string fieId, object data, TimeSpan time) { var res = _client.HSet(key, fieId, data); var res2 = _client.Expire(key, time); return res && res2; } public override T HGet(string key, string field) { return _client.HGet(key, field); } public override long HDel(string key, params string[] par) { return _client.HDel(key, par); } public override long HLen(string key) { return _client.HLen(key); } public override Dictionary HGetAll(string key) { return _client.HGetAll(key); } /// /// 简单发布 /// /// /// /// public override long Publish(string channel, string message) { return _client.Publish(channel, message); } /// /// 简单订阅:广播,无持久化,需要Publish写入队列 /// /// /// public override SubscribeObject Subscribe(params (string, Action)[] channels) { return _client.Subscribe(channels); } /// /// 多端争抢模式订阅,需要Lpush写入队列 /// /// /// /// public override SubscribeListObject SubscribeList(string listKey, Action onMessage) { return _client.SubscribeList(listKey, onMessage); } /// /// 多端非争抢模式订阅,需要Lpush写入队列 /// /// /// /// /// public override SubscribeListBroadcastObject SubscribeListBroadcast(string listKey, string clientId, Action onMessage) { return _client.SubscribeListBroadcast(listKey, clientId, onMessage); } public override bool LSet(string key, long index, object value) { return _client.LSet(key, index, value); } /// /// 列表插入头部 /// /// /// /// /// public override long LPush(string key, params T[] value) { return _client.LPush(key,value); } /// /// 列表弹出头部 /// /// /// /// public override T LPop(string key) { return _client.LPop(key); } public override string[] Keys(string pattern) { return _client.Keys(pattern); } } }