千家信息网

Memcached的原理是什么

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,Memcached的原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、Memcached简介memcached是高性能的分
千家信息网最后更新 2025年12月01日Memcached的原理是什么

Memcached的原理是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一、Memcached简介

memcached是高性能的分布式内存缓存服务器。它通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。与其类似常见的还有Redis。Memcached基于一个存储键/值(K/V)对的hashmap。客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。

memcached的API使用32位元的循环冗余校验(CRC-32)计算键值后,将资料分散在不同的机器上。当表格满了以后,接下来新增的资料会以LRU机制替换掉。

二、Memcached的分布式算法

1、余数哈希(余数计算分散):

原理:根据服务器台数的余数进行分散:先求得键(key)的整数哈希值( int hashCode ),通过Hash函数把key转化成整数后,再用这个哈希值除以服务器台数,根据余数选择服务器。

举例:总共10台服务器(编号为0~9),先获取数据的key的整数哈希值:hashCode=hash(key)=13 ,然后除以服务器总台数,mod 10(13)=3,即选择编号为3的服务器进行存储。

缺点:当添加或减少服务器后要进行重哈希,这样会导致原来的服务器序号变了,则可能出现求得的余数也改变,导致Memcached命中率下降,导致更多地访问数据库服务器去调数据,增加了数据库服务器的负载。

2、一致性哈希:

原理:

  • 一致性哈希是将整个哈希值空间组织成一个虚拟的圆环,如假设某哈希函数H的值空间是0~(2^32 -1)(即哈希值是一个32位的无符号整型)。这个哈希空间为环。然后让每台机器占一个扇形空间。(一致性哈希方式,使得服务器保存的哈希值空间是一个范围,而不是一个特定的余数系列.所以减少了增删服务器后的影响.)

  • 哈希空间按顺时针方向组织。为确定每台服务器在空间上的位置,按照服务器主机名或者IP地址对每台服务器进行Hash寻址。然后需要使用hash算法来判断数据应该存储在哪个服务器:首先,将数据根据key值使用相同的函数H计算出哈希值h,根据h确定数据在环上的位置,从此位置延环顺时针向下寻找,遇到的第一个服务器就是其应该存储的服务器。

容错性:对下图,当Server3服务器故障时,数据的存储指示D发生了改变,存放在了Server2上边。系统的存储数据变化最少(因为是数据是顺时针寻找服务器存储,所以D位置数据找到的是Server2服务器)

扩展性:假设增加服务器Server4,按规则放在BC中间,那么只是B存储在Server4上边了,整体的影响只是发生在了新增节点的区间部分。

三、Memcached的数据清除算法

  • Memcached会启动LRU(Least Recently Used,最近最少使用)算法淘汰旧的数据项。

  • 每个slab会维护一个队列,刚插入的数据在队头,经常get的数据也会移动到队头,这样较老或者访问较少的数据相对都留在队尾。该算法从队尾开始淘汰。当slab分配不到足够的内存时,首先会检查队尾是否有过期数据。如果有的话会直接将其覆盖为新的对象,如果没有,会开始淘汰队尾的对象。

四、工作流程

  • 检查客户端的请求数据是否在memcached中,若存在则直接把请求数据返回,不存在则访问数据库服务器进行操作;

  • 如果请求的数据不在memcached中,就去查数据库,把从数据库中获取的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责,需要程序明确实现);

  • 每次更新数据库的同时更新memcached中的数据,保证一致性;当分配给memcached内存空间用完之后,会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略,失效数据首先被替换,然后再替换掉最近未使用的数据。

五、Memcached 和 Redis的区别?

1、数据存储位置:Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。而Memecache把数据全部存在内存之中;

2、速度上:Redis的速度比memcached快很多;

3、多线程:Memcached支持多线程,而Redis使用单线程的IO复用模型;

4、支持的数据类型:Memcached仅支持简单的数据类型,想要存入复杂的数据类型必须把复杂的数据类型转变成简单的数据类型。Redis不仅仅支持简单的k/v类型的数据,同时还提供string(字符串)、list(链表)、set(集合)、zset(sortedset --有序集合)和hash(哈希类型)等数据结构的存储。

关于Memcached的原理是什么问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

数据 服务器 服务 哈希 存储 数据库 空间 类型 余数 位置 内存 算法 支持 原理 一致 一致性 客户 函数 同时 客户端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库中的默认表 北京亿橙网络技术有限公司面试 数据库哪些操作需要维护索引 湖南网络安全教育考试 重庆电脑软件开发流程 山东大学网络安全专业怎么样 邯郸市宇晨软件开发有限公司 砀山梨园网络安全 c s数据库假设 计算机和网络安全相关的毕业设计 结合网络安全宣传周 软件开发捡瓶子什么梗 智能座舱平台软件开发岗位信息 信息网络安全技术应用 苹果手机中国数据库 综合管理平台软件开发的意义 福建通用软件开发代理价格 数据库6.0spl是什么 guns框架如何操作数据库 单位网络安全事件处置报告 数据库闭包怎么求 学习通计算机网络技术章节 金牛网络技术科技有限公司 加拿大地区 数据库 残疾人就业网络技术服务中心 数据库访问技术教材 数据库中的表的组成内容包括 济南社动网络技术 数据库分析器 上海美凯龙爱家互联网科技
0