比如我们网站有很多订单 , 但是 管理权限的客服有很多人 .
如何防止多人同时编辑呢
回复内容:
比如我们网站有很多订单 , 但是 管理权限的客服有很多人 .
如何防止多人同时编辑呢
多状态嘛,编辑的时候,把状态改成编辑中,其他人不可以操作,完成了再把它状态修改下,这个是比较容易操作的。
比较科学的做法
1.提交方式是ajax
2.订单增加last_update_dateline字段存时间戳,每次修改更新该字段
3.提交订单时对比时间戳,如果晚于last_update_dateline,提示ajax弹框提示用户已经被修改过,是刷新加载新的订单内容,还是继续提交。
get√ ~
这种场景,多人同时编辑避免不了的,
决解办法可以参考SVN的做法,用户正式提交前告诉用户,他提交的版本和此时在服务器的版本之间的差异,让他来确认提交,或者继续修改
提交的时候做最近时间的确认,看是否与你提取数据的时候一直,并且用最新数据提示用户是否需要覆盖
两个比较容易实现的方法:
1.把订单编辑操作设置权限。可以按订单的类型、时间、区域等划分;
2.修改订单的显示条件。如果一个订单正在编辑中,可以有一个唯一状态,此时订单列表不显示该订单;
补充楼上。
编辑时记录进入时刻。
如果有人在进入时刻之后提交了数据,则提示刚刚有人提交过。
- ETag 判断修改的资源是否是最新的
- DB 也要加入防止并发修改的逻辑(简单一点使用行锁就可以)
就像上厕所, 每次只能一个人用; 厕所里有人就把门关上; 其他人要用的话就要在后面排着; 有的人着急就插队?
这个比较容易实现吧.
在订单列表里查询订单状态,如果是正在处理 就把订单灰掉; 客服点击订单之后就把订单状态改过正在处理状态,客服完成后或者取消修改,订单状态依次修改为 已处理/ 未处理. 然后就是细节的逻辑判断了;
是不允许多人同时编辑呢,还是解决多人同时编辑的冲突。如果是不允许那就给订单设置一个编辑中的状态,定好时间戳不久应该行吧。如果是解决多人编辑冲突,那就可以仿照github的分支,已有的就是主分支,每一个编辑的人都会创建一个分支,编辑完成之后合并到主分支。这样也应该行吧。
使用加锁机制
这个问题楼主问的比较粗糙,解决核心是数据库是一定要加锁的,否则根本做不到并发造成的多个客服读到同一个订单而导致多人编辑该订单的情况。
假设数据库是mysql,innodb引擎,订单表为orders,id为主键。所有的客服首先看到一个订单列表,然后客服点击某个订单进入订单修改页面,进入订单修改页面的php逻辑如下:
1,update orders set status="编辑中" where id=xx and status != "编辑中";
检查update语句执行后返回值,如果返回值为1(1表示更新了一行数据),表示更新成功,否则提示该订单正在编辑中。
上面的方法有两个要点:
1,update操作默认会锁住行,update执行完成后释放行锁;
2,status != "编辑中" 很重要,假设a,b两个客服并发访问,a先执行update操作,那么b会等待a操作完成才能执行自己的update操作,等待完后发现status= "编辑中",所以b什么都不做,虽然update操作成功,但是更新的行数为0;
另外一种情况是有很多需要修改的订单系统随机分配给客服,就是说客服一进入某个页面会看到一个需要修改的订单,并且要求客服们看到的订单不能重复,逻辑可以是这样:
1,begin;(开始一个事务)
2,select * from orders where status != "编辑中" limit 1 for update;
3,将得到这个订单update操作设置 status = "编辑中"
4,commit;
要点是第2步会锁定所有status != "编辑中"的订单记录,其他人需要等待事务提交后才能读到数据。如果事务等待超时时间比较短,可以设置长一点,同时如果操作失可以再读一遍。
利用memcache实现锁

PHP和Python各有优势,选择应基于项目需求。1.PHP适合web开发,语法简单,执行效率高。2.Python适用于数据科学和机器学习,语法简洁,库丰富。

PHP不是在消亡,而是在不断适应和进化。1)PHP从1994年起经历多次版本迭代,适应新技术趋势。2)目前广泛应用于电子商务、内容管理系统等领域。3)PHP8引入JIT编译器等功能,提升性能和现代化。4)使用OPcache和遵循PSR-12标准可优化性能和代码质量。

PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。

在PHP中,trait适用于需要方法复用但不适合使用继承的情况。1)trait允许在类中复用方法,避免多重继承复杂性。2)使用trait时需注意方法冲突,可通过insteadof和as关键字解决。3)应避免过度使用trait,保持其单一职责,以优化性能和提高代码可维护性。

依赖注入容器(DIC)是一种管理和提供对象依赖关系的工具,用于PHP项目中。DIC的主要好处包括:1.解耦,使组件独立,代码易维护和测试;2.灵活性,易替换或修改依赖关系;3.可测试性,方便注入mock对象进行单元测试。

SplFixedArray在PHP中是一种固定大小的数组,适用于需要高性能和低内存使用量的场景。1)它在创建时需指定大小,避免动态调整带来的开销。2)基于C语言数组,直接操作内存,访问速度快。3)适合大规模数据处理和内存敏感环境,但需谨慎使用,因其大小固定。

PHP通过$\_FILES变量处理文件上传,确保安全性的方法包括:1.检查上传错误,2.验证文件类型和大小,3.防止文件覆盖,4.移动文件到永久存储位置。

JavaScript中处理空值可以使用NullCoalescingOperator(??)和NullCoalescingAssignmentOperator(??=)。1.??返回第一个非null或非undefined的操作数。2.??=将变量赋值为右操作数的值,但前提是该变量为null或undefined。这些操作符简化了代码逻辑,提高了可读性和性能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3汉化版
中文版,非常好用