问题标签 [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.

0 投票
1 回答
6506 浏览

c# - 尝试在 redis 中的 2 组中插入 750 个项目时出现 StackExchange TimeoutException

最初我试图将一些项目集合插入到 2 个 redis 集中(也许这根本不是一个好主意,但是......)。我尝试一次添加的条目数量: 750+

现在我在尝试使用 StackExchange.redis客户端执行此操作时确实收到超时异常,有趣的是我能够使用我之前调查过的“旧版”booksleeve 客户端完成类似的操作。

所以,我肯定在某些事情上错了(甚至可能在我最初的 bookSleeve 实现中),只是想弄清楚到底出了什么问题。以下是我与 redis 客户端一起使用的代码示例: BookSleeve:

StackExchange.redis 实现相同的代码:

开始单元测试后,我收到 StackExchange 客户端的下一个错误:

Message: Timeout performing EXEC, inst: 3, queue: 3, qu=0, qs=3, qc=0, wr=0/0

Source: in StackExchange.Redis.ConnectionMultiplexer.ExecuteSyncImpl[T](Message message, ResultProcessor1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\18a91a3757cef937\StackExchange.Redis\StackExchange\Redis\ConnectionMultiplexer.cs:line 1693 in StackExchange.Redis.RedisBase.ExecuteSync[T](Message message, ResultProcessor1 processor, ServerEndPoint server) in c:\TeamCity\buildAgent\work\18a91a3757cef937\StackExchange.Redis\StackExchange\Redis\RedisBase.cs:line 92 in StackExchange.Redis.RedisTransaction.Execute(CommandFlags flags) in c:\TeamCity\buildAgent\work\18a91a3757cef937\StackExchange.Redis\StackExchange\Redis\RedisTransaction.cs:line 51 in DFS.Cache.CacheManager.RedisStackExchange.RedisContestCacheManager.RegisterAvailableContests(IList1 contests) in d:\Projects\DFS\Code\DFS\DFS.Cache.CacheManager.RedisStackExchange\RedisContestCacheManager.cs:line 131

只是想知道,我到底做错了什么。提前感谢您的任何建议!

PS 对于 stackEchange.redis 配置,我使用的是 Marc 从 github 提供的配置示例(可在此处获得:StackExchange/StackExchange.Redis/blob/master/Docs/Configuration.md)

PS 请查看当前的 StackExchange 客户端配置文件:

标准条目(用于集合)如下所示:

PS 在 Marc 的回复之后,我运行了几个测试并在单元测试中遇到了一些其他错误,例如

所以我同意这是连接问题,与当前切换到 StackExchange.redis 客户端无关。

0 投票
0 回答
494 浏览

c# - 使用 Sets 和 .Net 客户端在 redis 中管理 2 个集合。这是正确的方法吗?

我正在尝试为 .NET 领域工作/研究 redis,我有一个印象,定义的任务不是最好用 Sets 和 redis 本身覆盖(因为我确实有需要修改的实体) - 所以也许最好使用这里有一些其他方法/或redis数据类型(最初的想法之一是使用redis哈希(管理属性),但后来我决定尝试使用集合,因为我需要获取相关实体的集合,这个操作似乎是一般最重要的一项)。所以,我现在做了什么:

现在我确实有实体的下一个配置:

我正在尝试做的是管理具有 2 个集合的实体项目:

  1. 当前- 可供客户端使用的实体项目(最多 5000 个)的集合(缓存)
  2. 原始- 必须批准的实体项目的集合(最多 10% 的当前集合的唯一 ID)

我将对这些集合执行的操作是:

  1. 从当前集合中获取所有实体项目:GetCurrent - 最关键的任务
  2. 修改原始集合:

    2.1)将新实体添加到 Raw 中(可以更改当前集合中的适当计数器/状态):AddRaw

    2.2) 更新 Raw 中的现有实体(如果此类 Id 已经可用):UpdateRaw

  3. 修改当前集合

    3.1)原始集合的所有更改都应用于当前(如果尚未完成):SyncCurrent

    3.2)返回原始集合实体(增量更改)

    3.3)清除原始集合实体(集合被重置)

