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

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;
}
}

最新文章

  1. AngularJS2
  2. 每天一个linux命令(25):linux文件属性详解
  3. .NET entityframework for mysql ,datetime字段存储值时有误差
  4. 模仿MFC封装Windows API
  5. 【java】由equals和==的区别引出的常量池知识
  6. Linq知识小结
  7. CSS自学笔记(14):CSS3动画效果
  8. github basic usage in windows
  9. django 下拉菜单显示为object的解决办法
  10. (三十三)Xcode项目的重要工程文件
  11. 一文带你了解 Spring 5.0 WebFlux 应用场景
  12. Appium+python自动化获取toast消息的方法
  13. 【angularjs】使用ionic+angular 搭建移动端项目,字体适配
  14. MySQL数据排序asc、desc
  15. Codeforces 839B Game of the Rows - 贪心
  16. 考勤管理系统V1.0.3
  17. with as (转)
  18. 20155314 2016-2017-2《Java程序设计》课程总结
  19. yii 后台配置独立子域名方法
  20. scrapy(1)——scrapy介绍

热门文章

  1. from lxml import etree报错
  2. 第十六章 IP子网的划分
  3. &lt;转&gt;二十问全链路压测干货汇总(上)
  4. arcgis activeX 安全提示消除办法
  5. C# 清除文本中的HTML标签
  6. Jmeter入门(4)- 注意事项
  7. elasticsearch启动报错
  8. docker容器学习资料
  9. Vue.js 获得兄弟元素,子元素,父元素(DOM操作)
  10. LuoguP3615 如厕计划