代码编织梦想


前言

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分布式缓存。

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/aa2528877987/article/details/128755578

大数据技术要点归纳-爱代码爱编程

大数据技术原理与应用 大数据的4V特征 数据量大(Volume)、数据类型繁多(Variety)、处理速度快(Velocity)、价值密度低(Value)。 HDFS 各个版本中,名称节点的数量 Hadoop1.0、Hadoop2.0 :1个 Hadoop3.0: 多个 负责 HDFS 数据存储的程序 数据节点(DataNode) HBase的表

springboot学习笔记【part14】spring cache + redis 集成缓存数据-爱代码爱编程

Spring Cache 是一个非常优秀的缓存组件,方便切换各种底层Cache(如:redis) 使用Spring Cache的好处: 提供基本的Cache抽象,方便切换各种底层Cache;通过注解Cache可以实现类似于

【redis】geo(地理坐标)数据结构-爱代码爱编程

【Redis】GEO(地理坐标)数据结构 文章目录 【Redis】GEO(地理坐标)数据结构1. GEO简介1.1 GEO常用命令 2. 实战示例2.1 场景介绍2.2 实战2.2.1 将店铺数据导入Redi

java客户端 - jedis-爱代码爱编程

Java客户端 - Jedis Jedis 是 Java 语言开发的 Redis 客户端工具包。Jedis 只是对 Redis 命令的封装,掌握 Redis 命令便可轻易上手。 Redis 前期准备: 进入 redis

redis数据类型简介-爱代码爱编程

目录 1、字符串(Strings) 1.1、底层实现 1.2、基本命令 1.3、应用场景 2、列表(Lists) 2.1、底层实现 2.2、基本命令 2.3、应用场景 3、集合(Sets) 3.1、底层实现 3.2、基本命令 3.3、应用场景 4、哈希(Hashes) 4.1、底层实现 4.2、基本命令 4.3、应用场景

redis基本类型和基本操作-爱代码爱编程

2.Redis常见命令 Redis是典型的key-value数据库,key一般是字符串,而value包含很多不同的数据类型: Redis为了方便我们学习,将操作不同数据类型的命令也做了分组,在官网( https://r

17道redis 面试题-爱代码爱编程

Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何

redis 发布订阅模式的深度解析与实现消息队列-爱代码爱编程

1 发布订阅模式(Pub/Sub)的概述 我们可以利用Redis的List数据结构实现一 个简单的消息队列,通过lpush命令写入消息,通过rpop 命令拉取消息,也可以使用BRPOP实现阻塞式的拉取消息。 上面的消息队列有一个缺点,那就是不支持消息多播机制,消息多播机制就是生产者生产的一个消息可以被多个消费者消费到,这个功能在分布式系统中非常重

redis学习笔记-爱代码爱编程

Nosql概述 1、单机MySQL的年代 90年代,一个基本网站的访问量一般不会太大,单个数据库完全足够了。那个时候,更多的去使用静态网页HTML,服务器根本没有太大压力 思考一下,这种情况:整个网站的瓶颈是什么?

ssm框架13 mybatis缓存、一级缓存、二级缓存、缓存原理、自定义缓存ehcache-爱代码爱编程

文章目录 一、Mybatis缓存二、一级缓存三、二级缓存四、Mybatis缓存原理五、自定义缓存Ehcache 一、Mybatis缓存 缓存:缓存就是存在内存中的临时数据 查完之后存到缓存,再次查询