【Memcached】Memcached的工作原理

目录

​编辑

第2章:Memcached工作原理

2.1 数据存储与访问

2.2 分布式架构

2.3 数据过期机制


第2章:Memcached工作原理

2.1 数据存储与访问

     Memcached是一种键值存储系统,其中数据以键值对的形式存储。键是用于定位数据的唯一标识符,而值则是要存储的数据本身。在Memcached中,键是一个字符串,长度通常限制在250字节以内,而值则可以是任意格式的数据,如字符串、整数、浮点数或序列化的复杂数据结构,但大小通常限制在1MB以内。

当应用程序需要存储数据时,它通过Memcached客户端库发送一个命令到Memcached服务器,指定要存储的键和对应的值。如果存储成功,Memcached会返回确认信息。如果数据已存在,Memcached将覆盖旧值。

对于数据访问,应用程序通过发送带有相应键的命令来请求数据。Memcached使用键在内存中查找对应的值,并将其返回给客户端。如果找不到数据,Memcached将返回一个“未找到”消息。

操作描述
存储数据应用程序通过客户端发送set命令,包含键、值和可选的生存时间(TTL)。
存储确认Memcached返回STORED确认数据已存储,或返回错误代码。
获取数据应用程序使用get命令,传入键,Memcached查找键并返回对应的值。
获取确认Memcached返回值或NOT_FOUND错误,表示键不存在或已过期。
删除数据应用程序使用delete命令,传入键,Memcached从内存中移除对应的键值对。
删除确认Memcached返回DELETED确认数据已被删除,或NOT_FOUND表示键不存在。
替换数据如果键已存在,使用replace命令替换现有值。
替换确认Memcached返回REPLACE确认数据已被替换,或NOT_STORED表示键不存在。
更新数据使用incrementdecrement命令在数值型值上进行原子性加减操作。
更新确认Memcached返回更新后的值或错误代码,如NOT_STOREDVALUE

 

2.2 分布式架构

     Memcached的分布式架构是其最强大的特性之一。在一个分布式环境中,数据被分割并存储在多台Memcached服务器上。这种架构不仅提高了数据的读写速度,还增加了系统的容错性和可扩展性。

    当数据存储时,Memcached使用哈希算法(通常是CRC32)来计算键的哈希值,然后根据这个哈希值决定数据应该存储在哪一台服务器上。这称为哈希环技术,确保了数据的均匀分布。

     客户端使用相同的哈希算法来确定数据的位置,从而可以直接向正确的服务器发出请求。这种设计消除了中心化的瓶颈,提高了系统的整体性能。

     如果某个服务器宕机或离线,Memcached的分布式特性意味着其他服务器仍然可以提供服务,虽然可能暂时无法访问存储在故障服务器上的数据。为了提高可用性,可以采用复制或分片策略,但这通常需要更复杂的架构和管理。

特性描述
哈希环使用CRC32或其他哈希算法将键映射到特定的服务器上,实现数据的均匀分布。
节点选择根据哈希值确定数据所在的节点,客户端直接向该节点请求数据。
负载均衡数据分布在多台服务器上,每台服务器承担相似的请求负载。
容错机制如果某节点不可用,请求将重定向至其他节点,可能暂时无法访问特定数据。
扩展性可以通过添加更多节点来扩展缓存容量和吞吐量,无需停机。
分布式更新当数据更新时,必须确保所有相关节点上的缓存数据同步更新,以避免数据不一致。
节点加入/离开节点加入或离开集群时,数据需要重新分配以保持负载均衡。
一致性哈希在节点变化时,使用一致性哈希算法尽量减少数据迁移量,减少系统中断时间。
2.3 数据过期机制

      Memcached支持数据的过期机制,这是通过设置一个生存时间(TTL,Time To Live)来实现的。当数据存储时,可以指定一个过期时间,单位为秒。一旦过期时间到达,数据将从缓存中自动删除,以便释放内存空间给新的数据。

      过期时间的设定是可选的,如果没有指定,数据将一直保留在缓存中,直到达到内存容量限制或显式删除。这种机制有助于防止缓存中存储过多的过时数据,同时也可以用来实现临时的缓存策略。

     值得注意的是,Memcached的数据过期不是实时的。在过期时间到达时,数据并不会立即被物理删除,而是标记为“过期”。只有当缓存空间不足,需要为新数据腾出空间时,Memcached才会清理过期的数据。这一过程称为“最近最少使用”(LRU,Least Recently Used)淘汰策略。

