首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一些redis数据归档到磁盘

将一些redis数据归档到磁盘
EN

Stack Overflow用户
提问于 2013-07-02 09:11:50
回答 3查看 2.2K关注 0票数 2

我最近经常使用redis,我真的很喜欢它。我最熟悉的是持久性(rdb和aof)。我确实有一个顾虑。一旦我的一些数据不再重要,我希望能够有选择地将其“存档”到磁盘(或更便宜的存储设备)。我真的不想删除它,因为它可能在某个时候很有价值。

我所有的密钥都被命名为id_<id>_<someattribute>。因此,当我处理完id4时,我想“存档”所有与id_4_*匹配的键。我可以很容易地在命令行中查看它们,但我不能用它们做任何事情,persay。我有相当多的数据(非常大的位图)与这个数据集相关,坦率地说,一旦id不再相关或重要,我就负担不起空间。

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

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

EN

回答 3

Stack Overflow用户

发布于 2016-07-04 00:51:52

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

实际上,这真的很简单。我受益于我的键空间被不同的用户分割的事实。我所有的键都是user_<USERID>_<OTHERVALUES>结构的。我的归档需求是以用户为基础的,一些用户的数据不再需要保存在redis中。

因此,我在本地的另一个端口(6380?)上启动了另一个redis-server实例。或者另一台机器,都没有区别。然后,我写了一个简短的脚本,基本上就是KEYS user_<USERID>_* (我理解KEYS的阻塞特性,我的键空间很小,没关系,如果对你有问题,你可以使用SCAN )。然后,对于每个键,我将它们MIGRATED到新的redis-server实例。在他们都做完之后。我执行了一个SAVE,以确保该实例的rdb文件是最新的。现在我有了rdb,这正是我想要归档的内容。然后,我终止了该临时redis-server,并回收了内存。

现在,将这个rdb文件放在某个地方,这样既便宜又安全。如果您再次需要它,执行上面的相反过程将这些密钥重新放回到您的主redis-server中将是相当简单的。

票数 3
EN

Stack Overflow用户

发布于 2013-07-02 20:06:14

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

运行bgsave命令生成一个转储文件,然后使用redis-rdb-tools提取您感兴趣的密钥-您可以很容易地获得json文件形式的结果。

请参阅https://github.com/sripathikrishnan/redis-rdb-tools

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

票数 1
EN

Stack Overflow用户

发布于 2013-07-02 11:31:16

给你一些建议。

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

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

因此,当我处理完id 4时,我想“存档”所有与id_4_*匹配的键。

什么构成了done?你需要问自己这个问题;这是不是意味着一天后数据就会从redis中消失?如果是这样,只需使用TTL和expiration让redis从内存中删除该对象。如果您再次需要它,请回退到数据库,并将对象拉回到redis中。第一个客户端将受到从数据库中拉出的影响,但随后的请求将被缓存。如果done指的是与特定持续时间无关的内容,那么您必须手动从redis中删除项以节省内存空间。

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

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

有什么方法可以创建一个rdb或aof文件作为数据的子集吗?

我不相信有一种方法可以进行选择性归档;要么全部归档,要么一个也不归档。

多花点时间和redis一起玩吧。我强烈建议利用开箱即用的功能,而不是重新发明和/或过度设计解决方案来满足您的需求。

希望这能有所帮助!

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

https://stackoverflow.com/questions/17415942

复制
相关文章

相似问题

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