要清楚为什么,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. kuangbin专题专题四 Heavy Transportation POJ - 1797

    题目链接:https://vjudge.net/problem/POJ-1797 思路:请参考我列出的另一个题目,和这个题目要求的值相反,另一个清楚后,这个写的解释就明白了. 另一个类似题目的博客:h ...

  2. [leetcode] 456. 132 Pattern (Medium)

    对一个三个元素以上的数组,如果存在1-3-2模式的组合,则返回true. 1-3-2模式就是值的排序是i<k<j但是下标排序是i<j<k. 解法一: 硬解,利用一个变量存储是否 ...

  3. 小白开学Asp.Net Core 《一》

    在开篇中介绍了项目的搭建以及项目中所用到的第三方工具 本篇介绍SqlSugar和Dapper在本项目的实现 一.SqlSugar SqlSuagr的介绍就直接浏览官方网站,官网地址将在底部给出. 在本 ...

  4. MySQL图形工具SQLyog破解版

    最近一直在用MySQL,所以分享一下现在这套开发工具. SQLyog:链接:http://pan.baidu.com/s/1bLq2OA 密码:h5bj 注册信息用户名:yunjian注册码:81f4 ...

  5. C#编程之接口

    1.定义 接口是把公共方法和属性组合起来,以封装特定功能的一个集合.(一旦定义了接口,就可以在类中实现它.这样类就可以支持接口所指定的所有属性和成员) 注意1:接口不能单独存在.不能像实例化一个类那样 ...

  6. 小白学python-day04-运算符、while循环相关

    今天是day04.以下是学习总结. 但行努力,莫问前程. ----------------------------------------------------------------------- ...

  7. Python基础之用户交互、流程控制、循环语句

    python的简洁性真的令人叹为观止,没有JAVA那种输入还要导个包,不学不知道,一学吓一跳啊! 我在学这些基础的时候,会把python和java.c做对比,这样更好的理解记忆! 用户交互(输入) i ...

  8. EF Core懒人小技巧之拒绝DbSet

    前言 最近在项目中使用EF Core的频率越来越高,当项目比较大的时候,疯狂往DbContext中加各种DbSet,你会不会特难受?如果你是一键生成的大佬,那么请忽略本文.本文旨在不写 DbSet,那 ...

  9. java一个类 继承HttpServlet 和实现Servlet区别

    java一个类 继承HttpServlet 和实现Servlet区别 servlet 是一个接口,如果实现这个接口,那么就必须实现接口里面定义的所有方法 而HttpServlet实现了servlet接 ...

  10. linux初学者-进程篇

    linux初学者-进程篇 不管是windows还是linux,都有进程,那么什么是进程呢?进程就是cpu未完成的工作.下面会介绍一些关于系统中进程的查看以及管理的方法. 1.命令 1.1.命令使用 查 ...