首页 > 其他分享 >.net Core 两种分布式缓存

.net Core 两种分布式缓存

时间:2023-02-08 23:35:17浏览次数:42  
标签:Core 缓存 option cache Server net public 分布式

 

前言

1.分布式缓存的概念

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

2.分布式缓存的作用

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

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

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

3…NET CORE中的分布式缓存  

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

  1. 读使用Get、GetString及其对应的异步方法。根据key键获取对应的值
  2. 写可以使用Set、SetString及其对应的异步方法
  3. 移除可以使用Remove及其对应的异步方法
  4. 这篇文章介绍ASP.NET CORE 基于Redis和Sql Server分布式缓存。

官方文档:https://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

 

 

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分布式缓存,而且两个可以同时使用。
————————————————

原文链接:https://blog.csdn.net/aa2528877987/article/details/128755578

标签:Core,缓存,option,cache,Server,net,public,分布式
From: https://www.cnblogs.com/xiangshifu/p/17103705.html

相关文章

  • CSharp: donet 7 create logging File with EF Core 7.02
    ///<summary>///https://learn.microsoft.com/zh-cn/ef/core/logging-events-diagnostics/simple-logging///</summary>///<paramname=......
  • ASP.NET Core — IStartupFilter 与 IHostingStartup
    1.IStartupFilter  上面讲到的方式虽然能够根据不同环境将Startup中的启动逻辑进行分离,但是有些时候我们还会可以根据应用中的功能点将将一系列相关中间件的注册封装到......
  • ASP.NET Core—入口文件
    1.入口文件  一个应用程序总有一个入口文件,是应用启动代码开始执行的地方,这里往往也会涉及到应用的各种配置。当我们接触到一个新框架的时候,可以从入口文件入手,了解入......
  • ASP.NET Core 系列总结
    《ASP.NETCore系列总结》《ASP.NETCore》系列文章基于.NET3.1和.NET6,主要是系统总结自己日常工作和学习中的知识点,也供大家参考,希望大家都能够对ASP.NETCore......
  • 【.NET 8】ASP.NET Core计划 - 支持更完善的AOT发布
    .NET7.0刚发布不久,.NET社区开始了.NET8.0的开发,重心重新回到了新功能的迭代。我们知道在.NET7.0中一个令人激动的特新就是支持了NativeAOT,我们可以通过NativeAOT生成本机......
  • 真正“搞”懂HTTP协议10之缓存控制
    HTTP缓存相关的问题好像是前端面试中比较常见的问题了,上来就会问什么cache-control字段有哪些,有啥区别啥的。嗯……说实话,我觉得至少在本篇来说,HTTP缓存还算不上复杂,只......
  • Windows离线安装.net Framework3.5
    写在前面本文主要介绍在Windows离线情况下安装.NETFramework3.5运行环境使用场景在日常开发C#程序中,经常会遇到开发过程中无任何问题,但是安装到目标电脑是会无法打开......
  • API对象--Ingress(chrono《kubernetes入门实战课》笔记整理)
    【概念说明】Service的功能和运行机制,主要由kube-proxy控制的四层负载均衡,即根据IP、PORT来做负载均衡。而很多应用都是在7层做均衡更为合理,比如根据主机名、URI、请求......
  • 开发高性能ASP.NET应用
    本文是“.NETConfChina2022”上我的一个分享,这里更细化的分享出来。分享分为四个部分:制定指示设计应用正确测试性能优化高性能:不一定是架构出来的......
  • 开发高性能ASP.NET应用
    本文是“.NETConfChina2022”上我的一个分享,这里更细化的分享出来。分享分为四个部分:制定指示设计应用正确测试性能优化高性能:不一定是架构出来的......