我对这个话题不太了解(因此提出这个问题),所以标题和其他任何内容可能会有点不对,请随意编辑或建议更改。
我甚至不确定这是否是针对此类问题的正确堆栈交换网站,但这是我最好的猜测(如果您认为另一个更适合,请发表评论)。
type annotations
是为了帮助澄清;[T;n]
是一个T
长度为n
我想在客户端交互之间缓存服务器端数据。
我有一个 Web 应用程序,它有以下一系列 AJAX 调用:
- 用户上传一张灰度图像(
[uint;n]
)。 - 应用程序将此图像转换为二值图像(
255
或0
,[bool;n]
),然后找到非连续黑色区域周围的边界([(uint,uint);m]
),然后返回这些边界。 - 用户判断这些界限是否准确,客户端返回
[bool;m]
在 2. 和 3. 之间,服务器使用用户反馈进行过滤[(uint,uint);m]
。为此,我可以看到 2 种方法:
方法 1:服务器将发送[(uint,uint);m]
给客户端,然后客户端发回修改[(uint,uint);m]
后的内容。
方法 2:服务器缓存然后发送[(uint,uint);m]
给客户端,然后客户端返回[bool;m]
。
方法 2 是可取的,因为这样发送到服务器的数据要少得多,减少了 128 倍(1*m
Vs 2*64*m
,当m=100
,13 bytes
Vs 1600 bytes
)。
我需要一些快速的方法来在客户端交互之间缓存这些值,一个可以快速推送和拉取边界的列表(就像队列一样)(其中项目使用时间戳推送并在时间限制后删除)。
当我想到在部署过程中客户端调用可能会被发送到运行在不同核心上或甚至可能是不同系统上的不同实例时,我的问题就出现了。
使用列表无法跨核心工作,使用内存数据存储(如redis)我认为它无法跨系统运作。
有没有一个好的方法来解决这个问题,或者我应该简单地采用方法 1?