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

     

     

  • 相关阅读:
    langchain +gpt 报错 SSLError
    CSS进阶(2)- 块级格式化上下文
    基于Python+django的网购平台购物商城-计算机毕业设计
    【机器学习】XGB/LGBM
    基于JavaSwing开发联机坦克游戏(服务器+客户端) 课程设计 大作业
    BIT-4-数组
    记一次SQL注入的收获
    性能测试工具wrk安装使用详解
    SpringBoot使用Nacos作为配置中心服务
    电机-电力拖动-振动-应力分析-设备防护知识初步
  • 原文地址:https://blog.csdn.net/weixin_43298211/article/details/140437418