机制描述
生存时间(TTL)数据项在内存中存活的时间,以秒为单位,过期后数据自动从缓存中移除。
过期检查Memcached定期检查数据项是否过期,过期的数据项会被标记为无效。
LRU淘汰当缓存空间不足时,采用最近最少使用(LRU)策略淘汰过期或最久未使用的数据项。
清理策略清理过期数据项的过程是非实时的,通常在内存压力大时触发,以腾出空间给新的数据项。
异步过期数据项不会在过期时间到达的那一刻立即被删除,而是等待下一次清理周期才真正从缓存中移除。
手动清除应用程序可以显式地使用flush_all命令清除所有数据,或使用delete命令清除特定的数据项。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/46775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

libyaml库的交叉编译

目录 1.Ubuntu环境中安装libyaml库 2.交叉编译 3.success 1.Ubuntu环境中安装libyaml库 官方地址:https://pyyaml.org/wiki/LibYAML 下载路径:http://pyyaml.org/download/libyaml/yaml-0.2.5.tar.gz 2.交叉编译 官方的下载路径为/usr/local下&am…

【unity实战】使用unity制作一个红点系统

前言 注意,本文是本人的学习笔记记录,这里先记录基本的代码,后面用到了再回来进行实现和整理 素材 https://assetstore.unity.com/packages/2d/gui/icons/2d-simple-ui-pack-218050 框架: RedPointSystem.cs using System.…

PHP全功能微信投票迷你平台系统小程序源码

🔥让决策变得超简单!🎉 🚀【一键创建,秒速启动】 嘿小伙伴们,你还在为组织投票而手忙脚乱吗?来试试这款全功能投票迷你微信小程序吧!只需轻轻一点,无论是班级选举、社团…

【postgresql】pg_dump备份数据库

pg_dump 介绍 pg_dump 是一个用于备份 PostgreSQL 数据库的实用工具。它可以将数据库的内容导出为一个 SQL 脚本文件或其他格式的文件,以便在需要时进行恢复或迁移。 基本用法 pg_dump [选项] [数据库名] 命令选项 -h 或 --host:指定数据库服务器的主…

2024年大数据高频面试题(上篇)

文章目录 HDFS读流程和写流程HDFS读数据流程NameNode和Secondary NameNode工作机制FsimageEdits文件Seen_txidnamenode工作机制HA NameNode如何工作ZKFCHealthMonitorActiveStandbyElectorJouranlNode集群DataNode工作机制DataNode数据损坏压缩MapReduce工作流程MapTask工作流R…

Visual Studio远程调试工具

路径:Visual Studio安装路径/Common7/IDE/Remote Debugger/平台/msvsmon.exe。 平台有x86、x64,x64即可调试x86进程也可调试x64进程。 将平台路径下的所有文件拷贝至其他PC,运行msvsmon.exe。 工具栏选择“工具(T)”…

Ubuntu18.04安装ROS

1.添加ROS软件源 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.listcurl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc输入指令:curl -s https:…

Python中EMD的安装教程

第一步:首先安装两个包 pip install pyemd pip install EMD-signal第二步:然后,进行改名 安装完之后,找到包所在的位置,然后要将原来pyemd的文件夹名称改为PyEMD:

cleanshot Mac 上的截图工具

