Architecture REST应用程序、事务、缓存丢弃
我正在用php构建RESTAPI,上面是memcache层,用于缓存所有资源。经过一段时间的阅读/体验,最好是文档尽可能简单…主要是因为删除了缓存序列 因此,如果“房间”文档中有“建筑”、“房间”实体,我只会放置“建筑”的id,而不是它的全部数据。然后在api客户端,我会根据需要合并数据 当我需要更新/插入(大多数情况下不止一个表)时,问题就出现了。我更新了一个资源,但在第二次更新时,系统出现了故障或其他问题,导致数据库不一致 我看到了几种解决方案:Architecture REST应用程序、事务、缓存丢弃,architecture,rest,caching,transactions,Architecture,Rest,Caching,Transactions,我正在用php构建RESTAPI,上面是memcache层,用于缓存所有资源。经过一段时间的阅读/体验,最好是文档尽可能简单…主要是因为删除了缓存序列 因此,如果“房间”文档中有“建筑”、“房间”实体,我只会放置“建筑”的id,而不是它的全部数据。然后在api客户端,我会根据需要合并数据 当我需要更新/插入(大多数情况下不止一个表)时,问题就出现了。我更新了一个资源,但在第二次更新时,系统出现了故障或其他问题,导致数据库不一致 我看到了几种解决方案: 实现rest事务,我发现它是错误的和复杂的,
干杯,您想做的是: 客户端代理缓存(如Squid)REST接口memcached域模型 如果充分利用HTTP缓存,可能根本不需要memcached层。缓存失效是一个需要解决的棘手问题,HTTP有很多规则和机制可以让您保持清醒。我对memcached不是很熟悉,但在谷歌上快速搜索一下这个主题似乎表明,您需要推出自己的缓存失效策略。HTTP还有一个额外的好处,就是能够在客户端缓存内容 如果客户机需要同时更新多个域对象,则需要在REST接口中创建表示虚拟“复合”对象的资源。客户端应该只感知到他们正在更新单个资源。如果愿意,可以在后台更新数据库事务中的多个资源
如果您将资源映射到您的应用程序,REST系统更容易创建。大多数人犯的错误是试图将REST资源严格映射到域对象。这可能有密切的关系,但它不会是一个直接的映射,除非你有一个非常无聊的应用程序 您想做的是: 客户端代理缓存(如Squid)REST接口memcached域模型 如果充分利用HTTP缓存,可能根本不需要memcached层。缓存失效是一个需要解决的棘手问题,HTTP有很多规则和机制可以让您保持清醒。我对memcached不是很熟悉,但在谷歌上快速搜索一下这个主题似乎表明,您需要推出自己的缓存失效策略。HTTP还有一个额外的好处,就是能够在客户端缓存内容 如果客户机需要同时更新多个域对象,则需要在REST接口中创建表示虚拟“复合”对象的资源。客户端应该只感知到他们正在更新单个资源。如果愿意,可以在后台更新数据库事务中的多个资源 如果您将资源映射到您的应用程序,REST系统更容易创建。大多数人犯的错误是试图将REST资源严格映射到域对象。这可能有密切的关系,但它不会是一个直接的映射,除非你有一个非常无聊的应用程序