IT修真院·小课堂丨互联网职业小课堂在线学习平台

课堂课题:

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)结束语:

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

Memcache和Redis的区别是什么?     中品

辅导师兄 [真传弟子]JAVA-徐铭培


大家好,我是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

讲得不错继续加油

回复

请您登录 后进行评论