【问题标题】:How to introduce Redis just for caching no CRUD如何引入 Redis 只是为了缓存没有 CRUD
【发布时间】:2019-01-17 10:36:05
【问题描述】:

我计划使用 Redis 在我的应用程序中实现一个缓存层。现在,只要用户启动某些计划加载,应用程序就会从数据库中获取大量数据。该计划在幕后加载,触发少量重量级数据访问并在最终结果中编排所有调用。

现在正在通过 JPA 存储库进行数据访问,以访问我的 Oracle 数据库。当我介绍 redis 层时,它不是在第一次访问时启动缓存,而是应用程序试图从空缓存中获取数据。

我的问题是

  1. 我的设计工作是否可行,因为我想在 JPA 存储库中保持 CRUD 操作。我只想介绍redis做缓存,没有crud操作。

  2. 我有大量数据(可能 2 GB)应该位于缓存层中。 max data redis 能容纳多少?

【问题讨论】:

    标签: redis spring-data-jpa spring-data jedis


    【解决方案1】:

    我的问题是

    1. 我的设计工作是否可行,因为我想在 JPA 存储库中保持 CRUD 操作。我只是想引入redis进行缓存,没有crud操作。

    它会起作用,但是您将遇到主要问题缓存失效。 当您执行 CRUD 操作时,您的 redis 缓存仍然会有旧数据,并且您会遇到不一致的情况。使用 redis 作为缓存的一般方法是为每个键设置 ttl(Time-To-live)。但是,如果您执行任何 CRUD 操作,您可以通过引入删除 redis 中的 key 的触发器来解决这种不一致。

    根据您的工作负载,您可以遇到缓存命中率低的情况。 例如,如果您很少访问缓存中的密钥,那么所有这些密钥都将过期,直到下次访问。坦率地说,缓存在这种情况下不会有效地工作。可以通过预热缓存或使用 redis 不作为缓存而是作为具有复制数据的第二存储来避免这种情况。

    1. 我有大量数据(可能 2 GB)应该位于缓存层中。 max data redis 能容纳多少?

    Redis 非常高效,但受物理资源 (RAM) 和密钥大小以及通过密钥存储的数据的限制,它是 512Mb。

    你必须考虑到 redis 可以在虚拟内存中分割数据,而不是你的源 2Gb 的键表示的数据,因为它可以占用 3GB 的 RAM。

    【讨论】:

      猜你喜欢
      • 2012-04-25
      • 2016-01-14
      • 2015-05-05
      • 2018-10-24
      • 2020-03-12
      • 1970-01-01
      • 2015-06-07
      • 2016-10-02
      • 2023-03-28
      相关资源
      最近更新 更多