当前位置:   article > 正文

【PHP小课堂】学习了解PHP中Memcached扩展的使用

【PHP小课堂】学习了解PHP中Memcached扩展的使用

学习了解PHP中Memcached扩展的使用

说实话,在目前的开发环境中,使用 Memcache 的项目还真的不多。在 Redis 大行其道的今天,Memcache 的衰退也可以说是大势所趋。不过,可能很多刚开始学习 PHP 的新同学不知道,当年在 LAMP 时代,除了这四个字母所代表的这些服务端软件之外,缓存上最出名的就是这个 Memcache ,它和 PHP 搭配的历史也非常的长。

因此,今天我们就是简单地入门学习了解一下,不做过多的深入学习。对于小的项目来说,如果只是需要一个键值对的缓存系统,Memcache 其实也是非常不错的选择,毕竟它更加地简单易用,不用考虑过多的数据结构问题。

我们需要在服务器上安装 Memcached 这个服务端组件,然后启动运行它。这个就不多做解释了,基本上 yum 和 apt 都能非常方便地安装它。而 PHP 中的扩展我们可以选择 Memcached 和 Memcache 两种扩展包,现在比较推荐的是直接安装 Memcached 这个扩展。它们两个其实没啥区别,这个缓存软件叫做 Memecahce ,但它的运行主程序叫做 Memcached ,而在 PHP 层面的话,Memcache 这个扩展是在 PHP 框架内部开发的,而 Memcached 则是要使用 libmemcached 这个系统组件的。具体更多的区别大家可以自行搜索相关的文档资料,这里就不多解释了,反正只要知道它们大概的区别以及现在更推荐使用谁就可以了。

连接 Memcached 服务器并查看信息

安装好各种软件之后,我们就可以连接到 Memcache 服务了。

  1. $m = new Memcached();
  2. $m->addServer('127.0.0.1''11211');
  3. print_r($m->getStats());
  4. // Array
  5. // (
  6. //     [127.0.0.1:11211] => Array
  7. //         (
  8. //             [pid] => 1713
  9. //             [uptime] => 1277
  10. //             [time] => 1614646202
  11. //             [version] => 1.5.22
  12. //             [libevent] => 2.1.8-stable
  13. //             [pointer_size] => 64
  14. // …………………………
  15. // …………………………
  16. // …………………………
  17.             
  18. print_r($m->getServerList());
  19. // Array
  20. // (
  21. //     [0] => Array
  22. //         (
  23. //             [host] => 127.0.0.1
  24. //             [port] => 11211
  25. //             [type] => TCP
  26. //         )
  27. // )

使用 addServer() 这个方法来添加服务器,是不是隐约感觉到了什么?而且我们可以通过 getServerList() 查看所有的连接的服务器列表。很明显,Memcached 相关的扩展都是支持多台服务器扩展访问的。getStats() 方法可以看到连接的服务器的各种统计信息。

添加、查看数据

添加数据

  1. $m->add("test1""a");
  2. $m->add("test2"1);
  3. $m->add("test3""c"3);
  4. sleep(4);
  5. print_r($m->getAllKeys());
  6. // Array
  7. // (
  8. //     [0] => test1
  9. //     [1] => test2
  10. //     [2] => test3
  11. // )
  12. echo $m->get("test1"), PHP_EOL; // a
  13. echo $m->get("test3"), PHP_EOL; //

我们直接使用 add() 方法就可以添加数据,最后一个参数可以设置这个数据的过期时间。通过 getAllKeys() 方法可以看到添加数据的键信息,不过过期的数据键还会存在一会。而我们直接使用 get() 方法获取数据内容时,过期的数据就无法访问了。

一次性获得数据信息

  1. $m->getDelayed(['test1''test2''test3']);
  2. print_r($m->fetchAll());
  3. // Array
  4. // (
  5. //     [0] => Array
  6. //         (
  7. //             [key] => test1
  8. //             [value] => a
  9. //         )
  10. //     [1] => Array
  11. //         (
  12. //             [key] => test2
  13. //             [value] => 1
  14. //         )
  15. // )

