一、前言
日常开发中,我们常需要操作redis,本章节介绍ASP.Net Core 使用StackExchange.Redis
Docs:https://stackexchange.github.io/StackExchange.Redis/
二、介绍
StackExchange.Redis 是适用于 .NET 语言(C# 等)的高性能通用 Redis 客户端。它是BookSleeve的逻辑继承者,是由Stack Exchange为Stack Overflow等繁忙网站开发(并使用)的客户端。
特征
- 高性能多路复用设计,允许高效使用多个调用线程的共享连接
- 对 Redis 节点配置的抽象:客户端可以默默地协商多个 Redis 服务器以实现稳健性和可用性
- 方便地访问完整的 Redis 功能集
- 同步和异步使用的完整双编程模型,无需使用 TPL“同步优于异步”
- 支持redis“集群”
三、创建项目
四、添加StackExchange.Redis引用
-
打开管理Nuget程序包
-
搜索StackExchange.Redis
-
之前选择的目标框架是ASP.NET Core 5.0,所以安装StackExchange.Redis v2.6.116
-
安装完成
五、简单使用
-
通过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(); } } }
-
通过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
默认数据库索引,从 0
到databases - 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, else2.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