分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

.net core下Redis帮助类

发布时间:2023-09-06 02:34责任编辑:郭大石关键词:暂无标签
原文:.net core下Redis帮助类

    0.引入.net core环境下Redis的NuGet包,StackExchange.Redis,现目前最新的2.0.519。
       

  1. 帮助类Code:
     ?1 using System; ?2 using System.Collections.Generic; ?3 using StackExchange.Redis; ?4 using Newtonsoft.Json; ?5 using YJT.Web.lib; ?6 using YJT.Common.Log; ?7 ??8 namespace YJT.Web.Redis ?9 { 10 ????/// <summary> 11 ????/// Redis帮助类 12 ????/// </summary> 13 ????public class RedisHelper 14 ????{ 15 ????????//单例模式 16 ????????public static RedisCommon Default { get { return new RedisCommon(); } } 17 ????????public static RedisCommon One { get { return new RedisCommon(1, UtilConf.Configuration["RedisConfig:ReadWriteHosts"] ?? "127.0.0.1:6789"); } } 18 ????????public static RedisCommon Two { get { return new RedisCommon(2, UtilConf.Configuration["RedisConfig:ReadWriteHosts"] ?? "127.0.0.1:6789"); } } 19 ????????public static RedisCommon Three { get { return new RedisCommon(3, UtilConf.Configuration["RedisConfig:ReadWriteHosts"] ?? "127.0.0.1:6789"); } } 20 ????} 21 ?22 ????/// <summary> 23 ????/// Redis操作类 24 ????/// 老版用的是ServiceStack.Redis ??25 ????/// .Net Core使用StackExchange.Redis的nuget包 26 ????/// </summary> 27 ????public class RedisCommon 28 ????{ 29 ????????//redis数据库连接字符串 30 ????????private string _conn = UtilConf.Configuration["RedisConfig:ReadWriteHosts"] ?? "127.0.0.1:6789"; 31 ????????private int _db = 0; 32 ?33 ????????//静态变量 保证各模块使用的是不同实例的相同链接 34 ????????private static ConnectionMultiplexer connection; 35 ?36 ????????/// <summary> 37 ????????/// 构造函数 38 ????????/// </summary> 39 ????????public RedisCommon() { } 40 ????????/// <summary> 41 ????????/// 构造函数 42 ????????/// </summary> 43 ????????/// <param name="db"></param> 44 ????????/// <param name="connectStr"></param> 45 ????????public RedisCommon(int db, string connectStr) 46 ????????{ 47 ????????????_db = db; 48 ????????????_conn = connectStr; 49 ????????} 50 ?51 ????????/// <summary> 52 ????????/// 缓存数据库,数据库连接 53 ????????/// </summary> 54 ????????public ConnectionMultiplexer CacheConnection 55 ????????{ 56 ????????????get 57 ????????????{ 58 ????????????????try 59 ????????????????{ 60 ????????????????????if (connection == null || !connection.IsConnected) 61 ????????????????????{ 62 ????????????????????????connection = new Lazy<ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect(_conn)).Value; 63 ????????????????????} 64 ????????????????} 65 ????????????????catch (Exception ex) 66 ????????????????{ 67 ????????????????????Log.Debug("RedisHelper->CacheConnection 出错\r\n", ex.Message.ToString()); 68 ????????????????????return null; 69 ????????????????} 70 ????????????????return connection; 71 ????????????} 72 ????????} 73 ?74 ????????/// <summary> 75 ????????/// 缓存数据库 76 ????????/// </summary> 77 ????????public IDatabase CacheRedis => CacheConnection.GetDatabase(_db); 78 ?79 ?80 ????????#region --KEY/VALUE存取-- 81 ????????/// <summary> 82 ????????/// 单条存值 83 ????????/// </summary> 84 ????????/// <param name="key">key</param> 85 ????????/// <param name="value">The value.</param> 86 ????????/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> 87 ????????public bool StringSet(string key, string value) 88 ????????{ 89 ????????????return CacheRedis.StringSet(key, value); 90 ????????} 91 ?92 ????????/// <summary> 93 ????????/// 保存单个key value 94 ????????/// </summary> 95 ????????/// <param name="key">Redis Key</param> 96 ????????/// <param name="value">保存的值</param> 97 ????????/// <param name="expiry">过期时间</param> 98 ????????/// <returns></returns> 99 ????????public bool StringSet(string key, string value, TimeSpan? expiry = default(TimeSpan?))100 ????????{101 ????????????return CacheRedis.StringSet(key, value, expiry);102 ????????}103 104 ????????/// <summary>105 ????????/// 保存多个key value106 ????????/// </summary>107 ????????/// <param name="arr">key</param>108 ????????/// <returns></returns>109 ????????public bool StringSet(KeyValuePair<RedisKey, RedisValue>[] arr)110 ????????{111 ????????????return CacheRedis.StringSet(arr);112 ????????}113 114 ????????/// <summary>115 ????????/// 批量存值116 ????????/// </summary>117 ????????/// <param name="keysStr">key</param>118 ????????/// <param name="valuesStr">The value.</param>119 ????????/// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns>120 ????????public bool StringSetMany(string[] keysStr, string[] valuesStr)121 ????????{122 ????????????var count = keysStr.Length;123 ????????????var keyValuePair = new KeyValuePair<RedisKey, RedisValue>[count];124 ????????????for (int i = 0; i < count; i++)125 ????????????{126 ????????????????keyValuePair[i] = new KeyValuePair<RedisKey, RedisValue>(keysStr[i], valuesStr[i]);127 ????????????}128 129 ????????????return CacheRedis.StringSet(keyValuePair);130 ????????}131 132 ????????/// <summary>133 ????????/// 保存一个对象134 ????????/// </summary>135 ????????/// <typeparam name="T"></typeparam>136 ????????/// <param name="key"></param>137 ????????/// <param name="obj"></param>138 ????????/// <returns></returns>139 ????????public bool SetStringKey<T>(string key, T obj, TimeSpan? expiry = default(TimeSpan?))140 ????????{141 ????????????string json = JsonConvert.SerializeObject(obj);142 ????????????return CacheRedis.StringSet(key, json, expiry);143 ????????}144 145 ????????/// <summary>146 ????????/// 追加值147 ????????/// </summary>148 ????????/// <param name="key"></param>149 ????????/// <param name="value"></param>150 ????????public void StringAppend(string key, string value)151 ????????{152 ????????????////追加值,返回追加后长度153 ????????????long appendlong = CacheRedis.StringAppend(key, value);154 ????????}155 156 ????????/// <summary>157 ????????/// 获取单个key的值158 ????????/// </summary>159 ????????/// <param name="key">Redis Key</param>160 ????????/// <returns></returns>161 ????????public RedisValue GetStringKey(string key)162 ????????{163 ????????????return CacheRedis.StringGet(key);164 ????????}165 166 ????????/// <summary>167 ????????/// 根据Key获取值168 ????????/// </summary>169 ????????/// <param name="key">键值</param>170 ????????/// <returns>System.String.</returns>171 ????????public string StringGet(string key)172 ????????{173 ????????????try174 ????????????{175 ????????????????return CacheRedis.StringGet(key);176 ????????????}177 ????????????catch (Exception ex)178 ????????????{179 ????????????????Log.Debug("RedisHelper->StringGet 出错\r\n", ex.Message.ToString());180 ????????????????return null;181 ????????????}182 ????????}183 184 ????????/// <summary>185 ????????/// 获取多个Key186 ????????/// </summary>187 ????????/// <param name="listKey">Redis Key集合</param>188 ????????/// <returns></returns>189 ????????public RedisValue[] GetStringKey(List<RedisKey> listKey)190 ????????{191 ????????????return CacheRedis.StringGet(listKey.ToArray());192 ????????}193 194 ????????/// <summary>195 ????????/// 批量获取值196 ????????/// </summary>197 ????????public string[] StringGetMany(string[] keyStrs)198 ????????{199 ????????????var count = keyStrs.Length;200 ????????????var keys = new RedisKey[count];201 ????????????var addrs = new string[count];202 203 ????????????for (var i = 0; i < count; i++)204 ????????????{205 ????????????????keys[i] = keyStrs[i];206 ????????????}207 ????????????try208 ????????????{209 210 ????????????????var values = CacheRedis.StringGet(keys);211 ????????????????for (var i = 0; i < values.Length; i++)212 ????????????????{213 ????????????????????addrs[i] = values[i];214 ????????????????}215 ????????????????return addrs;216 ????????????}217 ????????????catch (Exception ex)218 ????????????{219 ????????????????Log.Debug("RedisHelper->StringGetMany 出错\r\n", ex.Message.ToString());220 ????????????????return null;221 ????????????}222 ????????}223 224 ????????/// <summary>225 ????????/// 获取一个key的对象226 ????????/// </summary>227 ????????/// <typeparam name="T"></typeparam>228 ????????/// <param name="key"></param>229 ????????/// <returns></returns>230 ????????public T GetStringKey<T>(string key)231 ????????{232 ????????????return JsonConvert.DeserializeObject<T>(CacheRedis.StringGet(key));233 ????????}234 ????????#endregion235 236 237 ????????#region --删除设置过期--238 ????????/// <summary>239 ????????/// 删除单个key240 ????????/// </summary>241 ????????/// <param name="key">redis key</param>242 ????????/// <returns>是否删除成功</returns>243 ????????public bool KeyDelete(string key)244 ????????{245 ????????????return CacheRedis.KeyDelete(key);246 ????????}247 248 ????????/// <summary>249 ????????/// 删除多个key250 ????????/// </summary>251 ????????/// <param name="keys">rediskey</param>252 ????????/// <returns>成功删除的个数</returns>253 ????????public long KeyDelete(RedisKey[] keys)254 ????????{255 ????????????return CacheRedis.KeyDelete(keys);256 ????????}257 258 ????????/// <summary>259 ????????/// 判断key是否存储260 ????????/// </summary>261 ????????/// <param name="key">redis key</param>262 ????????/// <returns></returns>263 ????????public bool KeyExists(string key)264 ????????{265 ????????????return CacheRedis.KeyExists(key);266 ????????}267 268 ????????/// <summary>269 ????????/// 重新命名key270 ????????/// </summary>271 ????????/// <param name="key">就的redis key</param>272 ????????/// <param name="newKey">新的redis key</param>273 ????????/// <returns></returns>274 ????????public bool KeyRename(string key, string newKey)275 ????????{276 ????????????return CacheRedis.KeyRename(key, newKey);277 ????????}278 279 ????????/// <summary>280 ????????/// 删除hasekey281 ????????/// </summary>282 ????????/// <param name="key"></param>283 ????????/// <param name="hashField"></param>284 ????????/// <returns></returns>285 ????????public bool HaseDelete(RedisKey key, RedisValue hashField)286 ????????{287 ????????????return CacheRedis.HashDelete(key, hashField);288 ????????}289 290 ????????/// <summary>291 ????????/// 移除hash中的某值292 ????????/// </summary>293 ????????/// <typeparam name="T"></typeparam>294 ????????/// <param name="key"></param>295 ????????/// <param name="dataKey"></param>296 ????????/// <returns></returns>297 ????????public bool HashRemove(string key, string dataKey)298 ????????{299 ????????????return CacheRedis.HashDelete(key, dataKey);300 ????????}301 302 ????????/// <summary>303 ????????/// 设置缓存过期304 ????????/// </summary>305 ????????/// <param name="key"></param>306 ????????/// <param name="datetime"></param>307 ????????public void SetExpire(string key, DateTime datetime)308 ????????{309 ????????????CacheRedis.KeyExpire(key, datetime);310 ????????}311 ????????#endregion312 ????}313 }
    View Code
  2. using引用备注:
    using Newtonsoft.Json;//为第三方转json 对象使用的,再熟悉不过了吧
    using YJT.Common.Log;//是一个记录日志的帮助的类,你可以用你自己的来记录日志。
    using YJT.Web.lib;//此引用是获取.net core中的appsettings.json中配置的信息。 UtilConf.Configuration["RedisConfig:ReadWriteHosts"]获取
  3. 获取appsettings.json的UtilConf.cs帮助类:
     1 using Microsoft.Extensions.Configuration; 2 using System; 3 using System.Collections.Generic; 4 using System.IO; 5 using System.Text; 6 ?7 namespace YJT.Web.lib 8 { 9 ????/// <summary>10 ????/// 读配置文件11 ????/// </summary>12 ????public class UtilConf13 ????{14 ????????private static IConfiguration config;15 16 ????????/// <summary>17 ????????/// 加载配置文件18 ????????/// </summary>19 ????????public static IConfiguration Configuration20 ????????{21 ????????????get22 ????????????{23 ????????????????if (config != null) return config;24 ????????????????config = new ConfigurationBuilder()25 ????????????????????.SetBasePath(Directory.GetCurrentDirectory())26 ????????????????????.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)27 ????????????????????.Build();28 ????????????????return config;29 ????????????}30 ????????????set => config = value;31 ????????}32 ????}33 }
    View Code

    此类主要是获取.net core 中的json配置信息。如:UtilConf.Configuration["RedisConfig:ReadWriteHosts"]

  4. StackExchange.Redis下的IDatabase接口还有丰富的操作方法,可自行研究补充帮助类

    分享至此,欢迎留言评论~~~

.net core下Redis帮助类

原文地址:https://www.cnblogs.com/lonelyxmas/p/10474497.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved