2023年5月,.NET CORE如何利用Redis和Sql Server实现分布式缓存改写案例?

2026-03-30 15:281阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1239个文字,预计阅读时间需要5分钟。

2023年5月,.NET CORE如何利用Redis和Sql Server实现分布式缓存改写案例?

(文章目录)+ 前言 + 1. 分布式缓存的概述 + 缓存这种能力足以提升指令和数据读取速度的特性,随着本地计算机系统向分布式系统扩展,在分布式计算领域得到了广泛的应用,被称为分布式缓存。

(文章目录)


前言

1.分布式缓存的概念

缓存这种能够提升指令和数据读取速度的特性,随着本地计算机系统向分布式系统的扩展,在分布式计算领域中得到了广泛的应用,称为分布式缓存。

2.分布式缓存的作用

分布式缓存由一个服务端实现管理和控制,有多个客户端节点存储数据,作为应用的外部共享服务缓存,根据一致性哈希算法等确定数据的存储和读取节点。分布式缓存有跨多个服务器请求、应用服务器宕机和重启后仍然有效、数据可以读写分离、高性能、高可用等优点。

分布式缓存能够高性能地读取数据、能够动态地扩展缓存节点、能够自动发现和切换故障节点、能够自动均衡数据分区,而且能够为使用者提供图形化的管理界面,部署和维护都十分方便。

分布式缓存已经在分布式领域、云计算领域得到了广泛的应用。

3..NET CORE中的分布式缓存

在.NET CORE中Redis和sql server分布式缓存的使用方法基本相同,主要是基于IDistributedCache接口和DistributedCacheExtensions扩展类。可以通过DistributedCacheEntryOptions类配置过期时间等。

  • 读使用Get、GetString及其对应的异步方法。根据key键获取对应的值
  • 写可以使用Set、SetString及其对应的异步方法
  • 移除可以使用Remove及其对应的异步方法

这篇文章介绍ASP.NET CORE 基于Redis和Sql Server分布式缓存。

官方文档:learn.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed?view=aspnetcore-7.0#distributed-redis-cache

一、基于Redis分布式缓存

这里新建一个ASP.NET Core 7.0 web API网站来演示使用

1.安装包

使用Redis分布式缓存需要安装Redis的支持包,可以通过nuget命令安装,如下:

install-package Microsoft.Extensions.Caching.StackExchangeRedis

2.在Program.cs文件中注册

