【问题标题】:Can Redis write out to a database like PostgreSQL?Redis 可以写出到像 PostgreSQL 这样的数据库吗?
【发布时间】:2013-06-06 15:34:26
【问题描述】:

我使用 PostgreSQL 的时间最长。我所有的数据都保存在 Postgres 中。我最近研究了 redis,它有很多强大的功能,否则在 Django (python) 中需要几行代码才能完成。只要运行它的机器不停机,Redis 数据就会一直存在,您可以将其配置为每 1000 个键或每 5 分钟左右将存储到磁盘的数据写入磁盘,具体取决于您的选择。

Redis 会成为一个很好的缓存,它肯定会取代我在 python 中编写的许多功能(投票用户的帖子,查看他们的朋友列表等......)。但我担心的是,所有这些数据都需要翻译成 postgres。我不相信将这些数据存储在 redis 中。我将 redis 视为一种用于快速检索信息的临时存储解决方案。它非常快,这远远超过对 postgres 进行重复查询。

我假设我可以在技术上将 redis 数据写入数据库的唯一方法是将我从 redis 的“get”查询中获得的任何内容通过 Django 保存到 postgres 数据库。

这是我能想到的唯一解决方案。你知道这个问题的任何其他解决方案吗?

【问题讨论】:

  • 我在这里发现了一个类似的问题:stackoverflow.com/questions/16234221/…。我相信操作员会问类似的问题,但答案不是我想要的。
  • 我们有一个实现 API 的 Web 服务器,我们使用 Redis 作为缓存。当有新数据的POST进来时,我们将数据存储在Redis中,并将这些新数据通知后台进程,该进程将它们推送到(MySql)数据库(我们使用Redis列表将数据推送到过程)。读取数据,我们首先检查Redis,如果没有数据,我们从DB中获取数据,放入Redis,然后返回给客户端。
  • @akonsu 已经有好几年了,但是你从那个策略中得到了什么样的表现?

标签: python django postgresql redis redis-cache


【解决方案1】:

Redis 越来越多地用作缓存层,很像更复杂的 memcached,在这个角色中非常有用。您通常将 Redis 用作 write-through 缓存来存储您想要持久的数据,并使用 write-back 来存储您可能想要累积然后批量写入的数据(您可以承担丢失最近的数据)。

PostgreSQL 的 LISTENNOTIFY 系统对于选择性缓存失效非常有用,让您在 PostgreSQL 中更新记录时从 Redis 中清除记录。

将它与PostgreSQL结合,你会发现the Redis foreign data wrapper provider that Andrew Dunstain and Dave Page are working on非常有趣。

我不知道有任何工具可以使 Redis 成为 PostgreSQL 的透明回写缓存。他们的数据模型可能差异太大,无法正常工作。通常,您将更改写入 PostgreSQL 并使用缓存管理器工作程序侦听/通知使它们的 Redis 缓存条目无效,或者您在 Redis 中对更改进行排队,然后让您的应用将它们读出并以块的形式写入 Pg。

【讨论】:

  • 我正在开发一个具有 API 方法 m() 的应用程序。 m() 应该从表 T 中读取字符串,创建一个随机字符串并在最后将其保存到 T。 1000 个线程/用户可能正在调用 m()。所以会有多个选择和多个插入。我不能只缓存字符串,因为无论如何它们都会如此频繁地失效。我还计划编写一个回写式 redis 解决方案,以便读取和写入都发生在缓存中(每天加载一次),并且 MySQL 每小时或 1000 条记录更新一次。以上仍然是唯一的方法吗?
  • @Mustafa 请发布一个新问题,并在您的新问题中包含指向该问题的链接。
【解决方案2】:

如果配置成这样,Redis 是持久的,无论是通过快照还是一种称为 AOF 的 WAL。许多人将其用作主数据存储。 https://redis.io/topics/persistence

如果指的是 Redis 兼容(resp 协议)数据存储的更大世界,那么许多数据存储不仅限于内存存储: https://keydb.dev/ http://ssdb.io/ 还有更多...


【讨论】:

  • 将 Redis 配置为持久化不会显着减慢速度吗?不妨使用像 Postgres 这样的 RDBMS
  • 尊敬的 user1034912,您毫无根据的猜测的答案是,不,它不会显着减慢 Redis。您会注意到我还链接了 2 个 redis 克隆,其中一个是设计为持久主存储的。键值存储是键值故事,而不是 RDBMS,反之亦然。不要盲目地假设所有存储需求都映射到 RDBMS,也不要认为 ACID 是世界上唯一的首字母缩写词或服务保证。如果您想要 Postgres,请使用 Postgres,如果您的数据实际上映射到键值散列,请忘记“最好”之类的模糊思维。
  • 另外,请记住规范化不必停留在表格粒度上。像 Ohm for Redis 这样的库证明,即使是复杂的嵌套数据结构也可以用键值存储来表示。我不否认 RDBMS 的广泛使用,也不建议人们转而将他们的数据映射到键值缩减。我想指出,下意识的 RDBMS 狂热不是逻辑上站得住脚的立场,而是情绪上的极端立场。
  • 此外,即使作为缓存或临时存储,有时 WAL 和能够从列表中重新创建数据也是至关重要的。示例:您希望在 HA 辅助服务器上快速扩展的崩溃服务器和用户会话
猜你喜欢
  • 1970-01-01
  • 2018-06-29
  • 2019-01-21
  • 1970-01-01
  • 2019-10-23
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多