方法:

  1. 定义 Set 类型的集合(能够获取与集合相关的项目列表):SMEMBERS

  2. 创建其他集合 Current:Ids, Raw:Ids 将仅包含集合中项目的 Id - 定义项目是否在原始集合中:SISMEMBER

  3. 将新项目添加到集合中:SADD

  4. 修改 Set(s) 中的项目:获取(SMEMBERS:SSCAN使用 Id 作为掩码元素或迭代项目(SMEMBERS),获取具有 ID 的实体),RemoveOldFromSet:SREM,AddUpdated:SADD

问题,问题(在单元测试期间确定):(所有报告的问题似乎都与与 redis 服务器本身的连接有关,而不是 StackExchange.redis 客户端的功能)

  1. 新的 StackExchange 客户端有时会在 SMEMBERS 上引发超时异常(当前集合中有 500 个项目)

  2. StackExchange 事务在尝试将项目(750 多个条目)插入当前和当前集合时抛出超时异常:Ids,当前 connectionTimeOut 和 SyncTimeOutrs 设置为 5000 毫秒(5 秒)

在运行了一些测试之后(集合内有数百个项目,我认为选择的方法最初是错误的,必须重新设计 - 使用 Microsoft 的缓存。)是否有其他人有类似的疑问或可以根据自己的经验说类似的任务应该没有按照我刚才描述的方式实施?

先感谢您。

0 投票
4 回答
41019 浏览

c# - StackExchange.Redis ConnectionMultiplexer.Connect() 间歇性工作

StackExchange.Redis用来与 3 个不同的 Redis 实例通信:1 个在同一子网上,2 个远程。这是我的配置代码:

最后一行大约 70% 的时间会引发连接异常:

无法连接到 redis 服务器;要创建断开连接的多路复用器,请禁用 AbortOnConnectFail

为什么这是间歇性的和/或我做错了什么?当我在命令提示符下 ping Redis 服务器时,丢包率为 0%,响应时间小于 1 毫秒。网络很稳定。

谢谢!

编辑

以下是失败时的日志输出:

0 投票
1 回答
1979 浏览

c# - 使用 StackExchange.Redis ConnectionMultiplexer 而不是 BookSleeve ConnectionUtils 连接到 Redis sentinel

如何使用 StackExchange.Redis ConnectionMultiplexer 而不是 BookSleeve ConnectionUtils 连接到 Redis sentinel。

我目前正在使用 BookSleeve:

ConnectionUtils.Connect("127.0.0.1:26379,serviceName=mymaster");

我试图用 StackExchange.Redis 替换它: ConnectionMultiplexer.Connect("127.0.0.1:26379,serviceName=mymaster");

但它不起作用。

有任何想法吗?

0 投票
1 回答
333 浏览

c# - 从 BookSleeve 迁移到 StackExchange.Redis - 映射事件

Stackexchange.Redis 中似乎没有“关闭”事件,只有一个“连接失败”事件,根据我的理解表明暂时失败(这就是为什么还有一个“连接恢复”事件?)。这是因为 StackExchange 总是在连接意外关闭时重试 - 是否有事件指示连接何时永久关闭?

0 投票
1 回答
278 浏览

redis - 如何使用 Booksleeve 获取键/值列表?

我正在尝试获取值列表,其中键名以“monkey”开头。

