锁-并发处理
在实际的开发中我们经常会碰到并发的问题,这时候根据业务场景可以使用不同的方式去处理并发的问题。比如使用锁机制、队列的使用等。在CmlPHP
要使用队列可以参考队列服务。同时CmlPHP
也提供了易于使用的锁功能。
- 在控制器中使用锁$this->locker()或者\Cml\Lock::getLocker()获取锁实例
- 在Server中使用锁$this->locker()或者\Cml\Lock::getLocker()获取锁实例
- 其它地方统一使用\Cml\Lock::getLocker()获取锁实例
锁实例有lock()
和unlock()
方法//lock如果未unlock会在脚本执行结束统一解锁
v2.7开始在入口中配置使用的锁\Cml::getContainer()->singleton('cml_lock', \Cml\Lock\Redis::class);
内置\Cml\Lock\File::class|\Cml\Lock\Redis::class|\Cml\Lock\Memcache::class三种内置的redis锁跟/memcache锁 跟缓存服务挂钩,可以通过配置文件中'locker_use_cache' => 'default_cache'
配置,默认使用default_cache
也可以在获取锁实例的时候手动指定如:\Cml\Lock::getLocker('default_cache')
指定使用default_cache中配置的缓存