Redis还是Ehcache?

Sac*_*rma 18 spring caching ehcache redis spring-boot

哪个更适合以下环境:

  1. 坚持不是强迫.
  2. 多个服务器(必须要求Ehcache一些缓存同步).
  3. 不经常写入和频繁读取.
  4. 相对较小的数据库(内存需求非常少).

我现在会倒出脑子里的东西.我可能错了.

我知道Redis需要一个单独的服务器(?),Ehcache提供本地缓存,因此它必须更快,但会跨服务器复制缓存(?).使用Ehcache可以在更新一个缓存后更新所有缓存.

我的问题是哪个更符合我提到的环境?
谁的表现会更好,或者什么样的表现可能比另一个表现更好?

提前致谢.

sma*_*ufo 36

您可以将Redis视为共享数据结构,而Ehcache是存储序列化数据对象的内存块.这是主要的区别.

Redis作为共享数据结构意味着您可以将一些预定义的数据结构(如String,List,Set )放在一种语言中,并以另一种语言检索它.如果您的项目是多语言的,这很有用,例如:Java是后端,PHP是前端.您可以将Redis用于共享缓存.但它只能存储预定义的数据结构,不能插入任何你想要的Java对象.

如果您的项目只是Java,即不是多语言,Ehcache是​​一个方便的解决方案.

  • 是的,但我总是可以将 java 对象序列化为 JSON 字符串并存储在 redis 中。我相信这就是大多数人使用redis作为缓存的方式。 (4认同)

Nik*_*rov 6

您将遇到 EhCache 扩展的问题,并需要资源在故障转移等期间对其进行管理。 Redis优于 EhCache:

  1. 它使用经过时间验证的八卦协议进行节点发现和同步。
  2. AWS ElastiCacheAzure Redis 缓存等完全托管服务的可用性。此类服务提供 Redis 的完全自动化、支持和管理,因此开发人员可以专注于他们的应用程序,而不是维护他们的数据库。
  3. 正确处理大内存量(我们都知道 Redis 可以在单机上管理数百 GB 的 RAM)。它没有像 Java 那样的垃圾收集问题。

最终存在对 Java 开发人员友好的 Redis 客户端 - Redisson
Redisson在 Redis之上提供了许多对 Java 友好的对象,例如:

  • 并发映射
  • 列表
  • 队列
  • 德克
  • 阻塞队列
  • 阻塞队列
  • 读写锁
  • 信号
  • 原子长
  • 倒计时锁存器
  • 发布/订阅
  • 执行者服务
  • 还有很多...

Redisson 支持Map 结构的本地缓存,它可以为您提供45 倍的读取操作性能提升。

这里是描述Personal Capital公司从EhCache过渡到Redis的经验的文章

  • 我最终使用了 redis,后来改用了 hazelcast(虽然我发现 redisson 类似于 hazelcast - 支持 java 友好对象等)。我会考虑在未来的项目中使用 redission :) (4认同)