使用 getDelayed() 方法可以获得指定键数组的全部数据信息,它是包含 key 和 value 的内容,返回的是一个游标,我们可以直接用 fetchAll() 获得全部的内部,也可以使用 fetch() 一条一条的遍历。

追加与设置数据

  1. $m->setOption(Memcached::OPT_COMPRESSION, false);
  2. $m->append("test1""aa");
  3. echo $m->get("test1"), PHP_EOL; // aaa
  4. $m->set("test4""d");
  5. print_r($m->getMulti(["test1""test4"]));
  6. // Array
  7. // (
  8. //     [test1] => aaaaaaaaaaaaaaaaaaaaa
  9. //     [test4] => d
  10. // )

使用 append() 方法可以向指定的数据追加内容,比如这里我们向 test1 追加内容,它原本的值是 a ,追加之后就变成了 aaa 。需要注意的是,使用 append() 方法需要设置 OPT_COMPRESSION 为 false 。默认情况下,这个常量属性值是 true 的,也就是它会将数据压缩,如果是压缩的数据,那么使用这种追加函数可能会产生错误,所以如果要使用 append() 这种函数,就需要将这个属性设置为 false 。

set() 函数用于直接设置一个 key 的值,如果它存在就相当于修改,如果不存在就会创建一个新的。

最后,我们还演示了 getMulti() 这个方法,相比 getDelayed() 来说,它就是批量获取到指定数据的值。

自增、自减操作

  1. $m->increment("test2");
  2. echo $m->get("test2"), PHP_EOL; // 2
  3. $m->decrement("test2");
  4. echo $m->get("test2"), PHP_EOL; // 1

使用 increment() 和 decrement() 方法就可以实现对指定键的值的自增自减操作,这两个函数在 redis 中也是非常常用的。

更新、删除

没有代码的演示,因为比较简单,replace() 用于修改,delete() 用于删除,也就不对它们进行过多的研究了。

Memcache 扩展

上面我们使用的都是 Memcached 这个扩展,接下来我们再简单看一下 Memecache 的操作,其实都是差不多的,但其实 Memcached 扩展的功能会更丰富一些,也就是提供的方法函数更多一些,就像文章开头说的,使用哪种扩展大家自己根据业务情况选择吧。

  1. $mem = new Memcache();
  2. $mem->connect('127.0.0.1'11211);
  3. print_r($mem->getStats());
  4. // Array
  5. // (
  6. //     [pid] => 1713
  7. //     [uptime] => 1281
  8. //     [time] => 1614646206
  9. //     [version] => 1.5.22
  10. //     [libevent] => 2.1.8-stable
  11. //     [pointer_size] => 64
  12. //     [rusage_user] => 0.085507
  13. //     [rusage_system] => 0.145715
  14. //     [max_connections] => 1024
  15. // ………………………………
  16. // ………………………………
  17. // ………………………………
  18. echo $mem->getVersion(), PHP_EOL;
  19. // 1.5.22
  20. $mem->set("test5""e");
  21. echo $mem->get("test5"), PHP_EOL; // e

总结

关于 Memcache 相关的内容就是这些,比较简单的介绍了一下它们的使用。目前,或者说最近这些年,真的已经没怎么见过使用 Memcache 的项目或者公司了。不管什么公司,上来真的就是一套 redis ,完全不考虑其它的缓存扩展了。所以这里我们也就不对 Memcache 再进行更多的研究了。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/03/source/1.%E5%AD%A6%E4%B9%A0%E4%BA%86%E8%A7%A3PHP%E4%B8%ADMemcached%E6%89%A9%E5%B1%95%E7%9A%84%E4%BD%BF%E7%94%A8.php

参考文档:

https://www.php.net/manual/zh/book.memcache.php

https://www.php.net/manual/zh/book.memcached.php

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/630834
推荐阅读
相关标签
  

闽ICP备14008679号