using Newtonsoft.Json; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace VueWebCoreApi.Tools { public class RedisCommon { //public static ILogger Log = UtilLogger.Log;//日志记录 //redis数据库连接字符串 private static readonly string RedisIpConnString = AppSetting.GetAppSetting("RedisConnIp"); private static readonly string RedisPortConnString = AppSetting.GetAppSetting("RedisConnPort"); private static readonly string RedisKeyTimeCont = AppSetting.GetAppSetting("RedisKeyTimeCont"); private string _conn = RedisIpConnString+":"+RedisPortConnString; private int _db = 0; //默认缓存过期时间单位秒 public int secondsTimeOut = Convert.ToInt32(RedisKeyTimeCont); //静态变量 保证各模块使用的是不同实例的相同链接 private static ConnectionMultiplexer connection; public RedisCommon() { } /// /// 构造函数 /// /// /// public RedisCommon(int db, string connectStr) { _conn = connectStr; _db = db; } /// /// 缓存数据库,数据库连接 /// public ConnectionMultiplexer CacheConnection { get { try { if (connection == null || !connection.IsConnected) { connection = new Lazy(() => ConnectionMultiplexer.Connect(_conn)).Value; } } catch (Exception ex) { //Log.LogError("RedisHelper->CacheConnection 出错\r\n" + ex.ToString()); return null; } return connection; } } /// /// 缓存数据库 /// public IDatabase CacheRedis => CacheConnection.GetDatabase(_db); #region --KEY/VALUE存取-- /// /// 单条存值 /// /// key /// The value. /// true if XXXX, false otherwise. public bool StringSet(string key, string value) { return CacheRedis.StringSet(key, value); } /// /// 保存单个key value /// /// Redis Key /// 保存的值 /// 过期时间 /// public bool StringSet(string key, string value, TimeSpan? expiry = default(TimeSpan?)) { return CacheRedis.StringSet(key, value, expiry); } /// /// 保存多个key value /// /// key /// public bool StringSet(KeyValuePair[] arr) { return CacheRedis.StringSet(arr); } /// /// 批量存值 /// /// key /// The value. /// true if XXXX, false otherwise. public bool StringSetMany(string[] keysStr, string[] valuesStr) { var count = keysStr.Length; var keyValuePair = new KeyValuePair[count]; for (int i = 0; i < count; i++) { keyValuePair[i] = new KeyValuePair(keysStr[i], valuesStr[i]); } return CacheRedis.StringSet(keyValuePair); } /// /// 保存一个对象 /// /// /// /// /// public bool SetStringKey(string key, T obj, TimeSpan? expiry = default(TimeSpan?)) { string json = JsonConvert.SerializeObject(obj); return CacheRedis.StringSet(key, json, expiry); } /// /// 追加值 /// /// /// public void StringAppend(string key, string value) { ////追加值,返回追加后长度 long appendlong = CacheRedis.StringAppend(key, value); } /// /// 获取单个key的值 /// /// Redis Key /// public RedisValue GetStringKey(string key) { return CacheRedis.StringGet(key); } /// /// 根据Key获取值 /// /// 键值 /// System.String. public string StringGet(string key) { try { return CacheRedis.StringGet(key); } catch (Exception ex) { //Log.LogError("RedisHelper->StringGet 出错\r\n" + ex.ToString()); return null; } } /// /// 获取多个Key /// /// Redis Key集合 /// public RedisValue[] GetStringKey(List listKey) { return CacheRedis.StringGet(listKey.ToArray()); } /// /// 批量获取值 /// public string[] StringGetMany(string[] keyStrs) { var count = keyStrs.Length; var keys = new RedisKey[count]; var addrs = new string[count]; for (var i = 0; i < count; i++) { keys[i] = keyStrs[i]; } try { var values = CacheRedis.StringGet(keys); for (var i = 0; i < values.Length; i++) { addrs[i] = values[i]; } return addrs; } catch (Exception ex) { //Log.LogError("RedisHelper->StringGetMany 出错\r\n" + ex.ToString()); return null; } } /// /// 获取一个key的对象 /// /// /// /// public T GetStringKey(string key) { try { return JsonConvert.DeserializeObject(CacheRedis.StringGet(key)); } catch (Exception ex) { //return new T(); return default(T); } } #endregion #region --删除设置过期-- /// /// 删除单个key /// /// redis key /// 是否删除成功 public bool KeyDelete(string key) { return CacheRedis.KeyDelete(key); } /// /// 删除多个key /// /// rediskey /// 成功删除的个数 public long KeyDelete(RedisKey[] keys) { return CacheRedis.KeyDelete(keys); } /// /// 判断key是否存储 /// /// redis key /// public bool KeyExists(string key) { return CacheRedis.KeyExists(key); } /// /// 重新命名key /// /// 就的redis key /// 新的redis key /// public bool KeyRename(string key, string newKey) { return CacheRedis.KeyRename(key, newKey); } /// /// 删除hasekey /// /// /// /// public bool HaseDelete(RedisKey key, RedisValue hashField) { return CacheRedis.HashDelete(key, hashField); } /// /// 移除hash中的某值 /// /// /// /// /// public bool HashRemove(string key, string dataKey) { return CacheRedis.HashDelete(key, dataKey); } /// /// 设置缓存过期 /// /// /// public void SetExpire(string key, int datetime) { CacheRedis.KeyExpire(key, DateTime.Now.AddSeconds(datetime)); } #endregion } }