分享

redis优势这么多,为什么没有吧memcache干掉?

 知行合一ing 2018-11-22

两者虽然有着子集的关系,但不得不说还有存在很多不同,而且彼此不能互相替代。就像有些面试官会问你【为什么要使用redis】的问题,也是因为有些场合,是根本不需要用到redis,或者说没必要用到哦。

简单说,这两者都是基于内存的数据缓存系统,我认为memcache实现的存储功能是redis的子集,即memcache能实现的存储,redis也能做到,但反之则不行。

比如说,memcache只支持简单的key/value数据结构,但是redis除了String外,还支持list、dict、set、zset、hyperloglog等等数据结构的存储。

其他的类似redis的持久化、redis的读写效率、redis的快照功能,都是比memcache要强大且完善的功能,但为何memcache还是存在,且有很多项目还是使用呢?

其主要的原因,在我看来,是因为场景的需要,比如:

1)项目中使用缓存存储时,只会对String数据结构进行存储,但redis在存储String类型时,会耗费更多的内存,我们需要对数据转换为dict来进行存储的压缩,从而减低内存损耗,在这种情况下,我会优先考虑memcache。

2)redis只支持单线程,其性能受限于CPU性能,即取决于数据结构、数据大小以及服务器硬件性能,其在日常环节中的QPS高峰约为1-2w,而memcache具有多核优势,其单实例的吞吐量极高,性能主要取决于存储的key及value的字节大小以及服务器硬件性能,其在日常环节中的QPS高峰约为4-6w。(但有意思的时,即使如此,memcache的性能比起redis,在实际业务中并没有好多少,但如果看过源码的人会发现,redis的源码及其精致!而memcache的源码则稍显臃肿,可能这一块也会有一定的影响呢?)


总的说:一昧的使用redis来进行数据缓存系统,并不是最佳的选择,如果项目根本就不需要复杂的数据结构呢?如果项目的数据只有一小部分使用了缓存,根本不需要使用持久化和备份呢?如果项目不需要在服务器之间进行数据同步呢?在诸如此类情况下,使用redis反而是增加项目成本,杀鸡焉用宰牛刀~


——没事待在家里不出门的 居家程序员 敲上。(我不想脱发!)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多