我计划使用 Redis 在我的应用程序中实现一个缓存层。现在,只要用户启动某个计划加载,应用程序就会从数据库中获取大量数据。该计划在后台加载,触发少量重量级数据访问并在最终结果中协调所有调用。
现在正在通过 JPA 存储库进行数据访问以访问我的 Oracle 数据库。当我引入 redis 层时,它并没有在第一次访问时启动缓存,而是应用程序试图从空缓存中获取数据。
我的问题是
我的设计是否可行,因为我想保留 JPA 存储库中的 CRUD 操作。只想引入redis做缓存,不做crud操作。
我有大量数据(可能是 2 GB)应该放在缓存层中。 redis 最大可以容纳多少数据?
最佳答案
My questions are
- would my design work, since I want to keep the CRUD operations as is in JPA repositories. I just want to introduce redis for caching, no crud operations.
它会起作用,但是您将遇到缓存失效的主要问题。 当你进行 CRUD 操作时,你的 redis 缓存仍然会有旧数据,你会遇到不一致的情况。使用redis作为缓存的一般方式是为每个key设置ttl(Time-To-live)。但是如果你做任何CRUD操作,你可以通过引入删除redis中key的触发器来解决这种不一致。
根据您的工作负载,您可以遇到缓存命中率较低的情况。 例如,如果您很少访问缓存中的 key ,那么在下次访问之前所有这些 key 都将过期。坦率地说,缓存在这种情况下将无法有效工作。可以通过预热缓存或不将 Redis 用作缓存而是将其用作具有复制数据的第二存储来避免这种情况。
- I have a huge amount of data(probably 2 GB) that should sit in the cache layer. how much can max data redis hold?
Redis 非常高效,但受您的物理资源 (RAM) 和 key 大小以及按 key 存储的数据的大小限制,为 512Mb。
你必须考虑到 redis 可以在虚拟内存中分割数据,而不是你的源 2Gb 数据由键和数据表示,因为它可以占用 3GB RAM。
关于redis - 如何引入 Redis 只是为了缓存 no CRUD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51775874/