【问题标题】:How can I use Redis for LRU caching with Postgresql?如何通过 Postgresql 使用 Redis 进行 LRU 缓存?
【发布时间】:2014-10-21 03:47:52
【问题描述】:

我是 Redis 新手,想知道如何同时使用 Redis 和 PostgreSql — 特别是使用 Redis 仅用于 Postgres 中的 LRU 缓存。

Redis 连接 Postgres 有什么特殊配置吗?

那么如果我想存储数据,我应该将它存储在 Postgres db 中吗?如果有,Redis 是做什么的?

谢谢。

【问题讨论】:

  • 欢迎来到stackoverflow。发帖前请阅读the rules

标签: php postgresql caching redis


【解决方案1】:

我认为您误解了 Redis 或 memcached 等内存存储可以为您做什么。

它们没有连接到 PostgreSQL 或任何其他 RDBMS。您的应用程序的工作是在两个存储中写入数据:永久存储(在您的情况下为 PostgreSQL)和临时存储(Redis)。

Redis 和 memcached 不提供很多连接功能。对于缓存,它们具有相当简单且不显眼的行为。管理缓存的智能部分在应用程序端,定义它是您的工作。

你可以想象几种策略:

  • 每次写入 RDBMS 时,都会写入缓存。每次需要读取数据时,先在缓存中读取。如果没有找到,则从 RDBMS 中读取并将其写回缓存。

  • 每次写入 RDBMS 时,您只是使缓存中的数据无效(删除它)。每次需要读取数据时,先在缓存中读取。如果没有找到,则从 RDBMS 中读取并将其写回缓存。

棘手的部分是明确定义有关数据一致性的策略(在 RDBMS 和缓存之间)。

【讨论】:

  • 感谢回复,我需要在我的数据库中写入文件,将它们存储在 PostreSql 上并将索引作为值保存在 redis 上是个好主意吗?
  • 将文件存储在 RDBMS 数据库中是错误的想法。如果你需要存储文件,为什么不使用文件系统呢?它们就是为此而设计的。例如,看看 Hadoop HDFS、MapR、GlusterFS、Ceph 等......
  • Postgres 支持外部数据包装器。包括redis。我没有使用它,但我对它很感兴趣。 wiki.postgresql.org/wiki/Foreign_data_wrappers
【解决方案2】:

您可以将 Redis 用作 LRU 缓存 - 我假设您仅将 Redis 用于内存中的操作,而将 PostgreSQL 用作您的持久数据存储。以下 URL 更清楚地说明了使用 Redis 作为 LRU 缓存:

http://redis.io/topics/lru-cache

您需要同时写入 Redis 和 PostgreSQL(Redis 不会写入 PostgreSQL)。最好简要测试一下结果并将结果与​​其他选项(例如 Memcached)进行比较,以找出最适合您的用例的方法。

此外,Redis 中的 LRU 缓存实现在 v2.6 和 v2.8 之间是不同的(不确定 2.8 的更改是否向后移植到 v2.6)。

如果您不熟悉,您也可以使用 Redis 将数据持久化到磁盘上,但您应该了解使用 Redis 作为唯一数据存储的内存限制(以及对 Redis 磁盘持久性的影响)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2015-12-25
    • 2020-06-23
    • 2020-04-20
    • 2020-01-27
    • 1970-01-01
    • 2011-06-17
    相关资源
    最近更新 更多