- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
是否存在将表传递给单个 redis.call('HMGET',[key],...)
的任何类似行为,而不是遍历表并运行多个 >redis.call
,一个接一个?
我在 Redis 中有一个散列键,它表示具有 100000 个条目的 Fenwick 树。它有连续的整数索引和浮点值:
127.0.0.1:6379[1]> hmget fenwick 1 2 3 4 ...
1) "0.75865226460558"
2) "1.0234678955857959"
3) "0.057608450324092272"
4) "1.1002286486794375"
...
我正在尝试使用 Redis 的内置 Lua 解释器找到一些随机条目 entryid
的总和。显然,这样做的天真方法是像这样一次一个地对表执行单一访问:
local sum=0
while entryid>0 do
sum=sum+redis.pcall('HGET',KEYS[1],temp)
entryid=entryid-bit.band(entryid,-entryid)
end
我尝试生成并加载一个字符串以将所有命令压缩到一个 HMGET
中并减少往返次数:
local evalstr="return redis.pcall('HMGET',KEYS[1]"
local sum=0
while entryid>0 do
evalstr=evalstr..','..temp
entryid=entryid-bit.band(temp,-temp)
end
local vals=loadstring(evalstr..')')()
for i=1,#vals do
sum=sum+vals[i]
end
但是,无论 fenwick
的大小如何,编译的开销都会使此查询比第一个查询慢。
本质上,我正在寻找这种行为:
local tbl={}
local c=1
while temp>0 do
tbl[c]=temp
c=c+1
temp=temp-bit.band(temp,-temp)
end
local vals=redis.pcall('HMGET',KEYS[1],tbl)
local sum=0
for i=1,#vals do
sum=sum+vals[i]
end
但是显然不行。有什么方法可以先在 Lua 中收集我想查询到 Redis 的所有值,然后在一个命令中将它们发送到 Redis?
最佳答案
您可以使用内置的 unpack
将 Lua 表转换为可变参数函数的一系列参数。功能。
对于您的情况,请在您的 Lua 脚本中执行以下操作:
redis.pcall('HMGET',KEYS[1],unpack(tbl))
关于performance - Redis 中的 Lua 脚本 : HMGET with table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29594517/
对 HMGET 性能有一些疑问。 您能解释一下哈希中的字段数量如何影响读取性能吗? 示例 1. 20000 个请求。 HMGET 有 4 个字段。管道中的命令。哈希包含760个字段在测试机上大约需要1
我在 redis 中有一个哈希集,如下所示。 "abcd" : { "rec.number.984567": "value1", "rec.number.973956": "value
RedisFuture>> future = redisStatsConnection.hmget(key, 10); if (!future.await(500, TimeUnit.MILLISEC
我正在使用 REDIS.hmget 匹配一堆字符串。整个商店有大约 14 万个 key 。我已经看到我的后端在不到 1 秒的时间内匹配超过 1k 个字符串,但我遇到了这种匹配在完成前超时的特殊情况。我
我在 redis 中创建了一个键,如下所示:- In [1]: import redis In [2]: conn = redis.Redis('localhost') In [3]: user =
使用 redigo,我正在尝试使用 HMGET。我在字段中传递一个字符串 slice 作为参数。它不起作用,返回空结果。 func HMGET(c redis.Conn, field []string
我有一个包含多个值的redis哈希,即 myhash f1 "foo" f2 "bar" f3 "mish" f4 "mash" 我想使用 hmget 提取值,但坚持使用 ruby 术语。我想做类
我想通过在我的应用程序中使用 hmget 从 redis 中获取多个值,一次获取大约 1000+ 个值。但我担心它会导致一些性能问题。有人试过这个吗? 最佳答案 应该真的不是问题,因为它是 O(N),
我正在尝试使用以下代码通过 node.js 从 redis 获取一些数据: var moment = require("moment"); var express = require('express
是否存在将表传递给单个 redis.call('HMGET',[key],...) 的任何类似行为,而不是遍历表并运行多个 >redis.call,一个接一个? 我在 Redis 中有一个散列键,它表
我想替换这个命令: red:hmget('item', 'item:1', 'item:2') 用类似的东西: local test = {'item:1', 'item:2'} red:hmget(
我想使用单个 ZADD 或 HMGET 命令而不是 MULTI/EXEC。 ZADD 可以处理的(分数、成员)元组的数量是否有限制? HMGET 可以处理的字段数有没有限制? 最佳答案 理论极限相当高
我是一名优秀的程序员,十分优秀!