场景:
1. 多个用户同时访问一个页面(包含该程序),或者一个页面同时请求多次该程序
2. 两次请求之间的时间非常短,以至于来不及使用flock或者借助数据库来判断程序是否正在执行
3. 仅在普通的虚拟主机中运行,exec等函数肯定是要禁用的,redis等也并没有提供
问题:
如何在这么短的时间间隔内,保证这段程序仅执行一次?
回复内容:
场景:
1. 多个用户同时访问一个页面(包含该程序),或者一个页面同时请求多次该程序
2. 两次请求之间的时间非常短,以至于来不及使用flock或者借助数据库来判断程序是否正在执行
3. 仅在普通的虚拟主机中运行,exec等函数肯定是要禁用的,redis等也并没有提供
问题:
如何在这么短的时间间隔内,保证这段程序仅执行一次?
我觉得可以从2方面实现。
第一种就是尽量缩短读写锁用的时间,这个可以用nosql来做,memcache就可以了。但是要搞清楚你要精确到什么时间单位。
第二种就是把这个程序变成常驻后台的程序,如命令行程序,使用socket等与常规业务逻辑交换数据。推荐使用swoole拓展来实现。
<code><?php if(!file_exists($flag)) { //如果标记文件不存在,则执行命令ls.执行命令前新建标记文件. touch($flag); exec('ls -lha /tmp', $output, $return_var); } else { exit('命令已经被其他请求执行过'); } </code></code>
通过锁机制解决,乐观锁或者悲观锁处理冲突。
可以将用户访问后可以利用redis或者memcache写入相关数据(此步不执行操作,只是记录,有用户需要操作而已),然后依靠队列功能,服务器异步处理刚刚写入的数据(一旦执行成功,后面的队列都执行失败)
对于这个问题个人觉得就不应该考虑多个请求的进程复用性,原因对于动态网站,数据可能是不一样的,是因为你要加载很多code的效率低呢还是你的业务数据效率低,一般都是业务的数据慢,而不是code解析很慢。如果是业务数据考虑用cache, php的code用opcache就可以了。
对于fpm来说,每个请求都会使用一个进程来处理.不管你间隔时间多短,同时有多少人,规则都是一次请求使用一个进程处理,毕竟本来就是无状态的.你希望有状态,确保诸如生成页面的程序执行一次,那么可以使用缓存,对于竞争生成缓存的情况,可以用缓存锁,例如memcached的add,确保生成缓存的行为只执行一次,若连memcached都没有的话,对于单机环境下,可以考虑使用apc或者apcu.如果memcached没有的话,对于页面的生成,nginx也有个模块可以确保生成缓存的.

PHPsessionstrackuserdataacrossmultiplepagerequestsusingauniqueIDstoredinacookie.Here'showtomanagethemeffectively:1)Startasessionwithsession_start()andstoredatain$_SESSION.2)RegeneratethesessionIDafterloginwithsession_regenerate_id(true)topreventsessi

In PHP, iterating through session data can be achieved through the following steps: 1. Start the session using session_start(). 2. Iterate through foreach loop through all key-value pairs in the $_SESSION array. 3. When processing complex data structures, use is_array() or is_object() functions and use print_r() to output detailed information. 4. When optimizing traversal, paging can be used to avoid processing large amounts of data at one time. This will help you manage and use PHP session data more efficiently in your actual project.

The session realizes user authentication through the server-side state management mechanism. 1) Session creation and generation of unique IDs, 2) IDs are passed through cookies, 3) Server stores and accesses session data through IDs, 4) User authentication and status management are realized, improving application security and user experience.

Tostoreauser'snameinaPHPsession,startthesessionwithsession_start(),thenassignthenameto$_SESSION['username'].1)Usesession_start()toinitializethesession.2)Assigntheuser'snameto$_SESSION['username'].Thisallowsyoutoaccessthenameacrossmultiplepages,enhanc

Reasons for PHPSession failure include configuration errors, cookie issues, and session expiration. 1. Configuration error: Check and set the correct session.save_path. 2.Cookie problem: Make sure the cookie is set correctly. 3.Session expires: Adjust session.gc_maxlifetime value to extend session time.

Methods to debug session problems in PHP include: 1. Check whether the session is started correctly; 2. Verify the delivery of the session ID; 3. Check the storage and reading of session data; 4. Check the server configuration. By outputting session ID and data, viewing session file content, etc., you can effectively diagnose and solve session-related problems.

Multiple calls to session_start() will result in warning messages and possible data overwrites. 1) PHP will issue a warning, prompting that the session has been started. 2) It may cause unexpected overwriting of session data. 3) Use session_status() to check the session status to avoid repeated calls.

Configuring the session lifecycle in PHP can be achieved by setting session.gc_maxlifetime and session.cookie_lifetime. 1) session.gc_maxlifetime controls the survival time of server-side session data, 2) session.cookie_lifetime controls the life cycle of client cookies. When set to 0, the cookie expires when the browser is closed.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Dreamweaver CS6
Visual web development tools
