新在Symfoob娱乐下载ny 3.3:锁组件
2017年3月27日,·发表的哈维尔Eguiluz
警告:这篇文章是关于一个不受支持的Symfony的版本。ob娱乐下载其中一些信息可能是过时了。阅读最近的Symfony文档ob娱乐下载。
提供的
杰里米Derusse
在# 21093。
警告:这个组件终于从Symfony 3.3和3.4推迟Symfony,有更多的时间来波兰ob娱乐下载和稳定。
在计算机科学中,一个锁是“同步机制实施限制访问资源的环境中,有许多线程的执行”。例如在ob娱乐下载Symfony应用程序使用锁来防止多个服务器同时执行一个给定的命令。
在Syob娱乐下载mfony 2.6中我们添加了一个LockHandler实用程序来简化锁的创建。在内部,这个实用程序使用PHP的群()
功能,所以它是基于文件系统,不能在不同的服务器上创建共享锁。
在Syob娱乐下载mfony 3.3我们决定扩展这个机制,我们创建了一个全新的锁组件这些特性:
- 它支持多个锁存储:
群()
信号,PHP扩展,复述和Memcache; - 它创造了阻塞,阻塞和auto-expiring锁;
- 它允许结合几个商店(例如同时复述和群),它可以应用不同的策略(共识,多数)。
当作为一个独立的组件,你首先定义存储使用,然后创建一个工厂用于创建锁:
1 2 3 4 5
使用ob娱乐下载\组件\锁\工厂;使用ob娱乐下载\组件\锁\商店\SemaphoreStore;美元商店=新SemaphoreStore ();美元工厂=新工厂(美元商店);
然后,您可以获取、检查、更新或释放锁:
1 2 3 4 5 6 7 8 9
/ /……美元锁=美元工厂- >createLock (“pdf-invoice-generation”);如果(美元锁- >获得()){/ /资源“pdf-invoice-generation”是锁着的。/ /这里可以安全地计算并生成发票。美元锁- >release ();}
当在Symfony框架中使用时,它的使用大ob娱乐下载大简化。首先,定义要使用的类型的锁(可以定义多个锁类型如果需要):
1 2 3 4 5 6 7 8 9
# app / config / config.yml框架:#这些都是支持群商店锁:“群”锁:“信号”锁:“memcached: / / m1.docker”锁:[' memcached: / / m1.docker ',“memcached: / / m2.docker”]锁:“复述:/ / r1.docker”锁:['复述:/ / r1.docker ',“复述:/ / r2.docker”]
然后,使用锁
服务获取、检查、更新或释放锁:
1 2 3 4 5 6 7 8 9 10 11
/ /阻塞,non-expiring美元锁=美元容器- >get (“锁”)- >获得();/ /阻塞,non-expiring(无限期等待,直到锁)美元锁=美元容器- >get (“锁”)- >获得(真正的);/ /非阻塞,在60秒内到期(除非锁刷新)美元锁=美元容器- >get (“锁”)- >获得(假,60);/ /正常操作的锁美元锁- >isAcquired ();美元锁- >refresh ();美元锁- >release ();
的欧宝官网下载app组件的文档准备好了但是没有合并和与Symfony框架的集成ob娱乐下载也定义但等待合并。
发表在#生活在边缘
评论
布莱恩Debuire
说,3月27日,2017年在21:50
这是太棒了!这就是失踪了我的控制台组件应用程序,例如长时间运行的cron作业,)
惊人的工作,谢谢。
一个小错误:
阻塞,non-expiring(无限期等待,直到锁)
应该是
阻塞,non-expiring(无限期等待,直到释放锁)
一个小错误:
阻塞,non-expiring(无限期等待,直到锁)
应该是
阻塞,non-expiring(无限期等待,直到释放锁)
@AbdelKader我不认为这是一个错误。但是你的版本是正确的。这一切都取决于角度:“我等待……直到我获得锁”vs。“我等待……直到其他人释放锁”。
迈克尔COULLERET
3月28日表示,2017年在16:04
增加得好!谢谢
Quentin Fahrner is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register Now