俩个问题是一个问题
①首先JVM数据进程内共享,进程间不共享。
②jvm保存数据量过大,很容易导致OOM。
③Java适合保存小数据,毕竟通过中间件中间会多一跳网络请求。
④没有内存缓存到磁盘机制,实现起来麻烦
拓展举例:【要用redis而不是直接在java里hashMap】
这个问题类似【为什么token不存在session而不是redis】,当服务器水平拓展的时候,单个服务器只保存了部分session,为了解决这一问题,tomcat需要冗余其他tomcat的session。
总结:体量不大,项目处于开发阶段完全可以使用Java缓存,数据量小的时候单个Java性能肯定更好(少了进程间通信),引入redis和mq都无疑增加了系统复杂度。
但随着系统请求量加大数据增多,解耦那是必须的,试想下,单机Java内存中缓存了100G的消息,导致整个系统OOM那可就得不偿失,如果100G是在redis或者mq中,这俩个挂掉了也只是影响整个服务的部分。