【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 服务了。

$m = new Memcached();
$m->addServer('127.0.0.1', '11211');print_r($m->getStats());
// Array
// (
//     [127.0.0.1:11211] => Array
//         (
//             [pid] => 1713
//             [uptime] => 1277
//             [time] => 1614646202
//             [version] => 1.5.22
//             [libevent] => 2.1.8-stable
//             [pointer_size] => 64
// …………………………
// …………………………
// …………………………print_r($m->getServerList());
// Array
// (
//     [0] => Array
//         (
//             [host] => 127.0.0.1
//             [port] => 11211
//             [type] => TCP
//         )// )

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

添加、查看数据

添加数据

$m->add("test1", "a");
$m->add("test2", 1);
$m->add("test3", "c", 3);
sleep(4);print_r($m->getAllKeys());
// Array
// (
//     [0] => test1
//     [1] => test2
//     [2] => test3
// )echo $m->get("test1"), PHP_EOL; // a
echo $m->get("test3"), PHP_EOL; //

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

一次性获得数据信息

$m->getDelayed(['test1', 'test2', 'test3']);
print_r($m->fetchAll());
// Array
// (
//     [0] => Array
//         (
//             [key] => test1
//             [value] => a
//         )//     [1] => Array
//         (
//             [key] => test2
//             [value] => 1
//         )// )

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

追加与设置数据

$m->setOption(Memcached::OPT_COMPRESSION, false);
$m->append("test1", "aa");
echo $m->get("test1"), PHP_EOL; // aaa$m->set("test4", "d");
print_r($m->getMulti(["test1", "test4"]));
// Array
// (
//     [test1] => aaaaaaaaaaaaaaaaaaaaa
//     [test4] => d
// )

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

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

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

自增、自减操作

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

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

更新、删除

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

Memcache 扩展

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

$mem = new Memcache();
$mem->connect('127.0.0.1', 11211);print_r($mem->getStats());
// Array
// (
//     [pid] => 1713
//     [uptime] => 1281
//     [time] => 1614646206
//     [version] => 1.5.22
//     [libevent] => 2.1.8-stable
//     [pointer_size] => 64
//     [rusage_user] => 0.085507
//     [rusage_system] => 0.145715
//     [max_connections] => 1024
// ………………………………
// ………………………………
// ………………………………echo $mem->getVersion(), PHP_EOL;
// 1.5.22$mem->set("test5", "e");
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

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

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

相关文章

【跟着例子学MySQL】多表关联 -- 一对一关系

文章目录 前言回顾一对一关系备份恢复未完待续 前言 举例子,是最简单有效的学习方法。本系列文章以一个贯穿始终的场景,结合多个实例讲解MySQL的基本用法。 ❔ 为什么要写这个系列? 模仿是最好的老师,实践是检验成果的方法。本系…

ABAP 借助公司封装的钉钉URL,封装的RFC给钉钉发送消息

FUNCTION ZRFC_BC_SMSSEND_DINGTALK. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(DESTUSRID) TYPE CHAR255 *" VALUE(CONTENT) TYPE CHAR255 *&quo…

【论文解读】Modular Blind Video Quality Assessment

原文下载地址:Modular Blind Video Quality Assessment 时间:2024 年 级别:arxiv 作者与机构:香港城市大学、香港中文大学(深圳)、字节跳动公司 git地址:https://github.com/winwinwenwen77/ModularBVQA 摘要 论文提出了一种模块化的盲视频质量评估(Blind Video Quali…

企业如何实现数据采集分析展示一体化

在当今数字化时代,企业越来越依赖于数据的力量来驱动决策和创新。通过全量实时采集各类数据,并利用智能化工具进行信息处理,企业能够借助大数据分析平台深入挖掘数据背后的价值,从而为企业发展注入新动力。 一、企业痛点 随着数字…

使用uniapp编写的微信小程序进行分包

简介: 由于小程序发布的时候每个包最多只能放置2MB的东西,所以把所有的代码资源都放置在一个主包当中不显示,所以就需要进行合理分包,,但是分包后整个小程序最终不能超过20MB。 一般情况下,我习惯将tabba…

Java实现图片保存到pdf的某个位置

Java实现图片保存到pdf的某个位置 1、依赖–maven <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency>2、上代码 package com.hxlinks.hxiot.controlle…

【OCPP】ocpp1.6协议第3.16章节Metering Data介绍及翻译

目录 3.16. Metering Data计量数据-概述 计量数据的目的 关键功能 消息类型 MeterValues 消息格式 使用场景 计量数据的准确性和可靠性 总结 3.16. Metering Data计量数据-译文 3.16.1. Charging Session Meter Values 3.16.2. Clock-Aligned Meter Values 3.16.3.…

【JavaScript】call、apply、bind的区别和应用

历史小剧场 其实在大多数时间里&#xff0c;除去超人、蝙蝠侠等不可抗力出来维护正义外&#xff0c;邪是经常胜正的。所谓好人、善人、老实人常常被整得凄惨无比&#xff0c;比如于谦、岳飞等&#xff0c;都是死后很多年才翻身平反。 只有岁月的沧桑&#xff0c;才能淘尽一切污…

【Vue】自动导入组件

1. 下载插件 npm install unplugin-vue-components 2. 修改vite.config.js import { fileURLToPath, URL } from node:urlimport { defineConfig } from vite import vue from vitejs/plugin-vue import Components from unplugin-vue-components/vite // 按需加载自定义组件/…

C#中的事件聚合器实现方法

概述&#xff1a;_对象之间的关系_是使代码库难以理解和难以维护的原因。为了更好地理解它&#xff0c;我们求助于马丁福勒&#xff08;Martin Fowler&#xff09;&#xff1a;事件聚合器是间接的简单元素。在最简单的形式中&#xff0c;您可以让它注册到您感兴趣的所有源对象&…

MapStruct与BeanUtils处理对象属性复制场景对比

MapStruct是什么&#xff1f; MapStruct is a code generator that greatly simplifies the implementation of mappings between Java bean types based on a convention over configuration approach. The generated mapping code uses plain method invocations and thus is…

elastich运维

Elastichsearch是一种高度可扩展的开源全文搜索和分析引擎&#xff0c;可以用来实现快速、高效的数据检索。 集群规划与部署&#xff1a;首先需要根据业务需求规划Elastichsearch集群的节点数量和角色&#xff08;如主节点、副本节点、协调节点等&#xff09;。在部署时&#x…

赎金信-力扣

这道题想到的解法是使用一个哈希表来存储magazine里每个字符出现的次数&#xff0c;然后遍历ransomNote&#xff0c;出现对应的字母则哈希表中对应的值减一&#xff0c;当查找不到某个字符&#xff0c;或者某个字符的值小于0时&#xff0c;则返回false。代码如下&#xff1a; …

ORACLE中递归遍历

--查询全部资源信息 select * from urm_class_info --向上遍历树&#xff0c;找到路径直到根节点&#xff0c;指定的是parentid select distinct classid, parentid, namefrom urm_class_infostart with parentid cmdb0000000000000017 connect by prior parentid classid …

配置Spring Security的身份验证

配置Spring Security的身份验证 在我们登录Spring Security之前&#xff0c;我们将向您展示如何配置Spring Security的身份验证。我们将通过创建一些用户来验证并为它们生成身份验证。在这篇文章中&#xff0c;我们将学习Spring Security的流程是配置Spring Security中的身份验…

代码随想录算法训练营第二十一天 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差 题目链接&#xff1a;https://leetcode.cn/problems/minimum-absolute-difference-in-bst/ 文档讲解&#xff1a;https://programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF%B9%E…

VMware Workstation 不可恢复错误:(vmui) 错误代码0xc0000094

软件版本 vmware 17 错误情况 VMware Workstation 不可恢复错误&#xff1a;(vmui) Exception 0xc0000094 has occurred. 问题原因 VMware升级到17.0后&#xff0c;将虚拟机环境的【硬件兼容性】升级至Workstation 17.X后&#xff0c;无法修改设备参数。 解决办法 打开需…

企业营收分析难?搞定收入认领月底不加班!

在当今日益激烈的市场竞争中&#xff0c;企业的营收分析不仅是衡量经营成果的关键指标&#xff0c;更是指导企业未来发展的重要依据。然而&#xff0c;对于许多企业来说&#xff0c;营收分析的过程往往繁琐且耗时&#xff0c;尤其是月底结账时&#xff0c;大量的数据和复杂的计…

【Numpy】NumPy基础入门:创建和管理多维数组

NumPy基础入门&#xff1a;创建和管理多维数组 简介 NumPy&#xff08;Numerical Python的简称&#xff09;是Python语言的一个基础科学计算库&#xff0c;广泛应用于数据分析、机器学习、科学计算和工程领域。NumPy的核心是其强大的N维数组对象ndarray&#xff0c;它为Pytho…

医疗图像处理2023:Transformers in medical imaging: A survey

医学成像中的transformer:综述 目录 一、介绍 贡献与安排 二、CNN和Transformer 1.CNN 2.ViT 三、Transformer应用于各个领域 1.图像分割 1&#xff09;器官特异性 ①2D ②3D 2&#xff09;多器官类别 ①纯transformer ②混合架构 单尺度 多尺度 3&#xff09;…