要清楚为什么,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. FTP工具便携版 FileZilla 3.38.0

    FileZilla 客户端是一个快速可靠的.跨平台的FTP,FTPS和SFTP客户端.具有图形用户界面(GUI)和很多有用的特性.由NoCmd提供的 FileZilla Client 中文便携版,具有 ...

  2. 从URL获取图片并保存到本地

    /// <summary> /// HttpWebRequest Property /// </summary> /// <param name="fileNa ...

  3. mybatis基础配置

    我这个写的比较简略,是自己短时间记录的可能只适合自己看,新手或者不懂的建议看看下面大神这篇: https://www.cnblogs.com/homejim/p/9613205.html 1.MyBa ...

  4. ~~小练习:python的简易购物车~~

    进击のpython 1,用户先给自己的账户充钱:比如先充3000元. 2,有如下的一个格式: goods = [{"name": "电脑", "pri ...

  5. Mysql常用语法及入门开篇(一)

    数据:信息,记录.阅读: 数据库:数据的仓库,存储许多的数据(信息).按照数据结构来组件.存储和管理数据的,建立在计算机存储设备上的仓库. DBMS:   database management Sy ...

  6. vijos p1217 乒乓球

    注意数组越界.#include<iostream> #include<cmath> using namespace std; char letter[10001]; void ...

  7. Linux C 网络编程——多线程的聊天室实现(服务器端)

    服务器端的主要功能: 实现多用户群体聊天功能(此程序最多设定为10人,可进行更改),每个人所发送的消息其他用户均可以收到.用户可以随意的加入或退出(推出以字符串"bye"实现),服 ...

  8. TP 5.0 架构 简介

    TP 5.0 架构 简介 thinkphp 5.0 为API开发而设计的的高性能框架,是与以往thinkphp5.0以下版本大不相同的新型框架,病对以颠覆和重构版本,采用全新的架构思想,引入了更多的P ...

  9. 第15个算法-实现 Trie (前缀树)(LeetCode)

    解法代码来源 :https://blog.csdn.net/whdAlive/article/details/81084793 算法来源:力扣(LeetCode)链接:https://leetcode ...

  10. helm安装MINIO文件服务器

    MinIO Quickstart Guide MinIO 是一个基于Apache License v2.0开源协议的对象存储服务.它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例 ...