要清楚为什么,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. ETL-kettle 核心执行逻辑

    一.大数据下的ETL工具是否还使用Kettle kettle 作为通用的ETL工具,非常成熟,应用也很广泛,这里主要讲一下 目前我们如何使用kettle的? 在进行大数据处理时,ETL也是大数据处理的 ...

  2. 实战Spring4+ActiveMQ整合实现消息队列(生产者+消费者)

    引言: 最近公司做了一个以信息安全为主的项目,其中有一个业务需求就是,项目定时监控操作用户的行为,对于一些违规操作严重的行为,以发送邮件(ForMail)的形式进行邮件告警,可能是多人,也可能是一个人 ...

  3. 使用OpenAPI构建更智能的API

    像OpenAPI这样的API描述规范是一个关键工具,您应该尽可能地将其好好掌握,记录和执行API的工作由计算机和开发人员完成:OpenAPI 3.0现在允许额外的表现力,可以让机器为我们做更多有用的工 ...

  4. Mysql CPU使用率长期100%的解决思路备忘

    最近一台服务器的CPU使用率长期保持在100%的状态,查看进程发现是Mysql服务导致的.于是搜索各方资料,终于成功解决问题.备忘以及分享一下,希望可以帮助各位新手朋友. (服务器运行环境是Windo ...

  5. [NOIP2016]换教室 题解(奇怪的三种状态)

    2558. [NOIP2016]换教室 [题目描述] 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第i(1< ...

  6. Android studio 3.4.1 使用 bootstrap 中的组件实例

    电脑环境: ubuntu18.04 + Android studio 3.4.1 + bootsrtap4 Android studio中板式设计主要使用的 XML 布局文件,而在bootstrap中 ...

  7. Python趣用—配平化学方程式

    不知不觉已经毕业多年了,不知道大家是否还记得怎么配平化学方程式呢?反正小编我是已经记不太清了,所以今天的文章除了分享如何用python配平化学方程式,顺带着还会复习 一些化学方程式的知识,希望广大化学 ...

  8. java高并发系列 - 第14天:JUC中的LockSupport工具类,必备技能

    这是java高并发系列第14篇文章. 本文主要内容: 讲解3种让线程等待和唤醒的方法,每种方法配合具体的示例 介绍LockSupport主要用法 对比3种方式,了解他们之间的区别 LockSuppor ...

  9. 看MySQL的参数调优及数据库锁实践有这一篇足够了

    史上最强MySQL参数调优及数据库锁实践 1. 应用优化 1.2 减少对MySQL的访问 1.2.1 避免对数据进行重复检索 1.2.2 增加cache层 1.3 负载均衡 1.3.1 利用MySQL ...

  10. 个人永久性免费-Excel催化剂功能第23波-非同一般地批量拆分工作表

    工作薄的合并,许多Excel插件已有提供,Excel催化剂也提供了最佳的解决方案,另外还有工作薄的拆分和工作表的拆分,同样也是各大插件必备功能. 至于工作薄拆分,那是伪需求,Excel催化剂永远只会带 ...