builder.Services.AddStackExchangeRedisCache(option => { option.Configuration = "127.0.0.1:6379";//链接地址 option.InstanceName = "myredis";//名字 });

3.在项目API控制中使用

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Distributed; namespace ConsoleWeb.Controllers { [ApiController] [Route("[controller]")] public class CacheController : ControllerBase { public IDistributedCache _cache; public CacheController(IDistributedCache cache) { _cache = cache; } [HttpPost] public async Task<IActionResult> Post() { DistributedCacheEntryOptions options = new DistributedCacheEntryOptions(); //相对过期时间 请求10分钟内有再次请求会再延长十分钟,否则失效 //options.SlidingExpiration = TimeSpan.FromSeconds(10); //2. 绝对过期时间(两种形式) 绝对是请求5秒过期无论使用与否都失效 options.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(80); //options.AbsoluteExpiration= new DateTimeOffset(DateTime.Parse("2022-08-27 16:33:10")); await _cache.SetStringAsync("KeyName", "Cache"); return Ok(); } [HttpGet] public async Task<IActionResult> rGet() { await _cache.GetStringAsync("KeyName"); return Ok(); } [HttpDelete] public async Task<IActionResult> Delete() { await _cache.RemoveAsync("KeyName"); return Ok(); } } }

二、基于Sql Server分布式缓存

Sql Server分布式缓存使用方法跟Redis分布式缓存大同小异,最大的不同是Sql Server分布式缓存需要建表,另外配置略有不同。

1.安装Sql Server分布式缓存依赖包

install-package Microsoft.Extensions.Caching.SqlServer

2.建库和生成表

安装全局缓存

dotnet tool install --global dotnet-sql-cache

建表

dotnet sql-cache create "Server=localhost;User=sa;Password=1;Database=CacheDB;Encrypt=True;TrustServerCertificate=True;" dbo AspNetCoreCache

2023年5月,.NET CORE如何利用Redis和Sql Server实现分布式缓存改写案例?

3.在Program.cs文件中注册

#region 注册sqlserver缓存 builder.Services.AddDistributedSqlServerCache(option => { //option.SystemClock = new LocalSystemClock();//这里为啥这样写,因为时区问题 option.ConnectionString = "Server=localhost;User=sa;Password=1;Database=CacheDB;Encrypt=True;TrustServerCertificate=True;"; option.SchemaName = "dbo";//指定类型 option.TableName = "AspNetCoreCache";//表名,默认,也可以在这指定 option.DefaultSlidingExpiration = TimeSpan.FromMinutes(3);//设置默认过期时间 }); ////设置本地时区 //public class LocalSystemClock : ISystemClock //{ // public DateTimeOffset UtcNow => DateTime.Now; //} #endregion

4.在项目API控制中使用

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Distributed; namespace ConsoleWeb.Controllers { [ApiController] [Route("[controller]")] public class CacheController : ControllerBase { public IDistributedCache _cache; public CacheController(IDistributedCache cache) { _cache = cache; } [HttpPost] public async Task<IActionResult> Post() { DistributedCacheEntryOptions options = new DistributedCacheEntryOptions(); //相对过期时间 请求10分钟内有再次请求会再延长十分钟,否则失效 //options.SlidingExpiration = TimeSpan.FromSeconds(10); //2. 绝对过期时间(两种形式) 绝对是请求5秒过期无论使用与否都失效 options.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(80); //options.AbsoluteExpiration= new DateTimeOffset(DateTime.Parse("2022-08-27 16:33:10")); await _cache.SetStringAsync("KeyName", "Cache"); return Ok(); } [HttpGet] public async Task<IActionResult> rGet() { await _cache.GetStringAsync("KeyName"); return Ok(); } [HttpDelete] public async Task<IActionResult> Delete() { await _cache.RemoveAsync("KeyName"); return Ok(); } } }

Sql Server分布式缓存的优点是持久化存储方便,微软官方支持兼容好,缺点是关系数据库读取速度没有redis快,但也能满足中小型网站使用。

总结

本文主要介绍了基于Redis和Sql Server分布式缓存,而且两个可以同时使用。

本文共计1239个文字,预计阅读时间需要5分钟。

2023年5月,.NET CORE如何利用Redis和Sql Server实现分布式缓存改写案例?

(文章目录)+ 前言 + 1. 分布式缓存的概述 + 缓存这种能力足以提升指令和数据读取速度的特性,随着本地计算机系统向分布式系统扩展,在分布式计算领域得到了广泛的应用,被称为分布式缓存。

(文章目录)


前言

1.分布式缓存的概念

缓存这种能够提升指令和数据读取速度的特性,随着本地计算机系统向分布式系统的扩展,在分布式计算领域中得到了广泛的应用,称为分布式缓存。

2.分布式缓存的作用

分布式缓存由一个服务端实现管理和控制,有多个客户端节点存储数据,作为应用的外部共享服务缓存,根据一致性哈希算法等确定数据的存储和读取节点。分布式缓存有跨多个服务器请求、应用服务器宕机和重启后仍然有效、数据可以读写分离、高性能、高可用等优点。

分布式缓存能够高性能地读取数据、能够动态地扩展缓存节点、能够自动发现和切换故障节点、能够自动均衡数据分区,而且能够为使用者提供图形化的管理界面,部署和维护都十分方便。

分布式缓存已经在分布式领域、云计算领域得到了广泛的应用。

3..NET CORE中的分布式缓存

在.NET CORE中Redis和sql server分布式缓存的使用方法基本相同,主要是基于IDistributedCache接口和DistributedCacheExtensions扩展类。可以通过DistributedCacheEntryOptions类配置过期时间等。

  • 读使用Get、GetString及其对应的异步方法。根据key键获取对应的值
  • 写可以使用Set、SetString及其对应的异步方法
  • 移除可以使用Remove及其对应的异步方法

这篇文章介绍ASP.NET CORE 基于Redis和Sql Server分布式缓存。

官方文档:learn.microsoft.com/zh-cn/aspnet/core/performance/caching/distributed?view=aspnetcore-7.0#distributed-redis-cache

一、基于Redis分布式缓存

这里新建一个ASP.NET Core 7.0 web API网站来演示使用

1.安装包

使用Redis分布式缓存需要安装Redis的支持包,可以通过nuget命令安装,如下:

install-package Microsoft.Extensions.Caching.StackExchangeRedis

2.在Program.cs文件中注册

builder.Services.AddStackExchangeRedisCache(option => { option.Configuration = "127.0.0.1:6379";//链接地址 option.InstanceName = "myredis";//名字 });

3.在项目API控制中使用

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Distributed; namespace ConsoleWeb.Controllers { [ApiController] [Route("[controller]")] public class CacheController : ControllerBase { public IDistributedCache _cache; public CacheController(IDistributedCache cache) { _cache = cache; } [HttpPost] public async Task<IActionResult> Post() { DistributedCacheEntryOptions options = new DistributedCacheEntryOptions(); //相对过期时间 请求10分钟内有再次请求会再延长十分钟,否则失效 //options.SlidingExpiration = TimeSpan.FromSeconds(10); //2. 绝对过期时间(两种形式) 绝对是请求5秒过期无论使用与否都失效 options.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(80); //options.AbsoluteExpiration= new DateTimeOffset(DateTime.Parse("2022-08-27 16:33:10")); await _cache.SetStringAsync("KeyName", "Cache"); return Ok(); } [HttpGet] public async Task<IActionResult> rGet() { await _cache.GetStringAsync("KeyName"); return Ok(); } [HttpDelete] public async Task<IActionResult> Delete() { await _cache.RemoveAsync("KeyName"); return Ok(); } } }

二、基于Sql Server分布式缓存

Sql Server分布式缓存使用方法跟Redis分布式缓存大同小异,最大的不同是Sql Server分布式缓存需要建表,另外配置略有不同。

1.安装Sql Server分布式缓存依赖包

install-package Microsoft.Extensions.Caching.SqlServer

2.建库和生成表

安装全局缓存

dotnet tool install --global dotnet-sql-cache

建表

dotnet sql-cache create "Server=localhost;User=sa;Password=1;Database=CacheDB;Encrypt=True;TrustServerCertificate=True;" dbo AspNetCoreCache

2023年5月,.NET CORE如何利用Redis和Sql Server实现分布式缓存改写案例?

3.在Program.cs文件中注册

#region 注册sqlserver缓存 builder.Services.AddDistributedSqlServerCache(option => { //option.SystemClock = new LocalSystemClock();//这里为啥这样写,因为时区问题 option.ConnectionString = "Server=localhost;User=sa;Password=1;Database=CacheDB;Encrypt=True;TrustServerCertificate=True;"; option.SchemaName = "dbo";//指定类型 option.TableName = "AspNetCoreCache";//表名,默认,也可以在这指定 option.DefaultSlidingExpiration = TimeSpan.FromMinutes(3);//设置默认过期时间 }); ////设置本地时区 //public class LocalSystemClock : ISystemClock //{ // public DateTimeOffset UtcNow => DateTime.Now; //} #endregion

4.在项目API控制中使用

using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Distributed; namespace ConsoleWeb.Controllers { [ApiController] [Route("[controller]")] public class CacheController : ControllerBase { public IDistributedCache _cache; public CacheController(IDistributedCache cache) { _cache = cache; } [HttpPost] public async Task<IActionResult> Post() { DistributedCacheEntryOptions options = new DistributedCacheEntryOptions(); //相对过期时间 请求10分钟内有再次请求会再延长十分钟,否则失效 //options.SlidingExpiration = TimeSpan.FromSeconds(10); //2. 绝对过期时间(两种形式) 绝对是请求5秒过期无论使用与否都失效 options.AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(80); //options.AbsoluteExpiration= new DateTimeOffset(DateTime.Parse("2022-08-27 16:33:10")); await _cache.SetStringAsync("KeyName", "Cache"); return Ok(); } [HttpGet] public async Task<IActionResult> rGet() { await _cache.GetStringAsync("KeyName"); return Ok(); } [HttpDelete] public async Task<IActionResult> Delete() { await _cache.RemoveAsync("KeyName"); return Ok(); } } }

Sql Server分布式缓存的优点是持久化存储方便,微软官方支持兼容好,缺点是关系数据库读取速度没有redis快,但也能满足中小型网站使用。

总结

本文主要介绍了基于Redis和Sql Server分布式缓存,而且两个可以同时使用。