日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

.net core 使用redis 基于 StackExchange.Redis

發(fā)布時(shí)間:2024/1/17 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .net core 使用redis 基于 StackExchange.Redis 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一.添加引用包 StackExchange.Redis Microsoft.Extensions.Configuration 二.修改配置文件 appsettings.json {"RedisConfig": {"Redis_Default": {"Connection": "127.0.0.1: 6379","InstanceName": "Redis1: "},"Redis_6": {"Connection": "127.0.0.1: 6379","DefaultDatabase": 6,"InstanceName": "Redis2: "}} }

?

三.簡單封裝 RedisClient.cs類 1 public class RedisClient : IDisposable 2 { 3 private IConfigurationRoot _config; 4 private ConcurrentDictionary<string, ConnectionMultiplexer> _connections; 5 public RedisClient(IConfigurationRoot config) 6 { 7 _config = config; 8 _connections = new ConcurrentDictionary<string, ConnectionMultiplexer>(); 9 } 10 /// <summary> 11 /// 獲取ConnectionMultiplexer 12 /// </summary> 13 /// <param name="redisConfig">RedisConfig配置文件</param> 14 /// <returns></returns> 15 private ConnectionMultiplexer GetConnect(IConfigurationSection redisConfig) 16 { 17 var redisInstanceName = redisConfig["InstanceName"]; 18 var connStr = redisConfig["Connection"]; 19 return _connections.GetOrAdd(redisInstanceName, p => ConnectionMultiplexer.Connect(connStr)); 20 } 21 /// <summary> 22 /// 檢查入?yún)?shù) 23 /// </summary> 24 /// <param name="configName">RedisConfig配置文件中的 Redis_Default/Redis_6 名稱</param> 25 /// <returns></returns> 26 private IConfigurationSection CheckeConfig(string configName) 27 { 28 IConfigurationSection redisConfig = _config.GetSection("RedisConfig").GetSection(configName); 29 if (redisConfig == null) 30 { 31 throw new ArgumentNullException($"{configName}找不到對應(yīng)的RedisConfig配置!"); 32 } 33 var redisInstanceName = redisConfig["InstanceName"]; 34 var connStr = redisConfig["Connection"]; 35 if (string.IsNullOrEmpty(redisInstanceName)) 36 { 37 throw new ArgumentNullException($"{configName}找不到對應(yīng)的InstanceName"); 38 } 39 if (string.IsNullOrEmpty(connStr)) 40 { 41 throw new ArgumentNullException($"{configName}找不到對應(yīng)的Connection"); 42 } 43 return redisConfig; 44 } 45 /// <summary> 46 /// 獲取數(shù)據(jù)庫 47 /// </summary> 48 /// <param name="configName"></param> 49 /// <param name="db">默認(rèn)為0:優(yōu)先代碼的db配置,其次config中的配置</param> 50 /// <returns></returns> 51 public IDatabase GetDatabase(string configName = null, int? db = null) 52 { 53 int defaultDb = 0; 54 IConfigurationSection redisConfig = CheckeConfig(configName); 55 if (db.HasValue) 56 { 57 defaultDb = db.Value; 58 } 59 else 60 { 61 var strDefalutDatabase = redisConfig["DefaultDatabase"]; 62 if (!string.IsNullOrEmpty(strDefalutDatabase) && Int32.TryParse(strDefalutDatabase, out var intDefaultDatabase)) 63 { 64 defaultDb = intDefaultDatabase; 65 } 66 } 67 return GetConnect(redisConfig).GetDatabase(defaultDb); 68 } 69 70 public IServer GetServer(string configName = null, int endPointsIndex = 0) 71 { 72 IConfigurationSection redisConfig = CheckeConfig(configName); 73 var connStr = redisConfig["Connection"]; 74 75 var confOption = ConfigurationOptions.Parse((string)connStr); 76 return GetConnect(redisConfig).GetServer(confOption.EndPoints[endPointsIndex]); 77 } 78 79 public ISubscriber GetSubscriber(string configName = null) 80 { 81 IConfigurationSection redisConfig = CheckeConfig(configName); 82 return GetConnect(redisConfig).GetSubscriber(); 83 } 84 85 public void Dispose() 86 { 87 if (_connections != null && _connections.Count > 0) 88 { 89 foreach (var item in _connections.Values) 90 { 91 item.Close(); 92 } 93 } 94 } 95 }

?

因?yàn)镽edisClient 中使用了ConcurrentDictionary 所以,有了RedisClientSingleton.cs類 1 public class RedisClientSingleton 2 { 3 private static RedisClient _redisClinet; 4 private RedisClientSingleton() { } 5 6 private static object _lockObj = new object(); 7 public static RedisClient GetInstance(IConfigurationRoot config) 8 { 9 if (_redisClinet == null) 10 { 11 lock (_lockObj) 12 { 13 if (_redisClinet == null) 14 { 15 _redisClinet = new RedisClient(config); 16 } 17 } 18 } 19 return _redisClinet; 20 } 21 }

?

四.測試

1、控制臺(tái)程序 1)創(chuàng)建一個(gè)Controller程序 2)添加引用包 Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.Json 3)添加appsettings.json 添加以下 "RedisConfig": {"Redis_Default": {"Connection": "127.0.0.1:6379", "InstanceName": "Redis1:"},"Redis_6": {"Connection": "127.0.0.1:6379","DefaultDatabase": 6,"InstanceName": "Redis2:"}}

?

4)修改Program類 ①添加引用using Microsoft.Extensions.Configuration; ②修改Main 1 static void Main(string[] args) 2 { 3   var builder = new ConfigurationBuilder()
4 .SetBasePath(Directory.GetCurrentDirectory()) 5 .AddJsonFile("appsettings.json"); 6 IConfigurationRoot configuration = builder.Build(); 7 8   var redisClient = RedisClientSingleton.GetInstance(configuration); 9   var redisDatabase = redisClient.GetDatabase("Redis_Default"); 10 11   redisDatabase.StringSet("TestStrKey", "TestStrValue"); 12 }

?

③運(yùn)行后可以看到 2、web程序 ①創(chuàng)建一個(gè)core的mvc項(xiàng)目 ②修改Startup.cs文件 修改ConfigureServices函數(shù) public void ConfigureServices(IServiceCollection services) {...services.AddSingleton(Configuration);... }

?

其中的Configuration是 public IConfigurationRoot Configuration { get; } ③創(chuàng)建一個(gè)TestController 在修改構(gòu)造函數(shù) SimpleRedisExt _redisExt; public TokenTranslateController(IConfigurationRoot config)//, IConfigurationRoot config) {_config = config;IDatabase redisDataBase = RedisClientSingleton.GetInstance(_config).GetDatabase("Redis_Default"); }public string Post(string value) {redisDataBase.StringSet("TestMvcRedis", value); }

④運(yùn)行value = TestMvcRedisValue 后得到

?

隨手寫的,寫得比較糙。

轉(zhuǎn)載于:https://www.cnblogs.com/Cowait/p/6760491.html

總結(jié)

以上是生活随笔為你收集整理的.net core 使用redis 基于 StackExchange.Redis的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。