当前位置: 首页 > 面试题库 >

如何在REST中实现粗粒度的乐观锁?

容磊
2023-03-14
问题内容

通过将GET中的版本号传回PUT调用,我对与数据库表进行一对一映射的REST资源实现了乐观锁定。如果在执行GET和PUT的时间之间数据库中的版本号发生了更改,则发生了乐观锁异常。相当简单的设计。

现在,如何对映射到多个数据库表的复合REST资源执行相同的操作?我不想回传多个版本字段(与复合资源相关的每个数据表一个)。复合资源的一个简单示例是/
FooBar,其中/ Foo和/ Bar是非复合资源。

我基本上是在寻找Fowler粗粒度锁定模式的REST实现的示例:http
:
//martinfowler.com/eaaCatalog/coarseGrainedLock.html


问题答案:

这就是ETag标头设计的目的。实现它的一种非常常见的方法是生成您的响应有效负载,对其进行哈希处理(它不一定是安全的,只是低冲突),然后将该哈希值用作ETag的值。请注意,这种方法不知道产生响应涉及多少来源。

然后,客户端将接收到的ETag发送回If-
Match
标头,服务器可以使用该标头检查请求的新鲜度。



 类似资料:
  • 本文向大家介绍权限控制之粗粒度与细粒度概念及实现简单介绍,包括了权限控制之粗粒度与细粒度概念及实现简单介绍的使用技巧和注意事项,需要的朋友参考一下 本文简单介绍了权限控制之粗粒度与细粒度概念及实现,下面看看具体内容。 1.   什么是粗粒度和细粒度权限 粗粒度权限管理,对资源类型的权限管理。资源类型比如:菜单、url连接、用户添加页面、用户信息、类方法、页面中按钮。。 粗粒度权限管理比如:超级管理

  • 我读到我们可以使用<code>@version</code>在hibernate中使用version字段实现乐观锁定。然后,通过阅读悲观锁定,我知道了<code>org.hidbernate。LockMode</code>类,它有一些选项,如<code>LockMod。我们可以在中指定的OPTIMISTICetc。 所以我的问题是我是否需要同时使用和?

  • 1. 前言 在锁一节中,我们从粒度和管理两个角度来阐述了锁。如果你还不熟悉锁,请先阅读该小节,再来进行本小节的学习。 本小节我们将继续深挖锁,以开发者和实战的角度来谈锁。 2. 为什么需要锁 2.1 什么是数据竞争 在本节的开头,我们来谈一谈为什么开发程序需要使用锁?如果你有一点并发编程的基础,又或者对多线程有一点熟悉,那么你肯定知道答案,那就是数据竞争。 2.2 数据竞争实例 我们举一个生活的例

  • 问题内容: 我试图按顺序实施乐观锁定,以避免丢失更新情况。在我的应用程序中,当两个用户获取相同的记录,而第一个用户通过一些更改对其进行更新时。查看相同记录的第二个用户看不到此更改,并且他自己进行了一些更改并更新了该记录。因此,第一人称更改丢失。为了防止这种情况,我写了以下内容,但问题仍然存在。我是这个概念的新手,无法发现问题。 我试图通过阅读doc 11.3.4 来实现这一目标。自定义自动版本控制

  • 我正在浏览Spring Data MongoDB参考文档,发现示例有点过于简单。 特别是,我试图了解如何在并发环境中处理陈旧数据。例如,假设我有以下实体: 但是我有点担心,如果我想做的每种类型的更新都需要一个新的方法,那么我的存储库接口将无法控制地增长。 我意识到我实际上还没有提出一个问题,所以现在开始了:在MongoDB中使用Spring数据设计应用程序的最佳实践是什么?

  • 本文向大家介绍几种JAVA细粒度锁的实现方式,包括了几种JAVA细粒度锁的实现方式的使用技巧和注意事项,需要的朋友参考一下 最近在工作上碰见了一些高并发的场景需要加锁来保证业务逻辑的正确性,并且要求加锁后性能不能受到太大的影响。初步的想法是通过数据的时间戳,id等关键字来加锁,从而保证不同类型数据处理的并发性。而java自身api提供的锁粒度太大,很难同时满足这些需求,于是自己动手写了几个简单的扩