ruby-on-rails - Memcache 数据更新问题
问题描述
我需要帮助来优化 Rails 代码以更新 Memcache 数据。问题是,我以以下方式获得特定匹配的 JSON 数据并写入缓存。
match_data = {'teams' : 'Team one', 'Team two', 'score' { 'team1':0, 'team2': 1 }, time: 60 }
Rails.cache.write('match_123', match_data) #123 is match id
以上是一个非常小的匹配示例,它可以包含大量数据。
因此,匹配数据在应用程序中频繁地从服务接收,并在缓存中更新,并在前端显示。所以实际的问题是我收到了比赛更新作为响应,比如分数、时间、单独和频繁。所以我使用下面的代码来更新缓存数据。
data = Rails.cache.read('match_123')
data[:time] = 120
OR
data[:score][:team1] = 1
Rails.cache.write('match_123', data)
我正在使用后台作业来执行上述过程。这个过程太快了,我们有多个匹配一起运行,所以在某个时刻,当我们每次在缓存中更新完整的匹配哈希以获取特定的键值更改时,这里发生了什么。那么当我们有两个队列时会发生什么,例如:
UpdateMatchCacheDataJob.perform_later(score_update)
UpdateMatchCacheDataJob.perform_later(time_update)
假设此队列一次一起运行,它将更新缓存中的时间或分数。这就是我面临的复杂性。我现在也尝试过执行这项工作,但有时会遇到问题。
UpdateMatchCacheDataJob.perform_now(score_update)
UpdateMatchCacheDataJob.perform_now(time_update)
如果我使用需要更新的特定数据而不是每次都更新完整的哈希,我的问题可能会解决。或者有没有办法更新哈希中的特定数据
注意:我使用 AWS Memcache 实例来存储缓存数据。
我希望我能解释我的问题,如果我有任何需要解释问题的地方,请告诉我。
解决方案
推荐阅读
- swagger - Swagger OAS3.0 同一响应代码中的多个响应
- hibernate - 为什么即使设置为延迟获取,Hibernate 也会加载 ManyToOne 相关实体?
- java - 在进行非阻塞读取或写入时关闭 SocketChannel
- html - Bootstrap 4.1.3:应用 blockquote 类时侧边栏不显示
- swagger-ui - 在 Swagger-UI 中实现的 OpenID Connect(Google 的 Oauth)功能?
- android - 用于实现 React-Native WebView 的包
- c# - 没有 [ServiceFilter] 或 [TypeFilter] 的过滤器中的 Asp.net Core 依赖注入
- javascript - 为什么 Marzipano 不在移动设备(浏览器)上显示图像
- python - Tensorflow 实现多元学生 T 对角分布
- c - GCC 数组优化