StackExchange.Redis官方文档(二)【配置】

配置

配置Redis有很多不同的方式,StackExchange.Redis提供了一个丰富的配置模型,我们可在调用 Connect 或者 ConnectAsync 方法时传入配置:

var conn = ConnectionMultiplexer.Connect(configuration);

在这里参数configure可以是:

  • ConfigurationOptions 实例配置
  • 字符串方式配置

后面一种也是前面一种的标记形式。

基本配置 - 通过字符串配置

最简单的配置实例就是以主机名来配置:

var conn = ConnectionMultiplexer.Connect("localhost");

这会连接到本机上的单个服务器,默认使用Redis的缺省端口:6379。还有一些选项以逗号分隔的方式附加上去。端口通常用一个冒号(:)来表示。配置选项的名字后跟随了一个=号。如下所示:

var conn = ConnectionMultiplexer.Connect("redis0:6380,redis1:6380,allowAdmin=true");

我们可以自由的在 stringConfigurationOptions 两者之间相互转换,如下所示:

ConfigurationOptions options = ConfigurationOptions.Parse(configString);

或者

string configString = options.ToString();

最常用的方式是将基本信息存储在一个字符串中,然后在运行时应用这个特定的基本信息:

string configString = GetRedisConfiguration();
var options = ConfigurationOptions.Parse(configString);
options.ClientName = GetAppName(); // 仅仅在运行时才知道
options.AllowAdmin = true;
conn = ConnectionMultiplexer.Connect(options);

在微软Azure上使用Redis并附上密码的例子:

var conn = ConnectionMultiplexer.Connect("contoso5.redis.cache.windows.net,ssl=true,password=...");

配置选项

ConfigurationOptions 对象具有很多属性,所有选项的说明都已在智能提示里面。下面表格是一些最常用的选项描述:

Configuration stringConfigurationOptions描述
abortConnect={bool}AbortOnConnectFail如果是 true,当没有可用的服务器时 Connect 不会创建连接
allowAdmin={bool}AllowAdmin如果是 true,开启一些被认为是有风险的命令
channelPrefix={string}ChannelPrefix所有 pub/sub 操作的可选通道前缀
connectRetry={int}ConnectRetry在初始化 Connect 时,连接重试次数
connectTimeout={int}ConnectTimeout连接超时设置,时间单位是ms
configChannel={string}ConfigurationChannel设置广播通道名称
defaultDatabase={int}DefaultDatabase默认数据库索引, 从 0databases - 1
keepAlive={int}KeepAlive如果在指定时间(seconds)内没有活动,那么发送一条信息来帮助socket保持连接
name={string}ClientName唯一名称,用来识别Redis里面的连接
password={string}PasswordRedis服务器密码
proxy={proxy type}Proxy使用的代理类型 (如果有的话); 例如 “twemproxy”
resolveDns={bool}ResolveDns指定DNS解析方式是显示而不是隐式
serviceName={string}ServiceName当前没有实现
ssl={bool}Ssl指定使用SSL加密
sslHost={string}SslHost强制SSL主机识别,需要使用服务器端证书
syncTimeout={int}SyncTimeout异步超时设置(ms)
tiebreaker={string}TieBreaker主要是在一个模糊不清的主机之间选择出一个作为主服务器
version={string}DefaultVersionRedis 版本级别 (该选项是非常有用的,当服务器不可用时)
writeBuffer={int}WriteBuffer输出缓存区的大小

在配置字符串中的标记都是以逗号分隔的;任何没有 = 符号的都被假定为Redis的服务终端。如果没有开启SSL,并且终端没有指定一个明确的端口,那么将使用6379作为端口;如果开启了SSL,那么6380将作为端口。以 config=cfg

自动配置与手动配置

在很多常见的情况下,StackExchange.Redis 将会自动的配置多个设置选项,包括服务器类型和版本,连接超时和主/从关系配置。可是有时候在Redis服务器这个命令是被禁止的。在这种情况下,提供更多的信息是非常有用的:

ConfigurationOptions config = new ConfigurationOptions
{
    EndPoints =
    {
        { "redis0", 6379 },
        { "redis1", 6380 }
    },
    CommandMap = CommandMap.Create(new HashSet<string>
    { // 排除几个命令
        "INFO", "CONFIG", "CLUSTER",
        "PING", "ECHO", "CLIENT"
    }, available: false),
    KeepAlive = 180,
    DefaultVersion = new Version(2, 8, 8),
    Password = "changeme"
};

上面的配置等同于下面的字符串配置:

redis0:6379,redis1:6380,keepAlive=180,version=2.8.8,$CLIENT=,$CLUSTER=,$CONFIG=,$ECHO=,$INFO=,$PING=

重命名命令

在Redis中有些不常用的功能,那就是你能禁用或者重命名单个命令。正如前面的所展示的,这是通过 CommandMap 来实现的,而不是通过 HashSet\

var commands = new Dictionary<string,string> {
        { "info", null }, // 禁用
        { "select", "use" }, // 由于某种原因重命名为等效的SQL
};
var options = new ConfigurationOptions {
    // ...
    CommandMap = CommandMap.Create(commands),
    // ...
}

上面的配置等同于下面的字符串配置(在连接字符串中):

$INFO=,$SELECT=use

Twemproxy

Twemproxy是一个允许多个Redis实例使用起来像是单个服务一样的工具,它内置分片和容错能力(这很像Redis集群,但是它是单独实现的)。Twemproxy简化了功能设置的可用性。为了避免手动配置,Proxy 选项可以这样配置:

var options = new ConfigurationOptions
{
    EndPoints = { "my-server" },
    Proxy = Proxy.Twemproxy
};

打破僵局(Tiebreakers或者权衡决策)和配置更改公告

通常StackExchange.Redis会自动的解决主/从节点问题。然而可能你没有使用像 Redis集群Redis-Sentinel 那样的管理工具,你可能会碰到这样的一个场合:同时具有多个主节点(例如:当我们以维护为目的而重新设置一个节点时,它可能作为一个主节点重新出现在网络上)。为了解决这个问题,StackExchange.Redis可以用打破僵局(权衡决策)这一概念,这个仅适用于多个主机被发现的情况。为了兼容 BookSleeve,默认键名是 “__Booksleeve_TieBreak”(一直是在索引为0的数据库中)。这用来作为一个简单的投票机制,帮助决策那个是首选主节点,使之以正确路由工作。

同样的,当配置发生更改的时候(尤其是在主/从配置的时候),这对于连接实例来说将是非常重要的,这可以使它们自己意识到有新的情况发生(通过 IFNO,CONFIG 等等)。StackExchange.Redis通过自动订阅来 pub/sub 发送这样的通知。由于类似的原因,默认是键名是 “__Booksleeve_MasterChanged”

这两个选项可以被自定义或者禁用(设置为”“),可以通过 .ConfigurationChannel.TieBreaker 来配置属性。

这些设置也可以通过 IServer.MakeMaster() 来配置,可以在数据库中设置打破僵局(tie-breaker)和广播配置更改的消息。通过 ConnectionMultiplexer.PublishReconfigure 方法,配置消息也可以单独使用主/从更新来请求所有的节点刷新它们的配置。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: StackExchange.Redis 是一个.NET平台下的开源Redis客户端库,它提供了一种高性能、稳定和易于使用的方式来与Redis服务器进行通信。它支持异步和同步操作,并提供了一些高级特性,如管道、发布/订阅等。 StackExchange.Redis 具有以下特点: - 快速:通过使用高性能、低级别的Redis通信协议,StackExchange.Redis 可以实现高效的数据访问。 - 可扩展性:StackExchange.Redis 支持分区功能,使它能够在多个Redis节点上分布数据,并且可以在需要时轻松地添加或删除节点。 - 可靠性:StackExchange.Redis 有一个内置的连接池来管理与Redis服务器的连接,从而可以提高性能和可靠性,并避免了频繁的连接/断开开销。 - 易用性:StackExchange.Redis 提供了一个简单的API,使得开发人员能够轻松地与Redis进行交互。 总的来说,如果你在.NET平台上使用RedisStackExchange.Redis 应该是你的首选。 ### 回答2: StackExchange.Redis 是一个基于Redis的 .Net客户端库,由StackExchange团队开发和维护。Redis内存数据库是非常流行的键值对存储,支持复杂数据结构,速度快,有完善的集群方案,在web应用程序、消息系统等应用场景中被广泛使用。 StackExchange.Redis提供了方便易用、高性能、可扩展的API,可以直接向Redis发送命令、订阅和发布消息、连接Redis集群等。他进一步扩展了Redis命令,使其更加简单易用,并支持事务、管道和多线程操作。同时,StackExchange.Redis支持Redis的高级特性,如SortedSet和Hash;而且,它还能够在运行时自动检测Redis服务状态,支持Redis Sentinel、Cluster和多节点环境。 此外,StackExchange.Redis还支持应用程序跟踪(application tracing),采用异步API调用,从而提高了性能和可伸缩性。与其他Redis客户端库不同,StackExchange.Redis实现了连接池、序列化和反序列化器等高级功能,使用起来更加方便和优雅,可以减少代码量和复杂性。 总的来说,StackExchange.Redis是一个很不错的Redis客户端库,它提供了强大而与Redis完全兼容的API,打破了语言壁垒,使得开发者可以在自己喜欢的语言环境(例如.Net)中使用 Redis 。 许多一流的公司如 StackOverflow和GitHub都使用 StackExchange.Redis,证明了它的可靠性和性能优势。 ### 回答3: StackExchange.RedisRedis数据库的一个适用于 .NET 编程语言的客户端。它提供了一组丰富的功能,用于在 .NET 框架内与Redis数据库进行交互。 StackExchange.Redis旨在为 .NET 开发人员提供最佳的Redis集成体验。StackExchange.Redis提供了许多优点,其中最主要的有: 高度优化的读写操作。StackExchange.Redis客户端库具有非常高的效率,用于从Redis服务器读取和写入数据时,可大大减少网络流量和延迟。这使得它成为处理高吞吐量负载的很好的选择。 支持许多复杂数据类型。除了提供基本的字符串和整数类型之外,StackExchange.Redis还支持许多复杂的数据类型,例如哈希表、排序集合和列表数据类型。这些数据类型将极大地帮助开发人员设计和实施高效的Redis应用程序。 易于使用和集成。StackExchange.Redis具有完美的适配性,可以很简单地与 .NET 中的 ASP.NET 应用程序、Windows 服务、控制台应用程序等相集成。此外,它具有丰富的文档、教程和API reference,可以让开发者轻松入手。 另外,StackExchange.Redis还包括许多其他特性,如:连接复用、事务支持、发布与订阅、管道等。这使得它成为在 .NET 编程语言中使用Redis数据库的非常好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值