笔者闲来无事,最近在找一些mac上好用的工具其中一款就是cleanShot。为什么不用原有的mac自带的呢。因为相对来说编辑功能不算全面,不支持长截图。那有没有一款软件支持关于截图的好用工具呢。 所以笔者找了这款。安装包是直接安装就可使用的。请大家点赞…

Golang | Leetcode Golang题解之第237题删除链表中的节点

题目: 题解: func deleteNode(node *ListNode) {node.Val node.Next.Valnode.Next node.Next.Next }

Python中的UnboundLocalError是什么错误?如何解决?

如果代码报错UnboundLocalError, 大概率犯了以下错误: money 10000 # 当前存款def add_money(value):money valueif __name__ __main__:print(当前存款:, money)add_money(1000)print(当前存款:, money)其中,变量money表示当前存款;函数…

DialogFragment 开发手游sdk代替透明的activity

前言 各位同学大家好 有段时间没有给各位更新文章了,最近在写新的项目 之前的手游sdk 都是用透明的activity 效果有缺陷,现在我改成用这个dialogfragment 来实现 , 废话不多说我们正式开始 效果图 : 为什么要使用dialogfragment: 之前开发手游sdk的时候 我这边都是使用透…

【区块链 + 智慧政务】区块链 +ETC 下一代公路联网收费关键技术优化项目 | FISCO BCOS应用案例

2020 年,我国取消省界收费站项目完成后,随着收费模式与收费方式的变化,形成了以门架为计费单元的新收 费体系:按照车辆通行门架数,RSU 天线读取 ETC 卡、电子标签 OBU 或 CPC 卡内标识的车型信息,车型门架计…

ALlegro批量替换封装?

1,此种情况批量修改同名封装,即改前改后的封装名相同 2,首先将改好后的封装放于库路径下 3,place ----update symbols —package symbols ----选择修改的封装名 4,refresh 完成

开源PS2模拟器 PCSX2 2.0版发布 性能与功能全面升级

时隔多年之后,备受玩家喜爱的PS2模拟器PCSX2迎来了重大更新,2.0版本正式发布!此次更新包含了大量改进,几乎涵盖了模拟器各个方面,为玩家带来更流畅、更便捷的游戏体验。 下载地址: https://pcsx2.net/ 界…

Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器

章节内容 上节我们完成了: ZNode的基本介绍ZNode节点类型的介绍事务ID的介绍ZNode实机测试效果 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机上搭建过一次&#xff…

品牌形象的智能塑造:Kompas.ai如何构建品牌视觉识别

品牌形象是企业在消费者心中构建的独特印象,它对于品牌识别和记忆度至关重要。一个一致且具有辨识度的品牌形象能够帮助企业在激烈的市场竞争中脱颖而出。Kompas.ai,作为一款智能设计工具,正帮助品牌塑造和维护其独特的视觉识别系统。 一致的…

JMeter进行HTTP接口测试的技术要点

参数化 用户定义的变量 用的时候 ${名字} 用户参数 在参数列表中传递 并且也是${} csv数据文件设置 false 不忽略首行 要首行 从第一行读取 true 忽略首行 从第二行开始 请求时的参数设置: 这里的名称是看其接口需要的请求参数的名称 这里的变量名称就是为csv里面…

帮助中心如何提高用户粘性和活跃度?

帮助中心(Help Center)是在产品网站或者产品内部设立的一个功能模块,用于将产品使用上遇到的问题,或者关于产品的所有问题进行汇总,并通过Q&A(问题与解答)的形式展现给用户,帮助…

【linux】服务器重装系统之系统盘写入准备

【linux】服务器重装系统之系统盘写入准备 【创作不易,求点赞关注收藏】😀 文章目录 【linux】服务器重装系统之系统盘写入准备一、前期准备1、准备一个U盘,并进行格式化2、下载UltralSO工具3、下载对应的Ubuntu版本 二、写入操作教程 一、…