V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
snal123
V2EX  ›  Redis

redis-lua 访问缓慢的问题

  •  
  •   snal123 · 2019-08-09 09:15:59 +08:00 · 12309 次点击
    这是一个创建于 1933 天前的主题,其中的信息可能已经有所发展或是发生改变。

    小弟试着用了 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()
    
    7 条回复    2019-08-09 12:30:37 +08:00
    wccc
        1
    wccc  
       2019-08-09 09:36:30 +08:00   ❤️ 1
    redis 连接不用时间?
    keakon
        2
    keakon  
       2019-08-09 09:40:29 +08:00   ❤️ 1
    我这返回 5 毫秒。
    snal123
        3
    snal123  
    OP
       2019-08-09 09:44:37 +08:00
    @wccc 我懂了。。感谢!
    snal123
        4
    snal123  
    OP
       2019-08-09 09:49:39 +08:00
    已解决,1s 的原因是第一次连接,一开始一直没懂因为以为连接的时间在创建对象的时候,我的理解是事实上 conn 只是一个描述符,类似一个指针,真正和 redis 建立连接是在第一次发起请求的时候,在 test2()上加 100 个循环就能得出只有第一次需要 1s,后面每次都是毫秒级别的响应。
    qipan0321
        5
    qipan0321  
       2019-08-09 10:05:55 +08:00 via iPhone
    要加连接池的吧
    aliipay
        6
    aliipay  
       2019-08-09 12:15:58 +08:00
    可以用 redis client 或者 telnet 连接看是否要很久
    vtychx
        7
    vtychx  
       2019-08-09 12:30:37 +08:00
    楼主萌新。很多之前做前端的没有长连接的概念,不了解 connect 的代价。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2900 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:22 · PVG 16:22 · LAX 00:22 · JFK 03:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.