【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命令清除特定的数据项。

 

 

  • 23
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何遇mirror

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值