$ip = $request->getRealIp();
$key =(string) ip2long($ip);
Cache::Incr($key); //1 //再次刷新 3
Locker::lock($key); //无锁则加锁继续 //已经加锁了 阻塞失败
Cache::Incr($key); //2 //这里是4
return Cache::Get($key); //输出2 //输出4,甚至是5 锁失效..
浏览器打开接口然后一直点刷新..
Workerman/5.1.3 PHP/8.3.21 (JIT off) Darwin/23.6.0
--------------------- WORKERS ----------------------
event-loop proto user worker listen count state
fiber tcp lsmir2 webman http://0.0.0.0:8787 2 [OK]
event tcp lsmir2 monitor none 1 [OK]
event tcp lsmir2 plugin.webman.redis-queue.consumer none 2 [OK]
手搓一个多进程锁 感谢兔子大佬的WebmanSharedCache插件真的很好用.
多进程下没问题?
支持多进程,Workbunny\WebmanSharedCache\Cache 是跨进程缓存
Windows环境下locker不生效的, 需要在linux下进行测试
具体看这个: https://www.workerman.net/q/10238
多进程的问题,你看源码就知道了有个静态数组.