IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Memcached简介 -> 正文阅读

[大数据]Memcached简介

1、Memcached是怎么工作的?

??Memcached像一个巨大的、存储了很多<key,value>对的哈希表。通过key,可以存储或查询任意的数据。
??客户端可以把数据存储在多台Memcached上。当查询数据时,客户端首先参考节点列表计算出key的哈希值(阶段一哈希),进而选中一个节点;客户端将请求发送给选中的节点,然后Memcached节点通过一个内部的哈希算法(阶段二哈希),查找真正的数据(item)。
??举个列子,假设有3个客户端 1、2、3,3台Memcached A、B、C:Client1 想把数据”barbaz”以key“foo”存储。Client1首先参考节点列表(A,B,C),计算key“foo”的哈希值,假设 Memcached B被选中。接着,Client1直接连接到Memcached B,通过 key “foo”把数据”barbaz”存储进去。Client2使用与Client1相同的客户端库(意味着阶段一的哈希算法相同),也拥有同样的Memcached列表(A, B, C)。于是,经过相同的哈希计算(阶段一),Client 2 计算出 key “foo”在Memcached B 上,然后它直接请求 Memcached B,得到数据”barbaz”。
??各种客户端在Memcached中数据的存储形式是不同的(Java Hibernate、JSON 等)。一些客户端实现的哈希算法也不一样。但是,Memcached服务器端的行为总是一致的。
??最后,从实现的角度看,Memcached是一个非阻塞的、基于事件的服务器程序。这种架构可以很好地解决 C10K问题,并具有极佳的可扩展性。

2、Memcached最大的优势是什么?

??Memcached 最大的好处就是它带来了极佳的水平可扩展性,特别是在一个巨大的系统中。由于客户端自己做了一次哈希,那么我们很容易增加大量Memcached到集群中。Memcached 之间没有相互通信,因此不会增加Memcached的负载;没有多播协议,不会网络通信量爆炸。Memcached的集群很好用。内存不够/CPU 不够用了时,增加几台Memcached服务器即可。

3、Memcached和MySQL的查询缓存相比,有什么优缺点?

??把Memcached引入应用中,还是需要不少工作量的。MySQL 有个使用方便的查询缓存,可以自动地缓存 SQL 查询的结果,被缓存的 SQL 查询可以被反复地快速执行。Memcached 与之相比,怎么样呢?MySQL的查询缓存是集中式的,连接到该查询缓存的MySQL服务器都会受益。
??当修改表时,MySQL的查询缓存会立刻被刷新。存储一个 memcached item只需要很少的时间,但是当写操作很频繁时,MySQL 的查询缓存会经常让所有缓存数据都失效。
??在多核 CPU 上,MySQL的查询缓存会遇到扩展问题。在多核 CPU上,查询缓存会增加一个全局锁,由于需要刷新更多的缓存数据,速度会变得更慢。
??在MySQL的查询缓存中,是不能存储任意的数据的(只能是 SQL 查询结果)。而利用Memcached,可以搭建出各种高效的缓存。比如,可以执行多个独立的查询,构建出一个用户对象,然后将用户对象缓存到Memcached中。而查询缓存是 SQL 语句级别的,不可能做到这一点。在小的网站中,查询缓存会有所帮助,但随着网站规模的增加,查询缓存的弊将大于利。
??查询缓存能够利用的内存容量受到 MySQL 服务器空闲内存空间的限制。给数据库服务器增加更多的内存来缓存数据,固然是很好的。但是,有了Memcached,只要有空闲的内存,都可以用来增加 Memcached集群的规模,然后就可以缓存更多的数据。

4、Memcached的缓存机制是怎样的?

??主要的缓存机制是LRU算法+超时失效。当您存数据到Memcached中,可以指定该数据在缓存中可以呆多久。如果Memcached的内存不够用了,过期的数据会优先被替换,接着就轮到最老的未被使用的数据。

5、Memcached如何实现冗余机制?

