这可能更像是一个由两部分组成的问题,但主要焦点实际上是如何将数据从 MySql 移植到 Redis。我已经阅读了 [此处的过程][1],但就如何处理我的多列数据集而言,这让我有点头疼。最终目标是我想将我的事件提要从 SQL 转移到 Redis。据我所知,最好的办法是将这些数据存储在哈希中,然后使用排序集对其进行排序。最常见的开始排序就是 created_at。
那么问题是:
1) 通过命令行将其移植到 SQL 的快速方法是什么?
2) 如何将其构造为通过 created_at 进行排序?
最佳答案
警告:迁移到 Redis 对您来说不一定是个好主意。大多数时候,将整个 MySQL 数据库移动到 Redis 不是一个好主意,因为 MySQL 让您可以更松散地查询,并且比 Redis 更容易进行复杂的查询。我将告诉您如何将事情转移过来,但您很可能只想对您的某些数据(或什至根本不这样做)执行此操作,以实现对速度要求高于一切的功能。
因此,假设您需要在数据传入时进行切换,您需要做几件事:
您将要开始向 MySQL 和 Redis 发送数据,并以某种方式标记已发送到这两者的行(可能您的 updated_at 列适用于此——只需标记您第一次发送的时间开始向两者发送数据)。
将所有旧数据移至 Redis。您可以通过使用 Python 之类的语言编写一个快速脚本来完成此操作,该脚本将使用
updated_at <= redis_start_date
获取所有数据。并将其插入到 Redis 中。现在,您的 Redis 数据库应该准确地镜像您的 MySQL 数据库,并且您可以期望它在未来继续镜像。确保过去依赖 MySQL 的所有适当 API 都有适用于 Redis 的新版本。
严格测试所有内容,确保 Redis 中的数据与 MySQL 中的数据相匹配,并采用您想要的格式,同时确保所有适当的 API 都可以使用它,等等...
一旦您确信所有这些都已设置好,只需将您的实时 API 切换为使用 Redis 而不是 MySQL 的 API。您可以错开此过程,一次切换一个,并验证一切是否正确。由于数据同时写入 MySQL 和 Redis,您可以随时回滚,以防出现问题。
一旦您切换了所有内容并确信它可以按照您想要的方式与 Redis 一起工作,请关闭正在写入 MySQL 的代码并享受您快速的新 Redis 数据库。
就结构而言,这实际上取决于您如何使用它。如果您只需要能够根据 id 查找单个项目并根据 created_at 对它们进行排序,则可以使用 (key = id; score=unix_time(created_at))
的排序集。以及每隔一列的 (id->column) 的哈希值。同样,这不是您必须要做的事情,它取决于您的用例。
关于mysql - 从 MySql 移植到 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24539477/