ServiceStack.Redis 的 ASP.NET Core 扩展库

  • A+
所属分类:.NET技术
摘要

给大家安利一款 ServiceStack.Redis 的 ASP.NET Core 扩展库,它是基于 ServiceStack.Redis.Core 开发的。 简单易用,开源免费,使用ASP.NET Core自身提供的DI容器来实现针对服务的注册和消费。直接在程序启动时注册到服务中即可完成全部配置,对于小白用户也可快速上手Redis缓存和Redis分布式缓存。

给大家安利一款 ServiceStack.Redis 的 ASP.NET Core 扩展库,它是基于 ServiceStack.Redis.Core 开发的。 简单易用,开源免费,使用ASP.NET Core自身提供的DI容器来实现针对服务的注册和消费。直接在程序启动时注册到服务中即可完成全部配置,对于小白用户也可快速上手Redis缓存和Redis分布式缓存。

已解除ServiceStack.Redis每小时6000次请求的限制

Install Package

https://www.nuget.org/packages/ServiceStack.Redis.Extension.AspNetCore

Configure

Startup.cs

Single Server

public void ConfigureServices(IServiceCollection services) {     services.AddDistributedServiceStackRedisCache(options =>     {         // default single server: 127.0.0.1:6379         // services.AddServiceStackRedisCache();                  // customize single server         services.AddServiceStackRedisCache(options =>{         	options.SingleServer = "123456@127.0.0.1:6379";         });     }                                                        services.AddControllers(); } 

Read and write separation

public void ConfigureServices(IServiceCollection services) {     services.AddServiceStackRedisCache(options =>     {         options.ReadWriteServers = new[]         {             "192.168.1.1:6379", "123456@192.168.1.2:6379", "123456@192.168.1.3:6379", "123456@192.168.1.4:6379"         };         options.ReadOnlyServers = new[]         {             "192.168.1.1:6379", "123456@192.168.1.3:6379"         };     });      services.AddControllers(); } 

Load from configuration

public void ConfigureServices(IServiceCollection services) {     services.AddServiceStackRedisCache(Configuration.GetSection("ServiceStackRedisOptions"));      services.AddControllers(); } 

appsettings.Development.json

{   "ServiceStackRedisOptions": {     "SingleServer": "1234546@127.0.0.1:6379"   },   "Logging": {     "LogLevel": {       "Default": "Information",       "Microsoft": "Warning",       "Microsoft.Hosting.Lifetime": "Information"     }   } } 

appsetting.json

{   "ServiceStackRedisOptions": {     "ReadWriteServers": ["192.168.1.1:6379", "123456@192.168.1.2:6379", "123456@192.168.1.3:6379", "123456@192.168.1.4:6379"],     "ReadOnlyServers": ["192.168.1.1:6379", "123456@192.168.1.3:6379"]    },   "Logging": {     "LogLevel": {       "Default": "Information",       "Microsoft": "Warning",       "Microsoft.Hosting.Lifetime": "Information"     }   },   "AllowedHosts": "*" } 

ServiceStack.Redis Options

public class ServiceStackRedisOptions {     /// <summary>     ///     单机的地址,例如:127.0.0.1:6379(默认值)。如果你只用到一个Redis服务端,那么配置此项即可。     /// </summary>     public string SingleServer { get; set; } = "127.0.0.1:6379";      /// <summary>     ///     读写的地址,例如:{ "192.168.1.1:6379","123456@192.168.1.2:6379","123456@192.168.1.3:6379","123456@192.168.1.4:6379" }     /// </summary>     public string[] ReadWriteServers { get; set; }      /// <summary>     ///     只读地址,例如:{ "192.168.1.1:6379","123456@192.168.1.3:6379" }     /// </summary>     public string[] ReadOnlyServers { get; set; }      /// <summary>     ///     MaxWritePoolSize写的频率比读低。默认值 8     /// </summary>     public int MaxWritePoolSize { get; set; } = 8;      /// <summary>     ///     MaxReadPoolSize读的频繁比较多。默认值 12,Redis官方声明最大连接数为1W,但是连接数要控制。     /// </summary>     public int MaxReadPoolSize { get; set; } = 12;      /// <summary>     ///     连接最大的空闲时间。默认值 60,Redis官方默认是240     /// </summary>     public int IdleTimeOutSecs { get; set; } = 60;      /// <summary>     ///     连接超时时间,毫秒。默认值 6000     /// </summary>     public int ConnectTimeout { get; set; } = 6000;      /// <summary>     ///     数据发送超时时间,毫秒。默认值 6000     /// </summary>     public int SendTimeout { get; set; } = 6000;      /// <summary>     ///     数据接收超时时间,毫秒。默认值 6000     /// </summary>     public int ReceiveTimeout { get; set; } = 6000;      /// <summary>     ///     连接池取链接的超时时间,毫秒。默认值 6000     /// </summary>     public int PoolTimeout { get; set; } = 6000;      /// <summary>     ///     默认的数据库。默认值 0,Redis官方默认也是0     /// </summary>     public long DefaultDb { get; set; } = 0; } 

Usage

WeatherForecastController.cs

[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase {     private static readonly string[] Summaries = new[]     {         "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"     };      private readonly ILogger<WeatherForecastController> _logger;     private readonly IServiceStackRedisCache _redisCache;      public WeatherForecastController(ILogger<WeatherForecastController> logger, IServiceStackRedisCache redisCache)     {         _logger = logger;         this._redisCache = redisCache;     }      [HttpGet]     public IEnumerable<WeatherForecast> Get()     {         var array = _redisCache.Get<WeatherForecast[]>("WeatherForecast");         if (array == null)         {             var rng = new Random();             array = Enumerable.Range(1, 5).Select(index => new WeatherForecast             {                 Date = DateTime.Now.AddDays(index),                 TemperatureC = rng.Next(-20, 55),                 Summary = Summaries[rng.Next(Summaries.Length)]             }).ToArray();              // Cache for 30 minutes             _redisCache.Set("WeatherForecast", array, 60 * 1 * 30);         }          return array;     } }