php – 缓存节点失败的数据不一致
我遇到的问题是我的数据库中的数据被恢复到旧状态.我想我已将问题缩小到这种情况.
想象一下这两次购买的顺序如下: >所有缓存节点都在工作 我们现在丢失了数据,因为数据库记录被重写了部分过时的信息. 如何使用持久连接的PHP5和libmemcached来防止这种情况?我想我想要的是缓存节点根本不进行故障转移;它应该只是无法读取和写入该节点,但不能将其从池中删除,以便我不会有重复的记录. 当节点出现故障时,这将使我的数据库上的负载增加1 / n(其中n是缓存节点的总数),但最好是数据不一致. 不幸的是,我无法理解应该更改哪些设置以获得此行为.
我喜欢在Doctrine ORM中实现的
versioning and optimistic lock approach.你也可以做到的.它不会增加数据库的负载,但需要进行一些重构.
基本上,您为要缓存的所有表添加版本号,将更新查询更改为增加版本版本=版本1并添加版本= $版本条件(请注意$version来自您的php / memcache).您需要检查受影响的行数,如果为0则抛出异常. 由您决定如何处理此类异常.您可以为此记录无效缓存,并要求用户重新提交表单,或者您可以尝试合并更改.此时,您有来自缓存的过时数据,来自用户输入的更新以及来自数据库的新数据,因此唯一不可恢复的情况是当您为同一列有3个不同的值时. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |