将一些redis数据归档到磁盘

将一些redis数据归档到磁盘,redis,archive,Redis,Archive,我最近一直在使用redis,我真的很喜欢它。我对持久性rdb和aof非常熟悉。我确实有一点担心。一旦数据不再重要,我希望能够有选择地将其归档到磁盘或更便宜的存储中。我真的不想删除它,因为它在某个时候可能很有价值 我所有的钥匙都被命名为id\uuuu。因此,当我完成id 4时,我想归档所有与id_4_*匹配的密钥。我可以用命令行很容易地查看它们,但是我不能用它们做任何事情,persay。我有相当多的数据—与此数据集关联的非常大的位图,坦率地说,一旦id不再相关或重要,我就负担不起空间 如果这是my

我最近一直在使用redis,我真的很喜欢它。我对持久性rdb和aof非常熟悉。我确实有一点担心。一旦数据不再重要,我希望能够有选择地将其归档到磁盘或更便宜的存储中。我真的不想删除它,因为它在某个时候可能很有价值

我所有的钥匙都被命名为id\uuuu。因此,当我完成id 4时,我想归档所有与id_4_*匹配的密钥。我可以用命令行很容易地查看它们,但是我不能用它们做任何事情,persay。我有相当多的数据—与此数据集关联的非常大的位图,坦率地说,一旦id不再相关或重要,我就负担不起空间

如果这是mysql,我会有不同的表,并且很容易将其转储到.sql文件中,然后删除该表。实际的.sql文件对我没有直接的帮助,但是如果需要,我可以重新导入数据。或者我必须使用mysql数据库,我想将一个表移动到另一个数据库。这些过程是否有redis推论?是否有某种方法可以使rdb或aof文件成为数据的子集


在此问题上的任何帮助或意见将不胜感激!谢谢

给你一些建议

我希望能够有选择地将我的一些数据归档到 磁盘或更便宜的存储一旦不再重要。我不 我真的想删除它,因为它在某个时候可能很有价值

如果这样的数据有价值,使用传统的数据库进行存储。尽管redis支持快照到磁盘和AOF日志,但您应该将其视为大部分易失性存储。redis的主要用例是减少延迟,而不是有价值数据的持久性

所以当我完成id 4时,我想归档所有 匹配id_4_*

你做了什么?你需要问自己这个问题;这是否意味着1天后数据会从redis中消失?如果是这样,只需使用TTL和expiration就可以让redis从内存中删除对象。如果您再次需要它,请返回数据库并将该对象拉回到redis中。第一个客户机将承受从数据库拉取的冲击,但随后的请求将被缓存。如果“完成”意味着与特定持续时间无关,那么您必须手动从redis中删除项目以节省内存空间

如果这是mysql,我会有不同的表,并且会非常 轻松地将其转储到.sql文件中,然后删除该表。实际的 .sql文件对我没有直接的帮助,但我可以重新导入数据 如果我需要的话

我们公司也这样做。重要数据从作为按需作业执行的rdbms导入redis。我们不删除表,我们只是有选择地将数据从数据库导入redis;这没什么错

有没有办法生成rdb或aof文件作为 数据

我不相信有一种方法可以进行选择性归档;不是全部就是没有

在我看来,花更多的时间玩redis吧。我强烈建议利用开箱即用的功能,而不是重新设计和/或过度工程化的解决方案,以满足您的需求


希望有帮助

给你一些建议

我希望能够有选择地将我的一些数据归档到 磁盘或更便宜的存储一旦不再重要。我不 我真的想删除它,因为它在某个时候可能很有价值

如果这样的数据有价值,使用传统的数据库进行存储。尽管redis支持快照到磁盘和AOF日志,但您应该将其视为大部分易失性存储。redis的主要用例是减少延迟,而不是有价值数据的持久性

所以当我完成id 4时,我想归档所有 匹配id_4_*

你做了什么?你需要问自己这个问题;这是否意味着1天后数据会从redis中消失?如果是这样,只需使用TTL和expiration就可以让redis从内存中删除对象。如果您再次需要它,请返回数据库并将该对象拉回到redis中。第一个客户机将承受从数据库拉取的冲击,但随后的请求将被缓存。如果“完成”意味着与特定持续时间无关,那么您必须手动从redis中删除项目以节省内存空间

如果这是mysql,我会有不同的表,并且会非常 轻松地将其转储到.sql文件中,然后删除该表。实际的 .sql文件对我没有直接的帮助,但我可以重新导入数据 如果我需要的话

我们公司也这样做。重要数据从作为按需作业执行的rdbms导入redis。我们不删除表,我们只是有选择地将数据从数据库导入redis;这没什么错

有没有办法生成rdb或aof文件作为 数据

我不相信有什么方法可以做选择性的存档 惯性导航与制导;不是全部就是没有

在我看来,花更多的时间玩redis吧。我强烈建议利用开箱即用的功能,而不是重新设计和/或过度工程化的解决方案,以满足您的需求


希望有帮助

我的建议是从转储文件中提取数据,而不是尝试从实时Redis实例中提取数据进行归档

运行bgsave命令生成转储,然后使用redis rdb工具提取您感兴趣的密钥-您可以轻松地将结果作为json文件获得


您可以将json数据保存在平面文件中,或者尝试将其存储到关系数据库或文档存储中(如果您需要为其编制索引以进行检索)。

我的建议是从转储文件中提取数据,而不是尝试从实时Redis实例中提取数据以进行归档

运行bgsave命令生成转储,然后使用redis rdb工具提取您感兴趣的密钥-您可以轻松地将结果作为json文件获得


您可以将json数据保存在平面文件中,或者尝试将它们存储到关系数据库或文档存储中,如果您需要对它们进行索引以进行检索。

@Hoseong Hwang最近问我做了什么,因此我将发布我最终做了什么

事实上,这很简单。我的密钥空间被不同的用户分割,这让我受益匪浅。我所有的密钥都是用户\的结构。我的存档需求基于用户,一些用户的数据不再需要保存在redis中

我在另一个本地端口6380上启动了另一个redis服务器实例?或者另一台机器,这没什么区别。然后,我写了一个简短的脚本,基本上叫做KEYS user,我理解键的阻塞性质,我的键空间很小,不重要,如果这对你来说是个问题,你可以使用SCAN。然后,对于每个密钥,我将它们分配到新的redis服务器实例。在他们全部完成之后。我进行了保存以确保该实例的rdb文件是最新的。现在我有了rdb,这正是我想要归档的内容。然后我终止了那个临时redis服务器,并回收了内存


现在,把rdb文件放在便宜、安全的地方。如果您再次需要它,那么按照我上面的相反过程将这些密钥返回到您的主redis服务器将非常简单。

@Hoseong Hwang最近问我做了什么,所以我将发布我最终做了什么

事实上,这很简单。我的密钥空间被不同的用户分割,这让我受益匪浅。我所有的密钥都是用户\的结构。我的存档需求基于用户,一些用户的数据不再需要保存在redis中

我在另一个本地端口6380上启动了另一个redis服务器实例?或者另一台机器,这没什么区别。然后,我写了一个简短的脚本,基本上叫做KEYS user,我理解键的阻塞性质,我的键空间很小,不重要,如果这对你来说是个问题,你可以使用SCAN。然后,对于每个密钥,我将它们分配到新的redis服务器实例。在他们全部完成之后。我进行了保存以确保该实例的rdb文件是最新的。现在我有了rdb,这正是我想要归档的内容。然后我终止了那个临时redis服务器,并回收了内存


现在,把rdb文件放在便宜、安全的地方。如果您再次需要它,那么按照我上面的相反过程将这些密钥返回到您的主redis服务器将非常简单。

谢谢您的想法。但redis支持更复杂的数据结构,而不仅仅是一个简单的键/值,两者都表示为字符串。它们有散列和位图。我真的不知道如何在mysql中轻松存储位图。我经常使用这个命令在Redis中创建位图,感谢您的想法。但redis支持更复杂的数据结构,而不仅仅是一个简单的键/值,两者都表示为字符串。它们有散列和位图。我真的不知道如何在mysql中轻松存储位图。我经常使用这个命令在Redis中创建位图。添加注释是一个有点老的问题,但对于选择性地归档密钥,您的解决方案是什么?我将使用位图存储分析数据,我可能希望归档包含旧/非活动内容的访问者统计信息的位图键。我刚刚将我所做的作为答案发布在下面。我希望有帮助!添加注释是一个有点老的问题,但对于选择性地归档密钥,您的解决方案是什么?我将使用位图存储分析数据,我可能希望归档包含旧/非活动内容的访问者统计信息的位图键。我刚刚将我所做的作为答案发布在下面。我希望有帮助!谢谢你的快速回答!这似乎是一个聪明的方法。在我的例子中,我需要实时恢复存档的密钥-m
可能是关系数据库或S3等外部存储。感谢您的快速回答!这似乎是一个聪明的方法。在我的例子中,我需要实时恢复存档的密钥——可能是关系数据库或S3之类的外部存储。