首页 > 数据库 >C#ASP.Net Core 5.0 使用StackExchange.Redis

C#ASP.Net Core 5.0 使用StackExchange.Redis

时间:2024-03-26 20:23:29浏览次数:17  
标签:5.0 Core ASP string redis Redis redisOptions StackExchange null

一、前言

日常开发中,我们常需要操作redis,本章节介绍ASP.Net Core 使用StackExchange.Redis

Docs:https://stackexchange.github.io/StackExchange.Redis/

二、介绍

StackExchange.Redis 是适用于 .NET 语言(C# 等)的高性能通用 Redis 客户端。它是BookSleeve的逻辑继承者,是由Stack ExchangeStack Overflow等繁忙网站开发(并使用)的客户端。

特征

  • 高性能多路复用设计,允许高效使用多个调用线程的共享连接
  • 对 Redis 节点配置的抽象:客户端可以默默地协商多个 Redis 服务器以实现稳健性和可用性
  • 方便地访问完整的 Redis 功能集
  • 同步和异步使用的完整双编程模型,无需使用 TPL“同步优于异步
  • 支持redis“集群”

三、创建项目

四、添加StackExchange.Redis引用

  1. 打开管理Nuget程序包

  2. 搜索StackExchange.Redis

  3. 之前选择的目标框架是ASP.NET Core 5.0,所以安装StackExchange.Redis v2.6.116

  4. 安装完成

五、简单使用

  1. 通过ConfigurationOptions连接redis服务

    using System;
    
    namespace StackExchange.Redis.ASPNetCore
    {
        class Program
        {
            static void Main(string[] args)
            {
                ConfigurationOptions redisOptions = new ConfigurationOptions();
                string host = "";//服务器地址
                int port = 6379;//端口号
                string serviceName = "";//用于通过sentinel解析服务的服务名称。
                string password = "";//密码
                string user = "";//用户名
                string key = "";//所需获取的key
                redisOptions.EndPoints.Add(host, port);
                redisOptions.AbortOnConnectFail = false; //获取或设置是否应通过TimeoutException显式通知连接/配置超时。
                redisOptions.ServiceName = serviceName;
                redisOptions.Password = password;
                redisOptions.User = user;
                ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(redisOptions);
                IDatabase db = connection.GetDatabase(0);
                var result = db.StringGet(key);
                Console.WriteLine(result);
                Console.ReadKey();
            }
        }
    }
    
  2. 通过configuration连接redis

    配置可参考:https://stackexchange.github.io/StackExchange.Redis/Configuration

    using System;
    
    namespace StackExchange.Redis.ASPNetCore
    {
        class Program
        {
            static void Main(string[] args)
            {
                string key = "";//所需获取的key
                string configuration = "host:port,abortConnect=false,servicename={string},password={string},user={string}";
                ConnectionMultiplexer connection = ConnectionMultiplexer.Connect(configuration);
                IDatabase db = connection.GetDatabase(0);
                var result = db.StringGet(key);
                Console.WriteLine(result);
                Console.ReadKey();
            }
        }
    }
    
    

    Configuration Options

    ConfigurationOptions对象具有广泛的属性,所有这些属性都在智能感知中得到了完整记录。一些更常见的选项包括:

    Configuration string(配置字符串) ConfigurationOptions(配置项) Default(默认值) Meaning(意义)
    abortConnect={bool} AbortOnConnectFail true (false on Azure) 如果为 true,Connect则在没有可用服务器时不会创建连接
    allowAdmin={bool} AllowAdmin false 启用一系列被认为有风险的命令
    channelPrefix={string} ChannelPrefix null 所有发布/订阅操作的可选通道前缀
    checkCertificateRevocation={bool} CheckCertificateRevocation true 一个布尔值,指定在身份验证过程中是否检查证书吊销列表。
    connectRetry={int} ConnectRetry 3 初始期间重复连接尝试的次数Connect
    connectTimeout={int} ConnectTimeout 5000 连接操作超时(毫秒)
    configChannel={string} ConfigurationChannel __Booksleeve_MasterChanged 用于传达配置更改的广播通道名称
    configCheckSeconds={int} ConfigCheckSeconds 60 检查配置的时间(秒)。如果支持的话,这可以作为交互式套接字的保持活动状态。
    defaultDatabase={int} DefaultDatabase null 默认数据库索引,从0databases - 1
    keepAlive={int} KeepAlive -1 发送消息以帮助保持套接字处于活动状态的时间(秒)(默认为 60 秒)
    name={string} ClientName null redis 内连接的标识
    password={string} Password null redis服务器的密码
    user={string} User null Redis 服务器的用户(与 Redis 6 及更高版本上的 ACL 一起使用)
    proxy={proxy type} Proxy Proxy.None 使用的代理类型(如果有);例如“twemproxy/envoyproxy”
    resolveDns={bool} ResolveDns false 指定 DNS 解析应该是显式且急切的,而不是隐式的
    serviceName={string} ServiceName null 用于连接到哨兵主要服务
    ssl={bool} Ssl false 指定应使用 SSL 加密
    sslHost={string} SslHost null 在服务器证书上强制执行特定的 SSL 主机身份
    sslProtocols={enum} SslProtocols null 使用加密连接时支持的 Ssl/Tls 版本。使用“|” 提供多个值。
    syncTimeout={int} SyncTimeout 5000 允许同步操作的时间(毫秒)
    asyncTimeout={int} AsyncTimeout SyncTimeout 允许异步操作的时间(毫秒)
    tiebreaker={string} TieBreaker __Booksleeve_TieBreak 用于在不明确的主要场景中选择服务器的关键
    version={string} DefaultVersion (4.0 in Azure, else 2.0) Redis 版本级别(当服务器不提供此功能时有用)
    tunnel={string} Tunnel null 连接隧道(用于http:{proxy url}基于“连接”的代理服务器)
    setlib={bool} SetClientLibrary true 是否尝试使用CLIENT SETINFO设置连接上的库名称/版本
    protocol={string} Protocol null 使用的Redis协议;请参阅下面的部分

六、哨兵模式使用

​ 在日常工作中,redis基本不会仅有一个服务器在工作,这会使系统有巨大的风险,一旦redis服务宕机了,依赖redis的服务就会跟随宕机,所以我们基本会采用一个redis集群(一台Master + sentinel角色,两台Slave + sentinel角色)。通过哨兵模式提高redis集群的可用性和稳定性。

using System;
using System.Collections.Generic;

namespace StackExchange.Redis.ASPNetCore
{
    class Program
    {
        static void Main(string[] args)
        {
            string key = "";//所需获取的key
            ConfigurationOptions sentinelOptions = new ConfigurationOptions();
            List<string> sentinelAdressList = new List<string>();
            sentinelAdressList.Add("");//服务器地址
            sentinelAdressList.Add("");//服务器地址
            sentinelAdressList.Add("");//服务器地址
            int sentinelPort = 6379;//端口号
            string serviceName = "";//用于通过sentinel解析服务的服务名称。
            string password = "";//密码
            string user = "";//用户名
            foreach (var sentinel in sentinelAdressList)
            {
                sentinelOptions.EndPoints.Add(sentinel, sentinelPort);
            }
            sentinelOptions.CommandMap = CommandMap.Sentinel;//命令映射设置成哨兵
            sentinelOptions.AbortOnConnectFail = false;//获取或设置是否应通过TimeoutException显式通知连接/配置超时。
            sentinelOptions.ServiceName = serviceName;
            sentinelOptions.Password = password;

            ConfigurationOptions redisOptions = new ConfigurationOptions();
            redisOptions.AbortOnConnectFail = false;//获取或设置是否应通过TimeoutException显式通知连接/配置超时。
            redisOptions.ServiceName = serviceName;
            redisOptions.Password = password;       
            redisOptions.User = user;
            //创建连接到Sentinel服务器的ConnectionMultiplexer实例
            ConnectionMultiplexer _sentinelConnect = ConnectionMultiplexer.SentinelConnect(sentinelOptions);
            var masterConnection = _sentinelConnect.GetSentinelMasterConnection(redisOptions);
            IDatabase db = masterConnection.GetDatabase(0);
            var result = db.StringGet(key);
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}

标签:5.0,Core,ASP,string,redis,Redis,redisOptions,StackExchange,null
From: https://www.cnblogs.com/YuYangBlogs/p/18096784

相关文章

  • .NET Core 简介
       微软于2016年推出了新一代的开发平台,并且将其命名为.NETCore。相较于旧的.NETFramework。.NETCore有如下优点:  1).NETCore采用模块化开发。不再像.NETFramework那样需要安装整个安装包。.NETCore核心只包含很少的文件,所有其他模块都需要单独安装。根据需要引用......
  • [AGE] Eushully ASProtect 脱壳
    [AGE引擎]EushullyASProtect脱壳AGE引擎的ASProtect主要在2013年左右的版本上,2017年的天結いキャッスルマイスター已经采用了PlayDRM。ASProtect主要加在AGE.EXE和AGERC.DLL上,前者为游戏主程序,后者为游戏的资源DLL(标题菜单,模态窗口),AGERC.DLL容易被加壳软件识别为ASPack,......
  • 一个基于.NET Core构建的简单、跨平台、模块化的商城系统
    前言今天大姚给大家分享一个基于.NETCore构建的简单、跨平台、模块化、完全开源免费(MITLicense)的商城系统:ModuleShop。商城后台管理端功能商品:分类、品牌、单位、选项(销售属性)、属性、属性模板、属性组。销售:订单、物流。内容:首页配置、评论、回复。配置:国家、用......
  • 一个基于.NET Core构建的简单、跨平台、模块化的商城系统
    前言今天大姚给大家分享一个基于.NETCore构建的简单、跨平台、模块化、完全开源免费(MITLicense)的商城系统:ModuleShop。商城后台管理端功能商品:分类、品牌、单位、选项(销售属性)、属性、属性模板、属性组。销售:订单、物流。内容:首页配置、评论、回复。配置:国家、用户、仓......
  • asp net在View视图下通过javascript访问服务器上的文件
    以通过javascript访问服务器上的文件为例控制器:[HttpPost]publicActionResultCheckFileExists(stringaFile){//检查文件是否存在if(System.IO.File.Exists(aFile))//theFile包括完整的路径和文件{returnContent("文件存在");}else{......
  • .net core上传文件、.net core接收文件上传
    我要做一个winform程序,上传文件到.net8的文件上传接口winform///<summary>///选择图片上传///</summary>///<paramname="sender"></param>///<paramname="e"></param>privateasyncvoidbtnExtract_Click(objectsender,Even......
  • 【插件更新日志】新发布的1.5.0版本插件中的增强模式,作用几何?
    近日,我们的插件迎来了自发布以来的首个大更新,发布了1.5.0版,更新了多个新特性,今天就带您来了解一下其中的【增强】模式。一、令人头疼的兼容性问题如上图所示,这是在MTK天玑7200-Ultra芯片下测试同一人体姿态识别的效果,未开启【增强】模式时,识别出的关键点错位严重,根本无法使......
  • .netcore获得swagger对象信息(解析swagger的json文件)
    以下代码未经测试,谨慎使用!!! varreader=newMicrosoft.OpenApi.Readers.OpenApiStringReader();vardoc=reader.Read(System.IO.File.ReadAllText(_webHostEnvironment.WebRootPath+"/a.json"),outvardiagnostic);vardoc1=_swaggerGenerator.GetSwagger(versio......
  • ASP.NET Core 图片转 PDF
    前几天用DocNETPDF转图片,现在再用DocNET把图片合并回PDF…使用DocNET:https://github.com/GowenGit/docnetNuget:Install-PackageDocnet.Core合并比拆分简单:publicstaticboolImages2Pdf(List<string>imageList,stringoutputPath){boolr......
  • ASP.NET Core 切分、合并 PDF
    继续使用DocNET:https://github.com/GowenGit/docnetNuget:Install-PackageDocnet.Core切分PDF注意,DocNET的Split方法的索引是从0开始的,所以我们认为的获取PDF的第三到第五页,在DocNET的Split方法其实是从第二到第四页…publicstaticboolSplitPdf(string......