我真的找不到这方面的文档。:(

我怎样才能做到这一点?我应该使用什么 API?Keys, Sets, Strings? 什么方法?

或者它尚不可用,但有一种解决方法?

谢谢

0 投票
1 回答
162 浏览

performance - Redis 2.4 / CentOS 6.2 网络吞吐量每 4 分钟下降一次……Redis……还是与客户端相关?

我们昨天在 Redis 2.4 / CentOS 6.2 缓存服务器上遇到了一些奇怪的性能下降。他们每 4 分钟循环一次。

以下是主服务器 New Relic 的截图: https ://www.evernote.com/shard/s368/sh/28312f97-60a9-45ab-a27e-b31abb5c7cce/8fb69edd1206c228fcc444330f1909ec

这是同一时期的奴隶之一: https ://www.evernote.com/shard/s368/sh/802b01bc-294d-46a5-adaa-f64e2e8c8bd2/6cbe244d4570fae63ee412cd1de5a841

关于我们环境的一些信息: - 缓存:4 台带有 8 个 CPU、30GB RAM 和 600Mbps 内部网络带宽的 linux 云服务器 - Web:30 台带有 4 个 CPU 和 200Mbps 内部网络带宽的 Windows 云服务器

网络服务器似乎不是很忙,但是当出现低谷时它们确实会超时。我们不排除这可能是客户端问题,因此,他提供了有关 Web 应用程序的更多信息:

Microsoft ASP.Net MVC 3 Web 应用程序与 Redis BookSleeve Client 1.1.0.4 for Data Cache 和 AngiesList v???? (与此版本的 BookSleeve 兼容)用于会话状态。

起初,我们在与 Redis 的连接数量方面遇到了一些问题。据我了解,Redis 2.4 的连接客户端数量有限。

这就是我们将 Session 和 Data Cache 分离到一个单独的 Redis 实例中的原因。不幸的是,AngiesList 不支持多个连接,因此它只连接到主服务器。BookSleeve 客户端连接是使用 .Net 中的 System.Random 随机化的。

所有服务器上数据缓存的客户端连接数约为 200。会话缓存在其高峰期有大约 4100 个连接。

我们已经仔细查看了 Redis 日志,监控并运行了 iftop 和 top,但找不到任何有用的东西。

那么....为什么会出现这些下降?

我是 .Net 开发人员,不是 linux 专家。我们在 Redis/linux 领域没有任何专家......所以我们希望这里有人可以帮助我们缩小搜索范围。

作为备份计划的一部分,我们现在将客户端更新到带有兼容会话状态包的 ServiceStack Redis v3,并使用 Redis 2.8 配置服务器以确保安全。

谢谢。

0 投票
2 回答
100 浏览

windows - Booksleeve 是否可以与 Windows Redis(作为 Windows 服务安装的 Redis)一起使用?

Booksleeve 是否可以与 Windows Redis(Redis 安装为 Windows 服务)一起使用?

将 Redis 作为 Windows 服务安装,我想知道是否可以将 BookSleeve 与它一起使用?还是 BookSleeve 专门用于安装在 Unix 系统上的 Redis?

0 投票
1 回答
1812 浏览

c# - Redis 缓存静态列表按过滤器搜索

我有一个大约 500 项的静态对象列表。

此对象具有类似 (id [int],Name [string], attribute1 [string], attribute2 [string]) 的属性。

我已将此对象序列化为字符串并作为字符串键值存储到 redis 中。但是我需要根据对象属性的不同用户搜索过滤器过滤这个 500 个项目的列表,并将这个列表的子集提供给用户。

我可以通过两种方式做到这一点,一种是将此列表添加到表和索引中,然后使用 sql 应用搜索过滤器。其他是我每次从redis中提取这个列表并反序列化为对象列表并使用linq应用过滤器。我在不同的服务器上有 redis,DB 也是如此,我也不想在每个 Web 服务器上都有该缓存的副本。

那么,为了获得最佳性能,最好的方法是什么?还是有其他方法可以更快地做到这一点?

0 投票
1 回答
816 浏览

c# - BookSleve Del redis key by wildcard

我看到了这个从 redis ussign 通配符中删除 Key 的例子

假设我有钥匙:key1a,key2b,key7a,...。我想删除所有以 key* 开头的东西

我如何告诉 bookleve 这样做?当我用“keys *”将字符串传递给它的无效函数时,它似乎没有奏效。