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