redis - 存储数据并同时订购列表的最佳方式

标签 redis cron sortedset

我有那些变化很大的数据,不会出现在我的 postgres 表中。 我想从这些数据中得到好处。 我正在尝试找出一种方法来考虑:

  • 易于使用
  • 表现

<强>1。使用Hash + CRON 频繁构建有序集合

在这种情况下,我有很多用户数据存储在这样的哈希中:

u:25463:d = { "xp":45124, "lvl": 12, "like": 15; “喜欢”:2

u:2143:d = { "xp":4523, "lvl": 10, "like": 12; “喜欢”:5

如果我想获得更高lvl人的前15名。我不认为我可以用一个命令来做到这一点。我想我需要扫描所有 u:x:d 数据并从中构建排序集。我错了吗? 在这种情况下性能如何?

2.多序集

在这种情况下,我复制了数据。 我仍然需要第一种情况,但我也更新了不同排序集中的数据,我不需要使用 CRON 来构建它们。

我觉得最好的方法是第一种方法,但如果我有 1000000 个用户怎么办?

或者有别的办法吗?

最佳答案

一种可能性是使用单个排序集 + 哈希。

排序集将仅用作查找,它将用户散列的键存储为值,并将其级别存储为分数。

任何时候你添加一个新玩家/更新他们的级别,你都需要设置哈希,并将项目插入到排序集中。您可以在基于事务的管道或 lua 脚本中执行此操作以确保它们同时运行,从而使您的数据保持一致。

获得顶级玩家意味着获取排序集中的顶级条目,然后使用该集合中的键,使用哈希查找这些玩家的完整数据。

希望对您有所帮助。

关于redis - 存储数据并同时订购列表的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37182739/

相关文章:

redis - 如何在redis中存储排序的对象集?

node.js - Socket.io 发出的信号并不总是在 Node.js + Redis + Heroku(多测功机)环境中收到

Cassandra /雷迪斯 : Way to create feed without Cassandra 'IN' secondary index?

php - CRON 的行为就像在浏览器中运行脚本一样?

shell - 日期比较在 shell 脚本中无法正常工作

Ruby 1.9.3 @OSX Lion 和 Cron

java - 使用 Comparator 对值进行排序会更改该对象的所有值

node.js - 设计模式 : Combining http requests with pluggable Redis caching mechanism

python - 将大文件加载到 Flask 中

c# - 添加到 SortedSet<T> 及其复杂性