我在redis.lua中启动Redis连接池,通过从C调用,我得到了一个redis_lua_state,这个Lua状态是全局启动的,而其他线程只能从它得到。
当有一个HTTP请求(工作线程)时,我需要从redis_lua_state中获取一个Redis连接,然后新的Lua状态来加载其他Lua脚本,而这些脚本将使用这个redis连接与redis通信,如何做到这一点?或者如何设计我的Lua脚本使其变得简单?
代码示例:
/* on main thread, to init redis pool connection */
lua_State *g_ls = NULL;
l
我使用jedis + lua来评估脚本,下面是我的lua脚本:
redis.replicate_commands()
local second = redis.call('TIME')[1]
local currentKey = KEYS[1]..second
if redis.call('EXISTS', currentKey) == 0 then
redis.call('SETEX', currentKey, 1, 1)
return 1
else
ret
我想问,如何才能将数据从Nodejs发送到Lua脚本,这样我就可以使用该参数来消除redis数据结果,而更快的搜索processes.Here是我的代码。
Lua脚本
-- parameter data should be taken here
local ks=redis.call('ZRANGE', 'mykey', '0', '-1')
return (ks)
NodeJS
const Redis = require("redis");
const config = require("../resou
我正在设置一个Redis实例,该实例接收由键/值对组成的数据点,该键可以具有不同类型的前缀。每个键都有一个ttl过期。每隔15分钟,我就计划运行一个lua脚本,它将对带有特定前缀的各种键的值进行统计。这是从运行节点脚本的cron作业中删除的。
local data = redis.call('KEYS', KEYS[1] .. "*")
for i=1,#data do
local value = 'rollup.' .. KEYS[1] .. redis.call('GET', data[i])
if redis.cal
我正在尝试开发用于这两种功能的Lua脚本-脚本LOAD/EVALSHA和函数LOAD/FCALL (Redis7.0的新特性)。
正如我现在所理解的--我所需要的只是找出执行上下文--如果脚本被调用为EVALSHA与函数加载。
local function myfunction(KEYS, ARGV)
-- do useful stuff
end
if running_as_evalsha then
--called by EVALSHA
--Redis 6.x version (no function support)
--redis-cli -x script load
我需要在redis中迭代环任意次,我有这个Lua脚本: local result = redis.call('lrange','test',0,5)
redis.call('ltrim','test',5,-1)
redis.call('rpush','test',result)
return result 这里我lpop了5个元素,然后我需要把它们rpush回来。 redis.call('rpush','test',result) 抛出错误Lua redis()
当我在redis中使用lua脚本时,我遇到了一个我无法理解的问题。 例如,我有一个键"test“,它的值是2,它的编码是int: 127.0.0.1:6379> set test 2
OK
127.0.0.1:6379> object encoding test
"int" 但是当我在lua脚本中使用key时,它在lua中的类型变成了string: 127.0.0.1:6379> eval "local a = redis.call('get', 'test'); return type(a);" 0
我有一个由docker-compose启动的应用程序。在应用程序中,我有一个配置为持久模式的redis实例。在docker-compose build中,我需要将数据加载到redis实例中。我有一个lua脚本构建和插入数据到redis。但我不明白如何在docker-compose build中使用我的lua脚本运行redis和上传数据。我试着这样做:
FROM redis:5
...
RUN redis-server /usr/local/etc/redis/redis.conf
RUN dataBuilder.lua
...
CMD ["redis-server", "
我已经为我的node.js项目编写了一些lua脚本。但我的一些lua脚本中有相同的代码。让我先解释一下。
我的第一个脚本从redis返回来自给定键的所有数据。
script1.lua
local data = {};
local keyslist = redis.call('keys', 'day:*');
local key, redisData;
for iCtr = 1, #keyslist do
key = string.gsub(keyslist[iCtr], 'day:','');
redisData
在我的Redis缓存中,我运行了
SET 12345 JoeDude
SET JoeDude "It works!!"
我有一个打算从终端运行的Lua脚本:
lua
local user=redis.call('GET', KEYS[1])
local output=redis.call('GET', user)
return output
在终端,我运行redis-cli --eval lua_R_and_D.lua 12345
然后我收到以下错误:(error) ERR Error compiling script (new function
我们使用lua脚本在更新我们的DB时执行批量删除数据。Jedis使用管道执行lua脚本。
local result = redis.call('lrange',key,0,12470)
for i,k in ipairs(result) do
redis.call('del',k)
redis.call('ltrim',key,1,k)
end
try (Jedis jedis = jedisPool.getResource()) {
Pipeline pipeline = jedis.pipelined();
我有一个lua剧本。我正在从node.js运行,我的脚本正在返回一个包含键值对的lua表,类似于{ '1':15,'2':35 }。在节点中,我得到一个空数组。但是,如果我返回arrayName'1‘。它给了我正确的价值15。我在这里做错了什么。我正在使用node_redis客户端作为节点到redis。下面给出了不同的文件。
Lua脚本- groupBy.lua
local db = "";
local table = "students";
local groupBy = "class";
local a
redis.call('select','14')
local allKeys = redis.call('keys','orgId#1:logs:email:uid#*')
for i = 1 , #allKeys ,1
do
local object11 = redis.call('DEBUG OBJECT',allKeys[i])
print("kk",object11[1])
end
这里,“调试对象”在redis-cli上成功运行,但是如果我们想在多个键上运行lua脚
我正在使用带有OpenResty包的Lua+nginx。但是当我尝试用Redis连接Lua脚本时,问题来了,我不能成功连接。我浏览了很多链接和博客,但最后总是失败。这是我正在尝试的代码片段。
server {
location /test {
content_by_lua '
local redis = require "resty.redis" // **Problem in code "Not able to require "resty.redis""**
这是test.lua文件中的Lua脚本代码:
local ips_key = 'production:ips'
local ids = redis.call('ZRANGE', ips_key, 0, '+inf', 'WITHSCORES')
local result = {}
for i, name in ipairs(ids) do
table.insert(result, name)
end
return js.global:Array(table.unpack(result))
我使用ioredis,这是一个re
我正在使用Node.js和'redis-scripto‘模块,我试图在Lua中定义一个函数:
var redis = require("redis");
var redisClient = redis.createClient("6379","127.0.0.1");
var Scripto = require('redis-scripto');
var scriptManager = new Scripto(redisClient);
var scripts = {'add_script
我有三个Redis服务器实例,运行sentinel和一个Lua脚本,以便让redis_exporter收集连接到Redis服务器的客户端列表。但是,当我将脚本传递给redis-cli命令时,会得到以下错误:
(error) ERR Error running script (call to f_4c6be190ef2981eda70d58ec0c959bd1ca2c5352): @user_script:10: @user_script: 10: This Redis command is not allowed from scripts
这是我的Lua剧本:
local r = redis.