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

ServiceStack.Redis 的 ASP.NET Core 扩展库的更多相关文章

  1. Log4net 的 ASP.NET Core 扩展库

    给大家安利一款 log4net 的 ASP.NET Core 扩展库,它是基于 log4net 开发的. 简单易用,开源免费,使用ASP.NET Core自身提供的DI容器来实现服务的注册和消费.直接 ...

  2. ASP.NET Core扩展库

    亲爱的.Neter们,在我们日复一日的编码过程中是不是会遇到一些让人烦恼的事情: 日志配置太过复杂,各种模板.参数也搞不清楚,每次都要去查看日志库的文档,还需要复制粘贴一些重复代码,好无赖 当需要类型 ...

  3. ASP.NET Core扩展库之日志

        上一篇我们对Xfrogcn.AspNetCore.Extensions扩展库功能进行了简单的介绍,从这一篇文章开始,我将逐步介绍扩展库中的核心功能.     日志作为非业务的通用领域基础功能, ...

  4. ASP.NET Core扩展库之Http通用扩展

    本文将介绍Xfrogcn.AspNetCore.Extensions扩展库对于Http相关的其他功能扩展,这些功能旨在处理一些常见需求, 包括请求缓冲.请求头传递.请求头日志范围.针对HttpClie ...

  5. ASP.NET Core扩展库之Http请求模拟

    如今,完全独立的业务应用几乎不存在,不管是在企业内部微服务之间的调用,还是与外部第三方服务的调用,Http的API交互是常见的场景,这些实际情况给我们的开发带来了比较大的挑战,一是第三方服务可能会牵制 ...

  6. ASP.NET Core扩展库之实体映射

    在分层设计模式中,各层之间的数据通常通过数据传输对象(DTO)来进行数据的传递,而大多数情况下,各层数据的定义结构大同小异,如何在这些定义结构中相互转换,之前我们通过使用AutoMapper库,但Au ...

  7. ASP.NET MVC扩展库

    很多同学都读过这篇文章吧 ASP.NET MVC中你必须知道的13个扩展点,今天给大家介绍一个ASP.NET MVC的扩展库,主要就是针对这些扩展点进行.这个项目的核心是IOC容器,包括Ninject ...

  8. asp.net core实时库:SignalR(1)

    SignalR的基本概念 前言 最近在自己的项目中实践了SignalR的使用,asp.net core 2.1版本的时候建立了对SignalR的支持,SignalR的可使用Web Socket, Se ...

  9. Redis 入门与 ASP.NET Core 缓存

    目录 基础 Redis 库 连接 Redis 能用 redis 干啥 Redis 数据库存储 字符串 订阅发布 RedisValue ASP.NET Core 缓存与分布式缓存 内存中的缓存 ASP. ...

随机推荐

  1. MySQL数据库基础-3-SQL 基本概念

    SQL 基本概念 约束:constraint,表中的数据要遵守的限制 主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行:必须提供数据,即NOT NULL,一个表只能有一个 惟一键:一个 ...

  2. 开机自起tomcat

    开机自启动Tomcat: 每次开机都要启动tomcat,网上看了好多都是用shell脚本来实现tomcat开机自启动,后来看到一种方法,直接修改系统文件来实现,已经实践过,方法有效. 1.修改脚本文件 ...

  3. Disconnected from the target VM, address: '127.0.0.1:1135', transport: 'socket'-SpringBoot启动报错

    一.问题由来 本地代码在一次打包后,再次启动项目时报了一个错误,详细的错误信息如下: 2020-10-23 15:10:26.724 [] [main] INFO o.s.c.a.Annotation ...

  4. C. k-Amazing Numbers 解析(思維)

    Codeforce 1417 C. k-Amazing Numbers 解析(思維) 今天我們來看看CF1417C 題目連結 題目 略,請直接看原題. 前言 我實作好慢... @copyright p ...

  5. 监控制图OxyPlot组件的下载与安装

    1.在工具(T)-NuGet包管理器(N)-管理解决方案的NuGet程序包(N),打开组件管理界面 2.切换到浏览窗口,安装以下三个窗口组件即可 3.OxyPlot文档手册 https://oxypl ...

  6. Yii2使用数据库操作汇总(增删查改、事务)

    查询 //1.简单查询 $admin=Admin::model()->findAll($condition,$params); $admin=Admin::model()->findAll ...

  7. python爬虫scrapy框架

    Scrapy 框架 关注公众号"轻松学编程"了解更多. 一.简介 Scrapy是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架,用途非常广泛. 框架的力量 ...

  8. 线上Java程序占用 CPU 过高,请说一下排查方法?

    我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...

  9. NOIP 2012 P1081 开车旅行

    倍增 这道题最难的应该是预处理... 首先用$set$从后往前预处理出每一个点海拔差绝对值得最大值和次大值 因为当前城市的下标只能变大,对于点$i$,在$set$中二分找出与其值最接近的下标 然后再$ ...

  10. 获取List集合对象中某一列属性值

    例:获取disposeList集合中CorpusMarkPage对象中的responseId属性,生成新的List集合 List<String> responseIdList = disp ...