课堂课题:
Memcache和Redis的区别是什么?
关联任务:
任务五
直播时间:
2018-12-17 15:30:00
课堂内容:
视频链接:
PPT链接:
提交按钮:
小课堂内容格式
标题:
【修真院xx(职业)小课堂】课题名称
开场语:
大家好,我是IT修真院XX分院第X期的学员XX,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网XX(职业)任务X,深度思考中的知识点——XXX
(1)背景介绍:
背景介绍的时候,尽可能的要宽广,讲清楚来龙去脉,讲清楚为什么会需要这个技术。
(2)知识剖析:
讲知识点的时候,尽可能的成体系,学会成体系的去给别人介绍知识。现在很多做的都是零散的,没有分类。
(3)常见问题:
最少列出1个常见问题。
(4)解决方案:
写清楚常见问题的解决方案。
(5)编码实战:
尽可能的去寻找在真实项目中在用的。如果你能找到某个网站在用你说的知识点,这是最好的。学以致用,否则当成练习题就没有意义了。多准备一些demo,讲解过程中将知识点和demo结合,便于大家理解所讲解的知识点。
(6)拓展思考:
知识点之外的拓展思考,由分享人进行讲解,这些东西就是所谓的深度,也是一个人技术水准高低比较的表现。
(7)参考文献:
引入参加文献的时候,在引用的句子后面加上序号【1】。参考文献中列出详细来源。不要去抄别人的东西,这是一个基本的态度。
(8)更多讨论:
Q1:提问人:问题?
A1:回答人(可以是分享人,也可以是其他学员):回答
Q2:提问人:问题?
A2:回答人(可以是分享人,也可以是其他学员):回答
Q3:提问人:问题?
A3:回答人(可以是分享人,也可以是其他学员):回答
(9)鸣谢:
感谢XX、XX师兄,此教程是在他们之前技术分享的基础上完善而成。
(10)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
大家好,我是IT修真院深圳分院第13期的学员,一枚正直纯洁善良的java程序员
今天给大家分享一下,修真院官网Java任务6,深度思考中的知识点————Memcache和Redis的区别是什么?
1.背景介绍
我们知道常见的数据库,比如oracle、mysql等,数据都是存放在磁盘中。
虽然在数据库层也做了对应的缓存,但这种数据库层次的缓存一般针对的是查询内容,而且粒度也太小,一般只有表中数据没有变更的时候,数据库对应的cache才发挥了作用。但这并不能减少业务系统对数据库产生的增、删、查、改的庞大IO压力。
所以数据库缓存技术在此诞生,实现热点数据的高速缓存,提高应用的响应速度,极大缓解后端数据库的压力。市面上主流的NoSQL数据库缓存主要有两个:Redis与Memcached,这里介绍一下两者的区别。
2.知识剖析
Memcached
Memcache是一个高性能,分布式内存对象缓存系统,通过在内存中缓存一个巨大的hash表,他能够存储包括图像,文件,索引,sql语句结果等数据,可以理解为一个为提升读取效率的数据容器,先将数据从数据库提取到内存中,然后在内存中读取,从而提升读取效率。
Memcache的特性
(1)使用物理内存作为缓存区,可独立运行在服务器上,每个进程最大内存为2G。如果想缓存更多的数据,可以开辟更多的Memcache进程(不同端口)或者使用分布式Memcache进行缓存。
(2)使用K-V形式的方式来存储数据,这是一种单索引的结构化数据组织形式,查询的效率高
(3)协议简单:基于文本行的协议,直接通过telnet在memcached服务器上可进行存取数据操作,简单,方便多种缓存参考此协议
(4)基于libevent高性能通信:Libevent是一套利用C开发的程序库,它将BSD系统的kqueue,Linux系统的epoll等事件处理功能封装成一个接口,与传统的select相比,提高了性能。
(5)内置的内存管理方式:所有数据都保存在内存中,存取数据比硬盘快,当内存满后,通过LRU算法自动删除不使用的缓存,但没有考虑数据的容灾问题,重启服务,所有数据会丢失。
(6)分布式:各个memcached服务器之间互不通信,各自独立存取数据,不共享任何信息。服务器并不具有分布式功能,分布式部署取决于memcache客户端。
(7)缓存策略:Memcached的缓存策略是LRU(最近最少使用)到期失效策略。
Redis
(1)Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
(2)它支持多种类型的数据结构
(3)Redis内置了复制,LUA脚本,LRU驱动事件,事务和不同级别的 磁盘持久化, 并通过 Redis哨兵(Sentinel)和自动分区(Cluster)提供高可用性。
Redis的特性
(1)Redis支持永久性操作,可以从内存永久化保存在磁盘,下次重启可以从磁盘中恢复数据
(2)除去K-V形式之外,还支持list,set,zset,hash等多种数据结构
(3)支持主从架构数据备份
3.常见问题 Memcache和Redis的区别是什么?
4.解决方案
Memcache和Redis的区别
(1)数据结构:Memcache仅能支持简单的K-V形式,Redis支持的数据更多
(2)多线程:Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis
(3)持久化:Redis支持持久化,Memcache不支持持久化
(4)分布式:Redis做主从结构,而Memcache服务器需要通过hash一致化来支撑主从结构
(5)存储方式:memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小. redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(有快照和AOF日志两种持久化方式)
(6)内存使用率:对于key-value这样简单的数据储存,memcache的内存使用率更高。如果采用hash结构,redis的内存使用率会更高
(7)使用底层模型不同:新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
(8)过期策略:memcache过期后,不删除缓存,会导致下次取数据数据的问题,Redis有专门线程,清除缓存数据;
总结
两者进行对比,是因为都是内存数据管理系统,而实际上两者之间区别还是很大。
Redis更多的象一个键值对数据, 包括数据的持久化,主从架构,数据备份等策略都是为了保证数据安全以及高可用,
而Memcache更多的是一个数据缓存系统是为了提升数据的读取效率,所以两者的应用也有所不同,
Memcache适合于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和session等工作场合,
Redis除去做Nosql数据库使用外,还能用做消息队列,数据堆栈和数据缓存等。
简而言之:有持久化需求或者对数据结构和处理有高级要求的应用,选择redis,其他简单的key/value存储,选择memcache。
5.扩展思考
6.参考文献
CSDN、百度百科、师兄们提供的资料
一些相关参考
https://blog.csdn.net/sunmenggmail/article/details/36176029
https://blog.csdn.net/qq_34126805/article/details/81748107
https://blog.csdn.net/session_Time/article/details/52618215
7.更多讨论
(1)Redis在Windows系统能用吗?
redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,后来微软有一个小组为其写了补丁,所以现在Windows也能用,但是没有放到主干上。
(2)memcached可以做集群吗?
可以,memcached和Redis都可以做集群,但是一般用Redis做集群比较好。
(3)Redis常用的的过期策略有什么?
3种过期策略
定时删除
含义:在设置key的过期时间的同时,为该key创建一个定时器,让定时器在key的过期时间来临时,对key进行删除
优点:保证内存被尽快释放
缺点:
若过期key很多,删除这些key会占用很多的CPU时间,在CPU时间紧张的情况下,CPU不能把所有的时间用来做要紧的事儿,还需要去花时间删除这些key
定时器的创建耗时,若为每一个设置过期时间的key创建一个定时器(将会有大量的定时器产生),性能影响严重
极少用
惰性删除
含义:key过期的时候不删除,每次从数据库获取key的时候去检查是否过期,若过期,则删除,返回null。
优点:删除操作只发生在从数据库取出key的时候发生,而且只删除当前key,所以对CPU时间的占用是比较少的,而且此时的删除是已经到了非做不可的地步(如果此时还不删除的话,我们就会获取到了已经过期的key了)
缺点:若大量的key在超出超时时间后,很久一段时间内,都没有被获取过,那么可能发生内存泄露(无用的垃圾占用了大量的内存)
定期删除
含义:每隔一段时间执行一次删除(在redis.conf配置文件设置hz,1s刷新的频率)过期key操作
优点:
通过限制删除操作的时长和频率,来减少删除操作对CPU时间的占用–处理"定时删除"的缺点
定期删除过期key–处理"惰性删除"的缺点
缺点
在内存友好方面,不如"定时删除"
在CPU时间友好方面,不如"惰性删除"
难点
合理设置删除操作的执行时长(每次删除执行多长时间)和执行频率(每隔多长时间做一次删除)(这个要根据服务器运行情况来定了)
8.鸣谢:
感谢修真院的师兄和CSDN博客上相关的作者,此教程是在他们之前技术分享的基础上完善而成。
9.结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
[无名弟子]李潇 发表于 2018-12-23 10:32:15 #1
讲得不错继续加油
回复