博客
关于我
memcached分布式部署
阅读量:809 次
发布时间:2023-02-08

本文共 2353 字,大约阅读时间需要 7 分钟。

memcache 与 memcached:PHP 缓存技术的对比与应用

在 PHP 开发中,memcache 和 memcached 是两种常用的缓存技术,常被混淆。尽管它们在功能上有诸多相似之处,但二者在实现细节和应用场景上存在显著差异。本文将从功能对比、分布算法以及配置方法等方面,详细探讨 memcache 和 memcached 的区别。

一、功能对比

1. 接口差异

memcache 提供了两套接口:原生接口和非原生接口(非 OO 接口)。其特点是灵活性强,支持多种开发语言。而 memcached 基于 libmemcached 库,只支持原生接口(OO 接口),因此在功能上存在一定的限制。

2. 协议与性能

memcached 支持 Binary Protocol,具有更高的性能。而 memcache 则不支持该协议,性能相对较低。这种协议差异直接影响了两者在高并发场景下的表现。

3. 功能扩展

memcached 的功能远超 memcache,例如支持 getMultigetKeyBy 等高级接口。此外,memcached 还支持分布式缓存的配置选项,如 addServers 和一致性哈希算法。

二、分布式缓存的实现

在分布式缓存中,memcache 和 memcached 采用不同的算法:

1. memcache 的默认分布算法

memcache 按照简单的模算法进行分布,默认使用 hash(key) % servers_count 来决定数据存储的位置。这种方法简单高效,但存在一个明显缺陷:当服务器数量发生变化时,缓存数据会大规模失效,影响命中率。

2. memcached 的一致性哈希

为了克服上述问题,memcached 采用了一致性哈希算法。具体流程如下:

  • 节点配置:将 memcached 服务器的哈希值映射到一个圆(0 到 2^32)上。
  • 数据存储:对存储数据的键计算哈希值,并将其映射到圆上。然后从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上。如果超过圆的范围仍未找到服务器,则将数据保存到第一台 memcached 服务器上。
  • 这种算法不仅解决了服务器数量变化的缓存失效问题,还能在高并发场景下保持较高的命中率。

    三、配置方法

    1. memcache 的配置

    在 memcache 中实现一致性哈希,通常需要在 php.ini 中进行如下配置:

    Memcache.hash_strategy = consistentMemcache.hash_function = crc32

    2. memcached 的配置

    对于 memcached,在程序中需要设置相应的选项:

    $md = new Memcached();$servers = array(    array('127.0.0.1', 11211, 90),    array('127.0.0.1', 11212, 10));$md->addServers($servers);$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);$md->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);

    3. 验证配置

    为了验证配置的正确性,可以通过以下命令查看缓存分布情况:

    $m = new Memcached();$m->addServers(array(    array('127.0.0.1', 11211, 90),    array('127.0.0.1', 11212, 10)));$m->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);$m->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);$keys = $m->getAllKeys();foreach ($keys as $key) {    echo "$key\n";}

    四、实际应用示例

    1. 简单的缓存操作

    // memcache 示例$mem = new Memcache();$mem->addServer('memcachehost', '11211');$mem->addServer('memcachehost', '11212');$mem->set('hx', '9enjoy');echo $mem->get('hx');

    2. memcached 示例

    // memcached 示例$md = new Memcached();$servers = array(    array('127.0.0.1', 11211, 90),    array('127.0.0.1', 11212, 10));$md->addServers($servers);$md->setOption(Memcached::OPT_HASH, Memcached::HASH_CRC);$md->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);$md->set('hx', '9enjoy');echo $md->get('hx');

    五、总结

    memcache 和 memcached 在功能和实现上各有优势。前者简单易用,适合小型分布式缓存场景;后者功能更强大,支持一致性哈希和高级接口,适合复杂的分布式缓存需求。在实际应用中,应根据项目需求选择合适的缓存技术,并合理配置相关参数,充分发挥缓存的性能优势。

    转载地址:http://dqyfk.baihongyu.com/

    你可能感兴趣的文章
    python单元测试之unittest
    查看>>
    Python单元测试unittest实战
    查看>>
    Python单元测试-模拟VS补丁
    查看>>
    python协程实时输出_Python 协程以及事件循环的问题,怎么知道 IO 读取结束了呢?...
    查看>>
    Python十进制&;包提供错误的结果
    查看>>
    Python化身“安全老中医”:一键搞定工控系统漏洞,从零基础到精通,收藏这篇就够了!
    查看>>
    Python加速运行技巧
    查看>>
    python办公自动化基础遍历文件夹
    查看>>
    python办公自动化基础输出文件和文件夹
    查看>>
    python办公自动化基础搜索文件
    查看>>
    python知识:@classmethod和@staticmethod的异同
    查看>>
    python前端之css
    查看>>
    Python制作进度条,原来有这么多方法
    查看>>
    Python制作简单的学生成绩管理系统
    查看>>
    python制作甘特图的基本知识(附Demo)
    查看>>
    python制作一个简单的服务器,【Python】 做一个简单的 http 服务器
    查看>>
    Python到底能做什么?它的优点在哪?
    查看>>
    python利用pytorch库导出图像分割算子
    查看>>
    python利用pyshark监听网卡来抓包其中pyshark中摸索的一些可用参数
    查看>>
    python利用excel分析过杀漏失
    查看>>