首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有一个包含10K条记录的静态用户列表/序列,这是threadsafe吗?

有一个包含10K条记录的静态用户列表/序列,这是threadsafe吗?
EN

Stack Overflow用户
提问于 2021-05-09 11:30:16
回答 1查看 30关注 0票数 2

假设我有一个对一个用户集合的list/seq的静态引用:

代码语言:javascript
复制
val users = List(User(..), User(...))

在我的控制器中,根据传入的querystring过滤器,我将过滤users集合。

代码语言:javascript
复制
/users/find?locationId=1&age=30

该操作将类似于:

代码语言:javascript
复制
def findUsers(...) = Action {
  val filteredUsers = users.filter(.....)
  Ok(filteredUsers)
}

因此,如果这个端点每秒收到10K个请求,users引用是一个val,而我只是以只读的方式过滤结果,那么这个端点应该是非常快的正确的吗?

这个问题的第二部分是,既然我不能硬编码一个集合中的10K用户,那么模仿这种行为的最佳方法是什么,或者如果我从db加载数据,在这种情况下,我是否被迫将其设置为var?

代码语言:javascript
复制
var users = userService.getAll()

我需要定期重新加载这个用户,可能每隔3-4个小时。

EN

回答 1

Stack Overflow用户

发布于 2021-05-09 14:55:32

所以,如果这个端点每秒收到10K个请求,用户引用是一个val,而我只是以只读的方式过滤结果,那么这个端点应该是非常快的,对吗?

是的,这里没有线程安全方面的问题。如果你使用一些东西来刷新这个列表,当两个客户端在刷新缓存时命中相同的url时,你可能会得到不同的响应。如果这是一个问题,可以对其进行补救。在大多数情况下,这不是问题。

如果您想自己实现刷新,可以使用var。还有其他方法,如使用将保持此状态的参与者。然而,我认为Play框架已经提供了最好的选择:ScalaCache

https://www.playframework.com/documentation/2.8.x/ScalaCache

它有缓存刷新和过期。

如果你想进一步加速,你可以缓存过滤的结果,如果它对你有意义的话。因此,它可以是所有结果和过滤结果的双缓存,也可以只是过滤结果的缓存。这取决于你的需要。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67454063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档