要清楚为什么,redis具有高可用特性,并且可固化,但特性有时候不能成为选择他的理由,一些业务场景中并不需要这样的特性。
 
什么时候倾向于选择redis?
1.复杂数据结构
value是哈希,列表,集合,有序集合等复杂数据结构的时候,选择redis更合适,因为mc无法满足这样的需求。
典型场景:用户消息,评论,订单列表等
 
2.持久化
mc不支持持久化
但redis持久化的使用需要注意
 
千万不要将redis作为数据库来使用:
1)redis的定期快照不能保证数据不丢失
2)redis的AOF会降低效率,并且不能支持太大的数据量
 
缓存场景,开启持久化有什么利弊?
优点:down机重启,内存中能够快速恢复热点数据,分担数据库压力,没有cache预热过程
缺点:redis挂了以后,数据库中数据有修改,可能导致redis中数据不一致
只读场景,或者一些允许不一致的业务场景,可以尝试开启redis持久化功能
 
3.天然高可用
redis天然支持集群功能,可实现主从复制,读写分离
Redis官方提供了sentinel集群管理工具,能够实现主从服务监控,故障自动转移
 
Mc想要实现高可用,需要进行二次开发
 
需要注意的是,大部分业务场景,缓存真的需要高可用吗?
1)存场景,很多时候,是允许cache miss
2)缓存挂了,很多时候可以通过DB读取数据
 
4.存储的value很大
mc的value存储,最大为1m,如果存储的value很大,只能使用redis
 
什么时候倾向于选择memcache?
纯kv,数据量非常大,并发量非常大的业务,使用mc或许更合适
 
这个要从mc与redis的底层实现机制说起
 
内存分配
mc使用预分配内存池的方式管理,能够省去内存分配的时间
redis是临时申请空间,可能导致碎片
这一点上,mc会快一些
 
虚拟内存使用
mc会把所以数据存到物理内存中
redis有自己的vm机制,当数据超量时,会引发swap,把冷数据刷到磁盘上
数据量大时,mc会快一些
 
网络模型
mc使用的是非阻塞IO复用模型,redis也是非阻塞IO复用模型
redis还提供一些非kv存储之外的排序,聚合功能,在执行这些功能的时候,会阻塞整个IO调度
在这一点上,由于redis提供的功能较多,mc会快一些
 
线程模式
mc使用多线程,主线程监听,worker子线程接受请求,执行读写,可能存在锁冲突。
redis使用单线程模式,不存在锁冲突,但难以利用多核的特效提升整体吞吐量。
在这一点上,mc要快一些
 
 

什么时候使用redis?什么时候使用memcache?的更多相关文章

  1. redis 缓存技术与memcache的区别

    1 什么是redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset( ...

  2. redis 缓存技术与memcache的最大差别

    1 什么是redis  redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对很多其它,包含string(字符串).list(链表).set(集合)和zs ...

  3. redis、mongodb、memcache安装好后设置开机自启动

    vim /etc/rc.d/rc.local /usr/local/mongodb/bin/mongod --smallfiles /usr/local/bin/redis-server/usr/lo ...

  4. Redis、Mongodb、memcache区别在哪里?

    最近在看一本书<php mvc开发实战>看到Redis实战部分,详细介绍了几种缓存的区别和对比,帮助解决这方面的疑惑 Redis适合哪些业务场景?

  5. redis与memcache区别总结

    2015年9月2日 14:04:19 总会被问到两者的区别, 在这里总结下: redis 有内置的多种数据结构, list(可用于实现小型队列), hash, set, zset...; memcac ...

  6. memcache/redis 缓存学习笔记

    0.redis和memcache的区别 a.redis可以存储除了string之外的对象,如list,hash等 b.服务器宕机以后,redis会把内存的数据持久化到磁盘上,而memcache则不会 ...

  7. 文成小盆友python-num11-(2) python操作Memcache Redis

    本部分主要内容: python操作memcache python操作redis 一.python 操作 memcache memcache是一套分布式的高速缓存系统,由LiveJournal的Brad ...

  8. redis & memcache 性能比较

    redis和memcache非常像的,都是key,value的方式,将数据存放内存中.最近在学习redis,在网上看了一些这方面的资料,有三种观点: redis读写内存比memcache快 memca ...

  9. Redis,Memcache比较

    简单比较: Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储.memcache只支持简单的K/V类型数据, 不过memcache可以缓存其他东西如图片, ...

  10. 基于(Redis | Memcache)实现分布式互斥锁

    设计一个缓存系统,不得不要考虑的问题就是:缓存穿透.缓存击穿与失效时的雪崩效应. 缓存击穿 缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则 ...

随机推荐

  1. OSPF 单区域实验

    实验拓扑 实验需求 按照图示配置 IP 地址 按照图示分区域配置 OSPF ,实现全网互通 为了路由结构稳定,要求路由器使用环回口作为 Router-id 实验步骤 每台路由器都要将本地的所有直连网段 ...

  2. Mac上Ultra Edit的激活

    2016-11-20 增加16.10.0.22破解 去官网下载原载,先运行一次,再在终端里执行下面代码就可以破解完成!printf '\x31\xC0\xFF\xC0\xC3\x90' | dd se ...

  3. Bzoj 3654 图样图森波 题解

    3654: 图样图森破 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 123  Solved: 66[Submit][Status][Discuss] ...

  4. 管Q某犇借的对拍

    #include<iostream> #include<windows.h> using namespace std; int main() { while(1) { syst ...

  5. Appium+python自动化(二十)- 猴哥失散多年的混血弟弟还是妹妹- Monkey(猴子)日志(超详解)

    简介 日志是非常重要的,用于记录系统.软件操作事件的记录文件或文件集合,可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统.软件的活动等重要作用,在开发或者测试软系统过程中出现了问 ...

  6. python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal

    6.函数的动态参数 *args,**kwargs:能接受动态的位置参数和动态的关键字参数 *args -- tuple *kwargs -- dict 动态参数优先级:位置参数 > 动态位置参数 ...

  7. JAVA面试题 StringBuffer和StringBuilder的区别,从源码角度分析?

    面试官Q1:请问StringBuffer和StringBuilder有什么区别? 这是一个老生常谈的话题,笔者前几年每次面试都会被问到,作为基础面试题,被问到的概率百分之八九十.下面我们从面试需要答到 ...

  8. Hive之函数与自定义函数

    系统自带的函数 1)查看系统自带的函数 hive> show functions; 2)显示自带的函数的用法 hive> desc function upper; 3)详细显示自带的函数的 ...

  9. c语言进阶4-有返回值函数

    一.         从函数返回 从函数返回就是返回语句的第一个主要用途.在程序中,有两种方法可以终止函数的执行,并返回到调用函数的位置.第一种方法是在函数体中,从第一句一直执行到最后一句,当所有语句 ...

  10. Masstransit的应用服务总线

    Masstransit 是一个非常优秀的基于消息进行通信的分布式应用程序框架,详情参考官网. 在介绍AA.ServiceBus之前,先介绍下几个概念. 分布式 分布式系统如何定义?这里引用一下Dist ...