IE盒子

搜索
查看: 115|回复: 1

官方原生支持的两种ASP.NET Core分布式缓存

[复制链接]

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2023-1-3 12:20:17 | 显示全部楼层 |阅读模式
概述
.NET的内存缓存比较适合部署到单机,那么涉及到规模比较中大型网站,由于单机内存等环境的限制,已经不适合使用内存缓存了,另外如果内存缓存分布式部署可能会造成数据不同步、不能数据持久化、使用不方便等问题。这就需要使用分布式缓存了。分布式缓存由一个服务端实现管理和控制,有多个客户端节点存储数据,作为应用的外部共享服务缓存,根据一致性哈希算法等确定数据的存储和读取节点。分布式缓存有跨多个服务器请求、应用服务器宕机和重启后仍然有效、数据可以读写分离、高性能、高可用等优点。这篇文章介绍http://ASP.NET CORE 基于Redis和Sql Server分布式缓存。
一、使用概述

Redis和sql server分布式缓存的使用方法基本相同,来自于IDistributedCache接口和DistributedCacheExtensions扩展类。可以通过DistributedCacheEntryOptions类配置过期时间等。
1、读使用Get、GetString及其对应的异步方法。根据key键获取对应的值
2、写可以使用Set、SetString及其对应的异步方法

3、移除可以使用Remove及其对应的异步方法
下面分别举例说明redis和sql server分布式缓存的使用。


二、Redis分布式缓存
我们这里新建一个http://ASP.NET Core 6.0webAPI网站来演示使用,可以分为三步使用
1、安装redis依赖包
使用Redis分布式缓存需要安装Redis的支持包,可以通过nuget命令安装,如下
install-packageMicrosoft.Extensions.Caching.StackExchangeRedis2、在Program.cs文件中注册
注册需要配置链接地址和名称,如下:

builder.Services.AddStackExchangeRedisCache(option =>{option.Configuration="10.10.10.110:6379";
//链接地址   
option.InstanceName = "myredis";
//名字});3、在项目API控制中使用
首先服务注入,如下:
public IDistributedCache _cache;
public CacheController(IDistributedCache cache) {      
      _cache=cache;        }我们用三个接口方法来演示增加、获取、移除缓存,可以在增加的缓存使用配置设置过期时间,如下:

       [HttpPost]
   public async Task<IActionResult> Post()   
    {DistributedCacheEntryOptionsoptions=newDistributedCacheEntryOptions();
//相对过期时间请求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();        }这样可以运行程序试试,看能否正常运行。我们正常的情况下可以把这个封装成个类来使用更方便。
Redis分布式缓存优点是基于内存访问速度快,使用方便不用建表等。
三、Sql Server分布式缓存
Sql Server分布式缓存使用方法跟Redis分布式缓存大同小异,最大的不同是Sql Server分布式缓存需要建表,另外配置略有不同。同样我们使用上面的API来使用使用Sql Server分布式缓存,步骤如下:
1、安装Sql Server分布式缓存依赖包
install-packageMicrosoft.Extensions.Caching.SqlServer2、建库和生成表

新建一个名叫“CacheDB”表,并执行如下命令自动生成表。
dotnetsql-cachecreate"Server=localhost;User=sa;Password=123456;Database=CacheDB"dboAspNetCoreCache 这里有个坑,安装报错,错误提示如下:
找不到"dotnetsql-cache"命令,请运行以下命令进行安装dotnettoolinstall--globaldotnet-sql-cache
用提示命令安装继续报错,笔者通过查看nuget官网说明,需要带上指定版本号才能执行成功,如下:
dotnet tool install --global dotnet-sql-cache --version 6.0.0
这时候再执行dotnet sql-cache create后成功建表,并返回如下提示

Table and index were created successfully.
再来看看数据库,成功生成表和库




3、在Program.cs文件中注册
注册方式略有不同,如下:

builder.Services.AddDistributedSqlServerCache(option =>{  
  //option.SystemClock = new LocalSystemClock();
//这里为啥这样写,因为时区问题   
option.ConnectionString = "Server=localhost;User=sas;Password=654321;Database=CacheDB";option.SchemaName="dbo";
//指定类型
option.TableName="AspNetCoreCache";
//表名,默认,也可以在这指定   
option.DefaultSlidingExpiration = TimeSpan.FromMinutes(3);//设置默认过期时间});
//设置本地时区
public class LocalSystemClock : ISystemClock{     
   public DateTimeOffset UtcNow => DateTime.Now;}这样就完成了配置。API接口跟redis完全一样,这里就不再展示。写入的缓存效果如下



Sql Server分布式缓存的优点是持久化存储方便,微软官方支持兼容好,缺点是关系数据库读取速度没有redis快,但也能满足中小型网站使用。
结语
本文讲述了http://asp.net core二种分布式缓存的简单使用,具体大家可以封装成类来使用。希望本文对大家学习和工作有一定参考价值,同时欢迎大家留言讨论,谢谢大家的支持。

版权声明:本文来源于网友收集或网友提供,仅供学习交流之用,如果有侵权,请转告版主或者留言,本公众号立即删除。

关注:DotNet开发跳槽
回复

使用道具 举报

4

主题

5

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2023-1-3 12:20:57 | 显示全部楼层
csredis也不错。不推荐数据库版本的缓存,io容易出现瓶颈
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表