问题标签 [booksleeve]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
redis - 如何向redis发送随机命令?
我在 c#/.NET 上通过 bookleeve 使用 redis
假设我想发送一个未实现的命令,例如SCRIPT FLUSH
or EVAL
。我如何用书套做到这一点?另外我不确定是否实现了回声,因此以它为例会很酷。
c# - 从 Azure 连接到 Redis 引发间歇性异常
我有一个运行我的 C# 应用程序的 Windows Azure 服务器。它分布在 4 个中型实例上,我使用 Redis 进行 L2 缓存。该应用程序正在处理相当可观的流量(每天大约 300,000 次浏览量)。我正在使用 BookSleeve 进行 redis 连接,在应用程序启动并运行后,它将开始从 BookSleeve 抛出 SocketExceptions 大约每分钟四次。确切的例外是:
它似乎只在我从服务器读取内容时发生:
我的 GetReadConnection 设置如下:
现在,我所有的写入都像作者描述的那样共享一个连接,所以这只发生在需要使用 connection.Wait() 的读取上。这一切似乎都很好。写入使用类似于使用 BookSleeve 维护打开的 Redis 连接的代码
我尝试更改 Redis 服务器的超时以说明 Azure 负载均衡器,但没有成功。我已经尝试过设置超时 30 和设置超时 0,如下所述:Redis connection errors when using Booksleeve Redis client in Azure VM
任何帮助将不胜感激。
c# - 使用 Booksleeve 执行 ZINTERSTORE 的选项?
我一直在使用 Booksleeve 作为我在 C# 中的 redis 驱动程序,并且对它非常满意 - 但我遇到了对排序集进行一些工作的需要。似乎这些在 Booksleeve 中只得到最低限度的支持——例如,没有像 ZUNIONSTORE 或 ZINTERSTORE 这样的命令的实现。
我在 Github 上找到了 scobrown 的 Booksleeve 分支,它声称已经实现了这些操作,但我一直在使用 NuGet 的“官方”包,我不确定是否要切换到另一个分支。
有没有人有使用这个叉子的经验?它对于生产代码是否足够稳定和可靠?
否则,有没有人想出任何其他解决方法来需要在排序集上做交叉或联合之类的事情?我一直在做类似以下的事情:
这有一个明显的缺点,即需要一次检索一个集合的全部内容,并使用 .NET 执行交集,IEnumerable<>.Intersect()
而不是在 redis 中执行。有没有更好的办法?
c# - Booksleve 中的 Redis 事务
下面的 3 个命令在按原样执行时可以完美运行。
但是,当我尝试将它们包装在事务中时,它会停止工作。不会引发异常,但是如果我调试执行似乎会停止在var allKeys = ...
设置事务时是否遗漏了什么?
redis - 有人可以准确解释 Booksleeve 和 Redis 如何协同工作以及它在 SignalR 应用程序中的应用吗?
我们正在为我们的 SignalR 应用程序实现横向扩展,并试图避免集群中的单点故障。因此,需要不止一个 Redis 消息总线服务器。
实现 Redis Sentinel 的问题在于,在故障转移时,客户端需要连接到新的端点 [地址],这将需要重新启动 SignalR 应用程序(在 Application_Start() 中定义的 Redis 端点)。
不是一个选择。
我试图了解 Booksleeve 是否/如何提供帮助,并希望有人对此进行解释。
问题是我们只能为消息总线定义一个端点。硬件解决方案目前不是一种选择。
SignalR 应用程序是否会连接到维护主/从列表的 Booksleeve 包装器?
使用 Azure 服务总线的另一种选择。但是,Wiring Up the Windows Azure Service Bus Provider 的说明表明这仍然存在问题:
请注意,此网站是在 Azure Web 角色中运行的 ASP.NET 站点。从 1.0alpha2 开始,AzureWebSites 中存在一些错误,导致 ServiceBus 横向扩展方案无法正常工作。我们正在努力为未来解决这个问题
c# - 如何使用日期范围从 Redis (pub/sub) 保存和检索频道数据?
最初我询问了查询 .rdb 文件的问题,这不是我想做的——我将查询一个活动服务器。
我即将开始一个项目,我们将在发布/订阅场景中使用 Redis,使用 RDB 快照。
.Net WCF 客户端将通过Marc Gravell 的 BookSleeve配置 Redis 连接并接受传入请求。
启用 RDB 快照后,将创建增量快照。
我希望客户端能够根据给定的渠道和日期范围检索数据集。我在想我会使用相同的 WCF 客户端进行读写(除非有任何明显的反对意见)。我不完全清楚使用什么方法来查询服务器来检索日期范围、通道特定数据,并通过 WCF 客户端提供这些数据。
我是否可以通过 BookSleeve 实现此数据查询功能(如果可以,如何实现)或者是否有其他更适合使用的访问包装器,例如ServiceStack.Redis。
使用 BookSleeve 进行写入,使用 ServiceStack.Redis 作为客户端会更好吗?
- 更新 -
我已将快照设置为默认值:
使用Redis Admin UI浏览数据,我希望在 15 分钟(900 秒)后看到存储在键中的一些数据,但是,搜索键会显示通道名称(和其他键),但其中没有值。
由于发布/订阅事件没有持久化,那么捕获通道数据并存储它的好方法是什么?
booksleeve - 使用 BookSleeve 保存对象集合
我是 Redis 和 BookSleeve 的新手。我正在评估是否应该使用 BookSleeve 或 ServiceStack.Redis。
ServiceStack 看起来更直接,但我喜欢 BookSleeve 提供的流水线的想法。
我有 Redis 和 BookSleeve 正在运行,并且获取和设置字符串很容易,但我正在努力寻找设置和获取对象集合的示例,例如我的 pocos。
如何使用 BookSleeve 获取和设置这些?
谢谢。
c# - 使用 BookSleeve 的 ConnectionUtils.Connect() 将 SignalR 与 Redis 消息总线故障转移一起使用
我正在尝试使用 SignalR 应用程序创建 Redis 消息总线故障转移方案。
起初,我们尝试了一个简单的硬件负载平衡器故障转移,它只是监控两个 Redis 服务器。SignalR 应用程序指向单个 HLB 端点。然后,我在一台服务器上失败了,但在没有回收 SignalR 应用程序池的情况下,无法在第二台 Redis 服务器上成功获取任何消息。大概这是因为它需要向新的 Redis 消息总线发出设置命令。
从 SignalR RC1 开始,Microsoft.AspNet.SignalR.Redis.RedisMessageBus
使用 BooksleeveRedisConnection()
连接到单个 Redis 以进行发布/订阅。
我创建了一个新类,RedisMessageBusCluster()
它使用 BooksleeveConnectionUtils.Connect()
连接到 Redis 服务器集群中的一个。
Booksleeve 有自己的机制来确定主服务器,并且会自动故障转移到另一台服务器,现在正在使用SignalR.Chat
.
在web.config
中,我设置了可用服务器列表:
然后在Application_Start()
:
我添加了两个额外的方法Microsoft.AspNet.SignalR.Redis.DependencyResolverExtensions
:
现在的问题是,当我启用了多个断点时,直到添加了用户名之后,然后禁用所有断点,应用程序才能按预期工作。但是,从一开始就禁用断点,在连接过程中似乎有一些竞争条件可能会失败。
因此,在RedisMessageCluster()
:
我尝试添加一个Task.Wait
,甚至一个附加的Sleep()
(上面未显示)-它们正在等待/等,但仍然出现错误。
重复出现的错误似乎在Booksleeve.MessageQueue.cs
~ln 71 中:
抛出封闭队列异常的地方。
我预见到另一个问题:由于建立了 Redis 连接,Application_Start()
因此在“重新连接”到另一台服务器时可能会出现一些问题。但是,我认为这在使用单数时是有效的RedisConnection()
,因为只有一个连接可供选择。但是,ConnectionUtils.Connect()
我想听听@dfowler
其他 SignalR 人员的介绍,了解如何在 SignalR 中处理这种情况。
c#-4.0 - 通过 BookSleeve 反序列化 RedisMessage 的正确方法是什么?
我创建了以下单例类来处理 Redis 连接,并公开 BookSleeve 功能:
由于以下错误,在OnMessage()
,var message = RedisMessage.Deserialize(data);
中被注释掉:
RedisMessage 由于其保护级别而无法访问。
RedisMessage 是 BookSleeve 中的一个抽象类,我有点不明白为什么我不能使用它。
我遇到了这个问题,因为当我向通道 (pub/sub) 发送消息时,我可能想在 OnMessage() 中对它们做一些事情——例如,如果设置了持久性标志,我可能会选择开始记录数据。问题是此时数据已序列化,我希望将其反序列化(为字符串)并将其保存在 Redis 中。
这是我的测试方法:
由于我无法使用该Deserialize()
方法,因此我创建了一个静态帮助器类:
不幸的是,这没有正确地将字符串反序列化回其原始形式,我得到的是这样的:异汢獩敨庆畲㩥ㄠ,而不是实际的原始文本。
建议?