【发布时间】:2016-05-29 20:18:15
【问题描述】:
我想从 redis 的列表中读取和过滤数据。我想检查 blob 中数据的前 4 个字节(一个 int32),以与我将作为 ARG 传入的 int32 进行比较。
我启动了一个脚本,但是如何检查前 4 个字节?
local updates = redis.call('LRANGE', KEYS[1], 0, -1)
local ret = {}
for i=1,#updates do
-- read int32 header
-- if header > ARGV[1]
ret[#ret+1] = updates[i]
end
return ret
另外,我看到有一组有限的库:http://redis.io/commands/EVAL#available-libraries
编辑:还有一些问题,由于 LUA 存储数字的方式,我遇到了问题 - ARGV[1] 是一个 8 字节字符串,不能安全地转换为 64 位数字。我认为这是由于 LUA 将所有内容都存储为双精度,只有 52 位精度。
编辑:我接受下面的答案,但将问题更改为 int32。问题的int64部分我放到另一个问题中:Comparing signed 64 bit number using 32 bit bitwise operations in Lua
【问题讨论】: