有关redis等内存数据库 性能 和 必要性 的疑惑

1. 性能
我们确实知道redis是个内存数据库,用于缓存会提高性能。但如果redsi和应用程序不在同一台服务器,那么网络IO不也需要时间吗?现实中确实有很多redis和应用程序不在一台服务器的现象,怎么解释呢?
2. 必要性
如果不是需要跨语言操作数据,仅仅是在内存中缓存的话。那么利用编程语言自身提供的数据类型不好吗?不也是在内存中吗?比如java,数据类型比redis的5种类型还丰富的多呢!只要一直保持引用,垃圾回收器就不会回收。所谓key-value内存数据库,用编程语言中的 变量名-变量值 做不一样吗?而且对于熟悉java的人来说,根本就不再需要学习redis,不挺好的吗?

阅读 6.3k
3 个回答

1、多台服务器可以是内网啊。
2、redis可以设置很大的内存的,也就说量上有可能java是达不到的
3、还有就是redis可保持数据的持续性,比如你java如果重启了或者你的java需要重新发布,那内存中的数据岂不是不存在了,redis不存在这个问题。
4、而且redis更可靠,redis的数据可以沉淀到硬盘,可以恢复的,那你的java内存中的东西怎么恢复。
5、很简单的一个问题就是,比如session你存在内存中,也就是说如果你重新发布的话,所有的用户都要重新登录了,redis不会有这个问题的。
6、再比如,如果你有N多G的热数据需要存放在内存中,以方便高效率的读取,难道你告诉我用java的内存吗。

1.应用场景不同导致redis可以有多种部署方式,本机还是跨机缓存是根据要解决的问题来看。比如业务程序是高cpu消耗的,部署的机器只需要一般的内存配置即可。缓存的数据又比较多,需要单独部署,甚至需要多台组成集群。又比如系统比较大以后,需要各种模块化,微服务化,每个服务都可以独立演进,计算和数据分离也是比较常见的方式。另外不用担心网络io带来的开销,在没有达到网络带宽瓶颈之前,网络io都不是问题,延迟在ms级别,很划算的。

2.redis作为缓存和kv数据库还有持久化功能,断电重启后还可以恢复。当然如果你只是需要缓存机制你可以选择自己编程维护一套缓存,看你自己的需要,代价就是你要自己实现缓存的机制,自动失效,缓存写满等等功能。

MongoDB也有纯内存存储引擎,也可以了解和试用。

Love MongoDB! Have Fun!

我很好奇,Redis的问题提交到了MongoDB的版面上,我附带告知MongoDB也有类似的纯内存存储引擎,会有朋友表示不乐意和减1。

------------------------华丽的分割符--------------------------------

MongoDB中文社区线下活动缤纷,请猛戳下方:

2017华山论剑|MongoDB中文社区

三月份杭州站在即!!! 感兴趣的朋友火速报名!!!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题