1

I have a simple Lua script:

while ( i < 500000 ) do
    redis.call("zadd", 'test1', i, i)
    redis.call( "expire", 'test1', 600 )
    i = i + 1
end

local res = redis.call("zrange", "test1", 0, 500000 )

for k,a in pairs(res) do
    redis.call("zadd", 'test2',k,a)
end

Why this script blocking the Redis server? If I run in another console command, for example: set test 1, result:

 BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE.

2 Answers 2

7

Redis is single-threaded. Every command blocks it. EVAL is also a command, therefore it blocks redis.

Sign up to request clarification or add additional context in comments.

Comments

3

That is why we at Mail.Ru and at myMail use Tarantool NoSQL database instead of Redis that we also were trying to use. In Tarantool every command is being executed in a separate fiber and doesn't block another one. The same thing to Lua scripts - they don't block each other.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.