redis-lua 访问缓慢的问题

2019-08-09 09:15:59 +08:00
 snal123

小弟试着用了 redis-lua 实现分布式锁,测试脚本发现一次请求需要 1s,一直没有找到原因,请各位大佬们看看。 (我也用了 sha 方法先提前注册到 redis,结果依然是 1s 返回)

import redis
import time
conn = redis.Redis()

lua="""
    local ret = redis.call("get", KEYS[1])
    if (ret ~= ARGV[1]) then
        redis.call("set", KEYS[1], ARGV[1])
        return 1
    else
        return 0
    end 
"""
def test2():
    start_time = time.time()
    script = conn.register_script(lua)
    print(script(keys=["iii"], args=["0"]))
    print(time.time() - start_time)   # 返回需要 1s

test2()
12149 次点击
所在节点    Redis
7 条回复
wccc
2019-08-09 09:36:30 +08:00
redis 连接不用时间?
keakon
2019-08-09 09:40:29 +08:00
我这返回 5 毫秒。
snal123
2019-08-09 09:44:37 +08:00
@wccc 我懂了。。感谢!
snal123
2019-08-09 09:49:39 +08:00
已解决,1s 的原因是第一次连接,一开始一直没懂因为以为连接的时间在创建对象的时候,我的理解是事实上 conn 只是一个描述符,类似一个指针,真正和 redis 建立连接是在第一次发起请求的时候,在 test2()上加 100 个循环就能得出只有第一次需要 1s,后面每次都是毫秒级别的响应。
qipan0321
2019-08-09 10:05:55 +08:00
要加连接池的吧
aliipay
2019-08-09 12:15:58 +08:00
可以用 redis client 或者 telnet 连接看是否要很久
vtychx
2019-08-09 12:30:37 +08:00
楼主萌新。很多之前做前端的没有长连接的概念,不了解 connect 的代价。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/590348

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX