我目前正在开发一个缓存,需要为每个调用增加数百个计数器,如下所示:
redis.pipelined do
keys.each{ |key| redis.incr key }
end
现在,在我的配置文件中,我看到redis
gem仍收集了我不需要的答复,并浪费了一些宝贵的时间。我可以通过某种方式告诉Redis我对回复不感兴趣吗?有没有更好的方法来增加很多值。
MINCR
例如,我没有找到命令。
提前致谢!
是的…至少在2.6中。您可以在LUA脚本中执行此操作,只需让LUA脚本返回空结果即可。这是使用booksleeve客户端的:
const int DB = 0; // any database number
// prime some initial values
conn.Keys.Remove(DB, new[] {"a", "b", "c"});
conn.Strings.Increment(DB, "b");
conn.Strings.Increment(DB, "c");
conn.Strings.Increment(DB, "c");
// run the script, passing "a", "b", "c", "c" to
// increment a & b by 1, c twice
var result = conn.Scripting.Eval(DB,
@"for i,key in ipairs(KEYS) do redis.call('incr', key) end",
new[] { "a", "b", "c", "c"}, // <== aka "KEYS" in the script
null); // <== aka "ARGV" in the script
// check the incremented values
var a = conn.Strings.GetInt64(DB, "a");
var b = conn.Strings.GetInt64(DB, "b");
var c = conn.Strings.GetInt64(DB, "c");
Assert.IsNull(conn.Wait(result), "result");
Assert.AreEqual(1, conn.Wait(a), "a");
Assert.AreEqual(2, conn.Wait(b), "b");
Assert.AreEqual(4, conn.Wait(c), "c");
或incrby
通过将“ by”数字作为参数传递来做同样的事情,将中间部分更改为:
// run the script, passing "a", "b", "c" and 1, 1, 2
// increment a & b by 1, c twice
var result = conn.Scripting.Eval(DB,
@"for i,key in ipairs(KEYS) do redis.call('incrby', key, ARGV[i]) end",
new[] { "a", "b", "c" }, // <== aka "KEYS" in the script
new object[] { 1, 1, 2 }); // <== aka "ARGV" in the script
问题内容: 我对Redis还是很陌生,仍然在玩它。我想测试一下它是否与我的项目相关,但是我不确定正在运行的特定命令。SO的用户让我确信使用管道和事务的性能优势,所以我想问一下如何做到这一点。 基本上,我有两个要发布的语句,而不必等待结果(似乎是管道衬砌的一个很好的候选者。它看起来像这样: 它非常简单,但是到目前为止,我一直在研究它的所有方式似乎都在等待ValueX是否存在的响应,并且由于我正在执行
本文向大家介绍Redis禁用命令、危险命令及规避方法,包括了Redis禁用命令、危险命令及规避方法的使用技巧和注意事项,需要的朋友参考一下 FLUSHALL FLUSHDB 命令会清空数据,而且从不失败,对于线上集群非常危险。 KEYS * 命令,当数据规模较大时使用,会严重影响Redis性能,也非常危险。 如果从根本上规避这些风险呢? Redis提供了非常简单且有效的方法,直接在配置文件中设置禁
问题内容: 当我将字符串值1和7存储到“ mykey”中时, redis中到底存储了 什么?以及getbit在redis中如何工作? 有人试图在该值内循环位吗? 我知道bitcount会给我2,但我也想从中获得确切的字符串值1和7,这可能吗? -- 我通过使用erlang redis客户端读取输出进行了一些实验。 erlang输出: 然后删除此条目: 我做同样的事情来偏移2 4 8,在这里您可以看
问题内容: 我正在尝试编写一个程序,在其中我需要监视某些事件的未命名管道的末端。我可以使用具有轮询功能的未命名管道。 如果是,请您告诉我带有函数描述符的轮询函数的语法 问题答案: 投票的例子 要使用,如果要检查是否可读或可写:
问题内容: 考虑类似: 这是好习惯吗?难道这会在我们读取输入文件的同时覆盖输入文件,还是总是先在内存中读取它,然后通过管道传递给第二个命令? 显然,我可以将临时文件用作中介步骤,但我只是想知道.. 问题答案: 不,那不行。管道中的所有命令同时执行,并且外壳程序在执行命令之前准备重定向。因此,该命令很可能在cat读取文件之前将其覆盖。 您需要moreutils提供的海绵(1)。
本文向大家介绍CMD命令行管道命令使用介绍,包括了CMD命令行管道命令使用介绍的使用技巧和注意事项,需要的朋友参考一下 一、什么是管道命令 管道命令能够将一个命令的执行结果经过筛选,只保留我们需要的信息。 如 dir 命令会显示目录下所有文件夹和文件,可以使用管道命令| findstr "" 将dir的结果进行筛选,只保留需要的信息 | 命令管道符 格式:第一条命令 | 第二条命令 [|