.net core使用redis基于StackExchange.Redis教程,具體如下
一.添加引用包
StackExchange.Redis Microsoft.Extensions.Configuration
二.修改配置文件 appsettings.json
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | public class RedisClient : IDisposable { private IConfigurationRoot _config; private ConcurrentDictionary<string, ConnectionMultiplexer> _connections; public RedisClient(IConfigurationRoot config) { _config = config; _connections = new ConcurrentDictionary<string, ConnectionMultiplexer>(); } /// <summary> /// 獲取ConnectionMultiplexer /// </summary> /// <param name="redisConfig">RedisConfig配置文件</param> /// <returns></returns> private ConnectionMultiplexer GetConnect(IConfigurationSection redisConfig) { var redisInstanceName = redisConfig[ "InstanceName" ]; var connStr = redisConfig[ "Connection" ]; return _connections.GetOrAdd(redisInstanceName, p => ConnectionMultiplexer.Connect(connStr)); } /// <summary> /// 檢查入?yún)?shù) /// </summary> /// <param name="configName">RedisConfig配置文件中的 Redis_Default/Redis_6 名稱</param> /// <returns></returns> private IConfigurationSection CheckeConfig(string configName) { IConfigurationSection redisConfig = _config.GetSection( "RedisConfig" ).GetSection(configName); if (redisConfig == null) { throw new ArgumentNullException($ "{configName}找不到對應(yīng)的RedisConfig配置!" ); } var redisInstanceName = redisConfig[ "InstanceName" ]; var connStr = redisConfig[ "Connection" ]; if (string.IsNullOrEmpty(redisInstanceName)) { throw new ArgumentNullException($ "{configName}找不到對應(yīng)的InstanceName" ); } if (string.IsNullOrEmpty(connStr)) { throw new ArgumentNullException($ "{configName}找不到對應(yīng)的Connection" ); } return redisConfig; } /// <summary> /// 獲取數(shù)據(jù)庫 /// </summary> /// <param name="configName"></param> /// <param name="db">默認為0:優(yōu)先代碼的db配置,其次config中的配置</param> /// <returns></returns> public IDatabase GetDatabase(string configName = null, int ? db = null) { int defaultDb = 0; IConfigurationSection redisConfig = CheckeConfig(configName); if (db.HasValue) { defaultDb = db.Value; } else { var strDefalutDatabase = redisConfig[ "DefaultDatabase" ]; if (!string.IsNullOrEmpty(strDefalutDatabase) && Int32.TryParse(strDefalutDatabase, out var intDefaultDatabase)) { defaultDb = intDefaultDatabase; } } return GetConnect(redisConfig).GetDatabase(defaultDb); } public IServer GetServer(string configName = null, int endPointsIndex = 0) { IConfigurationSection redisConfig = CheckeConfig(configName); var connStr = redisConfig[ "Connection" ]; var confOption = ConfigurationOptions.Parse((string)connStr); return GetConnect(redisConfig).GetServer(confOption.EndPoints[endPointsIndex]); } public ISubscriber GetSubscriber(string configName = null) { IConfigurationSection redisConfig = CheckeConfig(configName); return GetConnect(redisConfig).GetSubscriber(); } public void Dispose() { if (_connections != null && _connections.Count > 0) { foreach (var item in _connections.Values) { item.Close(); } } } } |
因為RedisClient 中使用了ConcurrentDictionary 所以,有了RedisClientSingleton.cs類
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class RedisClientSingleton { private static RedisClient _redisClinet; private RedisClientSingleton() { } private static object _lockObj = new object(); public static RedisClient GetInstance(IConfigurationRoot config) { if (_redisClinet == null) { lock (_lockObj) { if (_redisClinet == null) { _redisClinet = new RedisClient(config); } } } return _redisClinet; } } |
四.測試
1、控制臺程序
1)創(chuàng)建一個Controller程序 2)添加引用包 Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.Json 3)添加appsettings.json
添加以下
1 2 3 4 5 6 7 8 9 10 11 | "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 2 3 4 5 6 7 8 9 10 11 12 13 | static void Main(string[] args) { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile( "appsettings.json" ); IConfigurationRoot configuration = builder.Build(); var redisClient = RedisClientSingleton.GetInstance(configuration); var redisDatabase = redisClient.GetDatabase( "Redis_Default" ); redisDatabase.StringSet( "TestStrKey" , "TestStrValue" ); } |
③運行后可以看到
2、web程序
①創(chuàng)建一個core的mvc項目 ②修改Startup.cs文件 修改ConfigureServices函數(shù)
1 2 3 4 5 6 | public void ConfigureServices(IServiceCollection services) { ... services.AddSingleton(Configuration); ... } |
其中的Configuration是 public IConfigurationRoot Configuration { get; }
③創(chuàng)建一個TestController 在修改構(gòu)造函數(shù) SimpleRedisExt _redisExt;
1 2 3 4 5 6 7 8 9 10 | 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); } |
④運行value = TestMvcRedisValue 后得到
隨手寫的,寫得比較糙。