课堂课题:
Memcache和Redis的区别是什么?
关联任务:
任务五
直播时间:
2019-08-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修真院西安分院第6期的学员王鹏,一枚正直纯洁善良的XX程序员,今天给大家分享一下,修真院官网Java任务六,深度思考中的知识点——Memcache和Redis的区别是什么?
(1)背景介绍:
我们平时常见的数据库,比如oracle、mysql等,数据都是存放在磁盘中。虽然在数据库层也有对应的缓存,但这种数据库层次的缓存一般针对的是查询内容,而且粒度也太小,一般只有表中数据没有变更的时候,数据库对应的cache才发挥了作用。但这并不能减少业务系统对数据库产生的增、删、查、改的庞大IO压力。所以数据库缓存技术在此诞生,实现热点数据的高速缓存,提高应用的响应速度,极大缓解后端数据库的压力。市面上主流的NoSQL数据库缓存主要有两个:Redis与Memcached,这里介绍一下两者的区别。
(2)知识剖析:
2.1 什么是Memcached?
MemCache是一个自由、源码开放、高性能、分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载。
它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高了网站访问的速度。MemCaChe是一个存储键值对的HashMap,在内存中对任意的数据(比如字符串、对象等)所使用的key-value存储,数据可以来自数据库调用、API调用,或者页面渲染的结果。
MemCache设计理念就是小而强大,它简单的设计促进了快速部署、易于开发并解决面对大规模的数据缓存的许多难题,而所开放的API使得MemCache能用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分流行的程序语言。
2.2 Memcached的特点
(1)MemCache中可以保存的item数据量是没有限制的,只要内存足够
(2)MemCache单进程在32位机中最大使用内存为2G,这个之前的文章提了多次了,64位机则没有限制
(3)Key最大为250个字节,超过该长度无法存储
(4)单个item最大数据是1MB,超过1MB的数据不予存储
(5)MemCache服务端是不安全的,比如已知某个MemCache节点,可以直接telnet过去,并通过flush_all让已经存在的键值对立即失效
(6)不能够遍历MemCache中所有的item,因为这个操作的速度相对缓慢且会阻塞其他的操作
2.3 什么是Redis?
REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。
Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
它通常被称为数据结构服务器,因为值(value)可以是 字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型。
2.4 Redis的特点
(1)Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。
(2)Redis不仅仅支持简单的key-value类型的数据,同时还提供String,list,set,zset,hash等数据结构的存储。
(3)Redis支持数据的备份,即master-slave模式的数据备份。
(4)性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。
(5)原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作合并后的原子性执行。
(6)丰富的特性 – Redis还支持 publish/subscribe, 通知, 设置key有效期等等特性。
(3)常见问题:
3.1 Memcache和Redis的区别是什么?
3.2 Memcache和Redis集群对比简介
(4)解决方案:
区别:
(1)数据结构:Memcache仅能支持简单的K-V形式,Redis不仅如此,同时还提供list,set,hash,zset等数据结构的存储
(2)多线程:Redis只使用单核,而Memcached可以使用多核,所以在比较上,平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis
(3)持久化:Redis支持持久化,Memcache不支持持久化</p>
(4)分布式:Redis做主从结构,而Memcache服务器需要通过hash一致化来支撑主从结构
(5)存储方式:memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小. redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(有快照和AOF日志两种持久化方式)
(6)内存使用率:对于key-value这样简单的数据储存,memcache的内存使用率更高。如果采用hash结构,redis的内存使用率会更高
(7)虚拟内存:Redis当物理内存用完时,可以将一些很久没用到的value 交换到磁盘
(8)过期策略:memcache过期后,不删除缓存,会导致下次取数据的问题,Redis有专门线程,清除缓存数据
对比简介:
(1)Memcached本身并不支持分布式,因此只能在客户端通过像一致性哈希这样的分布式算法来实现Memcached的分布式存储,当客户端向Memcached集群发送数据之前,首先会通过内置的分布式算法计算出该条数据的目标节点,然后数据会直接发送到该节点上存储。但客户端查询数据时,同样要计算出查询数据所在的节点,然后直接向该节点发送查询请求以获取数据。
(2)Redis官方集群方案 Redis Cluster,Redis Cluster是一种服务器Sharding技术,3.0版本开始正式提供。对客户端来说,整个cluster被看做是一个整体,客户端可以连接任意一个node进行操作,就像操作单一Redis实例一样,当客户端操作的key没有分配到该node上时,就像操作单一Redis实例一样,当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node。
(5)编码实战:
(6)拓展思考:
6.1 区别总结
两者进行对比,是因为都是内存数据管理系统,而实际上两者之间区别还是很大。
Redis更多的象一个键值对数据,包括数据的持久化,主从架构,数据备份等策略都是为了保证数据安全以及高可用,而Memcache更多的是一个数据缓存系统是为了提升数据的读取效率,所以两者的应用也有所不同,Memcache适合于缓存SQL语句、数据集、用户临时性数据、延迟查询数据和session等工作场合,Redis除去做Nosql数据库使用外,还能用做消息队列,数据堆栈和数据缓存等。
简而言之:有持久化需求或者对数据结构和处理有高级要求的应用,选择redis,其他简单的key/value存储,选择memcache。
6.2 什么叫一致性哈希,通常用来解决什么问题?
一致性哈希是一种哈希算法,可以有效解决分布式存储下增加或删除节点所带来的问题。它和hash最关键的区别就是,对节点和数据,都做一次哈希运算,然后比较节点和数据的哈希值,数据取和节点最相近的节点做为存放节点。这样就保证当节点增加或者减少的时候,影响的数据最少。
(7)参考文献:
百度百科
https://www.cnblogs.com/lijiasnong/p/5013990.html
https://www.cnblogs.com/xrq730/p/4948707.html
(8)更多讨论:
(9)结束语:
今天的分享就到这里啦,欢迎大家提问、互相探讨~
技能树.IT修真院“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~我的邀请码:35313896,或者你可以直接点击此链接:http://www.jnshu.com/login/1/35313896