redis - 如何引入 Redis 只是为了缓存 no CRUD

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

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

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

我的问题是

  1. 我的设计是否可行,因为我想保留 JPA 存储库中的 CRUD 操作。只想引入redis做缓存,不做crud操作。

  2. 我有大量数据(可能是 2 GB)应该放在缓存层中。 redis 最大可以容纳多少数据?

最佳答案

My questions are

  1. 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 用作缓存而是将其用作具有复制数据的第二存储来避免这种情况。

  1. 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/

相关文章:

caching - 在这些缓存场景中,代码在哪里执行?

java - 使用 spring data jpa 更新单个字段

mysql - 在mysql中使用UUID作为主键

java - StringRedisTemplate 与 StringRedisConnection

spring-mvc - Spring Data Elasticsearch @Document indexName 在运行时定义

java - 在 Spring boot 中添加超过 65535 个条目 jar

mysql - 在 Spring 应用程序的事务中使用 Async

node.js - Cassandra 行缓存与 Redis 缓存

python - Flask 应用程序的 Celery 配置

rest - Spring-boot 使用可分页测试休息 Controller