??不实现。Memcached应该是应用的缓存层。它的设计本身就不带有任何冗余机制。如果一个Memcached节点失去了所有数据,开发者应该可以从数据源(比如数据库)再次获取到数据。

6、Memcached如何处理容错的?

??不处理。在Memcached节点失效的情况下,集群没有必要做任何容错处理。如果发生了节点失效,应对的措施完全取决于用户。节点失效时,有几种方案供选择:

  • 忽略它。 在失效节点被恢复或替换之前,还有很多其他节点可以应对节点失效带来的影响。
  • 把失效的节点从节点列表中移除。在默认情况下(余数式哈希算法),客户端添加或移除节点,会导致所有的缓存数据不可用!因为哈希参照的节点列表变化了,大部分 key 会因为哈希值的改变而被映射到(与原来)不同的节点上。
  • 启动热备节点,接管失效节点所占用的 IP。这样可以防止哈希紊乱。
  • 如果希望添加和移除节点,而不影响原先的哈希结果,可以使用一致性哈希算法。
  • 两次哈希。当客户端存取数据时,如果发现一个节点失效了,就再做一次哈希(哈希算法与前一次不同),重新选择另一个节点(需要注意的时,客户端并没有把失效的节点从节点列表中移除,下次还是有可能先哈希到它)。如果某个节点时好时坏,两次哈希的方法就有风险了,好的节点和坏的节点上都可能存在脏数据。

7、Memcached是如何做身份验证的?

??没有身份认证机制。Memcached是运行在应用下层的软件(身份验证应该是应用上层的职责)。Memcached的客户端和服务器端之所以是轻量级的,部分原因就是完全没有实现身份验证机制。这样,Memcached可以很快地创建新连接,服务器端也无需任何配置。

8、Memcached的多线程是什么?如何使用它们?

??Memcached1.2 及更高版本拥有了多线程模式。多线程模式允许 Memcached能够充分利用多个 CPU,并在CPU 之间共享所有的缓存数据。Memcached使用一种简单的锁机制来保证数据更新操作的,因此上面的方法可以全面提高性能。
??如果系统负载并不重,也许不需要启用多线程工作模式。如果在运行一个拥有大规模硬件的、庞大的网站,将会看到多线程的好处。
??简单地总结一下:命令解析(Memcached在这里花了大部分时间)可以运行在多线程模式下。Memcached内部对数据的操作是基于很多全局锁的(因此这部分工作不是多线程的)。

9、Memcached能接受的key的最大长度是多少?

??key的最大长度是250个字符。需要注意的是,250 是Memcached服务器端内部的限制。推荐使用使用较短的 key,可以节省内存和带宽。

10、Memcached对item的过期时间有什么限制?

??过期时间最大可以达到30天。Memcached把传入的过期时间(时间段)解释成时间点后,一旦到了这个时间点,Memcached就把item置为失效状态。

11、Memcached最大能存储多大的单个item?

??1MB。如果数据大于1MB,可以考虑在客户端压缩或拆分到多个key中。

12、Redis和Memcached的区别

  • 数据支持的类型
    ??Redis不仅仅支持简单的k/v类型的数据,同时还支持list、set、zset、hash
    等数据结构的存储;Memcached只支持简单的k/v类型的数据,key和value都是string类型。
  • 可靠性
    ??Memcached不支持数据持久化,断电或重启后数据消失,但其稳定性是有保证的;Redis支持数据持久化和数据恢复,允许单点故障。
  • 性能
    ??对于存储大数据,Memcached的性能要高于Redis。
  • 应用场景
    ??Memcache:适合多读少写,大数据量的情况(一些官网的文章信息等)。
    ??Redis:适用于对读写效率要求高、数据处理业务复杂、安全性要求较高的系统。
    ??案例:分布式系统,存在Session之间的共享问题,因此在做单点登录的时候,我们利用Redis来模拟了Session的共享,来存储用户的信息,实现不同系统的Session共享。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:37:16  更:2022-03-15 22:37:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:05:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码