【问题标题】:How to introduce Redis just for caching no CRUD如何引入 Redis 只是为了缓存没有 CRUD
【发布时间】:2019-01-17 10:36:05
【问题描述】:
我计划使用 Redis 在我的应用程序中实现一个缓存层。现在,只要用户启动某些计划加载,应用程序就会从数据库中获取大量数据。该计划在幕后加载,触发少量重量级数据访问并在最终结果中编排所有调用。
现在正在通过 JPA 存储库进行数据访问,以访问我的 Oracle 数据库。当我介绍 redis 层时,它不是在第一次访问时启动缓存,而是应用程序试图从空缓存中获取数据。
我的问题是
我的设计工作是否可行,因为我想在 JPA 存储库中保持 CRUD 操作。我只想介绍redis做缓存,没有crud操作。
我有大量数据(可能 2 GB)应该位于缓存层中。 max data redis 能容纳多少?
【问题讨论】:
标签:
redis
spring-data-jpa
spring-data
jedis
【解决方案1】:
我的问题是
- 我的设计工作是否可行,因为我想在 JPA 存储库中保持 CRUD 操作。我只是想引入redis进行缓存,没有crud操作。
它会起作用,但是您将遇到主要问题缓存失效。
当您执行 CRUD 操作时,您的 redis 缓存仍然会有旧数据,并且您会遇到不一致的情况。使用 redis 作为缓存的一般方法是为每个键设置 ttl(Time-To-live)。但是,如果您执行任何 CRUD 操作,您可以通过引入删除 redis 中的 key 的触发器来解决这种不一致。
根据您的工作负载,您可以遇到缓存命中率低的情况。
例如,如果您很少访问缓存中的密钥,那么所有这些密钥都将过期,直到下次访问。坦率地说,缓存在这种情况下不会有效地工作。可以通过预热缓存或使用 redis 不作为缓存而是作为具有复制数据的第二存储来避免这种情况。
- 我有大量数据(可能 2 GB)应该位于缓存层中。 max data redis 能容纳多少?
Redis 非常高效,但受物理资源 (RAM) 和密钥大小以及通过密钥存储的数据的限制,它是 512Mb。
你必须考虑到 redis 可以在虚拟内存中分割数据,而不是你的源 2Gb 的键表示的数据,因为它可以占用 3GB 的 RAM。