如何实现文章多用户编辑互斥限制?求WordPress实现机制及方案
多用户并发编辑锁定方案及WordPress实现机制
一、核心实现思路
- 基于编辑会话锁机制:用户进入编辑状态时,为目标文章生成唯一锁标识,记录锁的持有者、创建时间与过期时间
- 锁校验逻辑:其他用户进入编辑页前,先检查目标文章是否存在有效锁,存在则拦截编辑请求,仅允许查看或等待锁释放
- 自动释放机制:若用户关闭页面、超时无操作,系统自动释放锁,避免文章被永久锁定
二、WordPress的具体实现机制
WordPress的该功能名为Post Locking,核心逻辑如下:
- 锁的存储:利用
wp_options表存储锁信息,键名格式为_edit_lock_{post_id},值为{用户ID}:{时间戳} - 前端触发与校验:
- 用户进入文章编辑页时,通过AJAX请求
wp-admin/admin-ajax.php调用wp_set_post_lock()接口创建锁;前端每隔150秒(默认值)发送请求刷新锁的过期时间 - 其他用户打开同一文章编辑页时,前端调用
wp_check_post_lock()接口检测锁状态,若存在有效锁,会显示「该文章正在被XX编辑」的提示,仅允许进入只读模式
- 用户进入文章编辑页时,通过AJAX请求
- 锁的释放逻辑:
- 用户主动点击「更新」或关闭编辑页时,触发AJAX请求调用
wp_delete_post_lock()释放锁 - 若锁的时间戳超过当前时间+150秒,系统自动判定锁失效,允许其他用户获取锁
- 用户主动点击「更新」或关闭编辑页时,触发AJAX请求调用
三、通用实现步骤(非WordPress场景)
如果是自研系统,可参考以下流程实现:
- 数据库设计:新增
edit_locks表,字段至少包含id、target_id(文章ID)、user_id(锁持有者ID)、created_at(创建时间)、expires_at(过期时间) - 后端接口开发:
acquire_lock接口:接收文章ID与用户ID,检查是否存在未过期锁,不存在则创建锁并返回成功,否则返回锁定状态及持有者信息refresh_lock接口:用户编辑过程中定时调用,更新锁的过期时间release_lock接口:用户完成编辑或关闭页面时调用,删除对应锁
- 前端交互处理:
- 进入编辑页前先调用
acquire_lock,失败则展示锁定提示,禁用编辑功能 - 编辑过程中每隔固定时间调用
refresh_lock维持锁的有效性 - 监听页面
beforeunload事件,在用户关闭页面时调用release_lock释放锁
- 进入编辑页前先调用
- 异常兜底处理:
- 定时清理过期锁,处理用户强制关闭浏览器、网络中断等异常场景
- 提供管理员手动解锁入口,避免特殊情况下的永久锁定
内容的提问来源于stack exchange,提问作者Marko Tomic
相关产品推荐
相关产品推荐

