美文网首页
ServiceStack.Redis 的 ASP.NET Cor

ServiceStack.Redis 的 ASP.NET Cor

作者: Run2948 | 来源:发表于2020-11-22 12:36 被阅读0次

    给大家安利一款 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;
        }
    }
    

    相关文章

      网友评论

          本文标题:ServiceStack.Redis 的 ASP.NET Cor

          本文链接:https://www.haomeiwen.com/subject/yeduiktx.html