Memcached开发(八):使用PHP进行操作

目录

1. 安装与配置

1.1 安装Memcached服务器

1.2 安装PHP的Memcached扩展

2. 基本操作

2.1 连接Memcached服务器

2.2 设置与获取数据

2.3 删除数据

2.4 检查数据是否存在

2.5 添加和替换数据

3. 高级操作

3.1 批量操作

3.2 数据计数器

3.3 CAS(Check and Set)

3.4 持久连接

3.5 压缩数据

4. 性能优化

4.1 使用一致性哈希

4.2 增加服务器节点

4.3 使用内存优化选项

4.4 调整PHP的Memcached配置

5. 错误处理与调试

5.1 检查操作结果

5.2 启用详细日志

5.3 使用Memcached的统计信息

6. 示例

6.1 缓存数据库查询结果

6.2 缓存API响应

7. 代码示例与项目实战

7.1 简单的PHP缓存类

7.2 完整的Web应用缓存示例

8. 总结


Memcached是一种高性能的分布式内存对象缓存系统,广泛应用于加速动态Web应用程序。PHP作为一种流行的服务器端脚本语言,与Memcached的结合可以极大地提升Web应用程序的性能。在本章中,我们将详细介绍如何在PHP中使用Memcached,包括安装和配置、基本操作、进阶技巧和性能优化等内容。

1. 安装与配置

1.1 安装Memcached服务器

首先,我们需要在服务器上安装Memcached。可以使用包管理工具来安装。

对于Debian/Ubuntu系统:

sudo apt-get update
sudo apt-get install memcached

对于CentOS/RHEL系统:

sudo yum install memcached

安装完成后,启动Memcached服务:

sudo systemctl start memcached
sudo systemctl enable memcached

1.2 安装PHP的Memcached扩展

要在PHP中使用Memcached,需要安装PHP的Memcached扩展。

对于Debian/Ubuntu系统:

sudo apt-get install php-memcached

对于CentOS/RHEL系统:

sudo yum install php-pecl-memcached

安装完成后,重启Web服务器(例如Apache或Nginx)以使扩展生效。

sudo systemctl restart apache2  # For Apache
sudo systemctl restart nginx    # For Nginx

2. 基本操作

2.1 连接Memcached服务器

在PHP中使用Memcached,首先需要创建一个Memcached对象,并连接到Memcached服务器。

<?php
$memcached = new Memcached();
$memcached->addServer('localhost', 11211);

2.2 设置与获取数据

可以使用set方法将数据存储到Memcached中,并使用get方法从Memcached中获取数据。

<?php
// 设置数据
$memcached->set('key', 'value', 60); // 60秒后过期// 获取数据
$value = $memcached->get('key');
echo $value; // 输出 'value'

2.3 删除数据

使用delete方法可以从Memcached中删除数据。

<?php
// 删除数据
$memcached->delete('key');

2.4 检查数据是否存在

可以使用get方法结合false检查数据是否存在。

<?php
$value = $memcached->get('key');
if ($value === false) {echo '数据不存在或已过期';
} else {echo '数据存在:' . $value;
}

2.5 添加和替换数据

使用add方法可以在键不存在时设置数据,使用replace方法可以在键存在时替换数据。

<?php
// 添加数据(仅当键不存在时生效)
$memcached->add('key', 'new_value', 60);// 替换数据(仅当键存在时生效)
$memcached->replace('key', 'replaced_value', 60);

3. 高级操作

3.1 批量操作

Memcached支持批量设置和获取数据。

<?php
// 批量设置数据
$memcached->setMulti(['key1' => 'value1','key2' => 'value2','key3' => 'value3'
], 60);// 批量获取数据
$values = $memcached->getMulti(['key1', 'key2', 'key3']);
print_r($values);

3.2 数据计数器

Memcached支持对数值进行增减操作。

<?php
// 设置计数器
$memcached->set('counter', 0);// 增加计数器
$memcached->increment('counter', 1); // 增加1// 减少计数器
$memcached->decrement('counter', 1); // 减少1// 获取计数器值
$counter = $memcached->get('counter');
echo $counter; // 输出当前计数器值

3.3 CAS(Check and Set)

CAS操作允许你在设置数据前检查其版本,确保数据的一致性。

<?php
// 获取数据和CAS token
$value = $memcached->get('key', null, $cas_token);// 更新数据,使用CAS token
$memcached->cas($cas_token, 'key', 'new_value', 60);

3.4 持久连接

Memcached支持持久连接,可以减少连接开销。

<?php
$memcached = new Memcached('persistent_id');
$memcached->addServer('localhost', 11211);

3.5 压缩数据

为了节省内存,可以启用数据压缩。

<?php
$memcached->setOption(Memcached::OPT_COMPRESSION, true);
$memcached->set('key', 'large_value', 60);

4. 性能优化

4.1 使用一致性哈希

一致性哈希可以在增加或删除服务器时减少缓存失效的情况。

<?php
$memcached->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);
$memcached->addServer('server1', 11211);
$memcached->addServer('server2', 11211);

4.2 增加服务器节点

为了提高性能,可以增加Memcached服务器节点,实现负载均衡。

<?php
$memcached->addServer('server1', 11211);
$memcached->addServer('server2', 11211);
$memcached->addServer('server3', 11211);

4.3 使用内存优化选项

可以通过配置Memcached服务器的启动参数来优化内存使用。例如,使用较大的内存池和设置较大的最大对象大小。

memcached -m 1024 -I 2m

4.4 调整PHP的Memcached配置

可以通过php.ini文件调整Memcached扩展的配置参数,例如启用二进制协议和设置连接超时时间。

[memcached]
memcached.sess_binary = On
memcached.sess_connect_timeout = 1000

5. 错误处理与调试

5.1 检查操作结果

在进行Memcached操作后,可以使用getResultCodegetResultMessage方法检查操作结果。

<?php
$memcached->set('key', 'value');
$result_code = $memcached->getResultCode();
$result_message = $memcached->getResultMessage();
echo "Result code: $result_code, Result message: $result_message";

5.2 启用详细日志

可以启用Memcached的详细日志,以便调试和分析问题。

memcached -vv

5.3 使用Memcached的统计信息

可以使用getStats方法获取Memcached服务器的统计信息。

<?php
$stats = $memcached->getStats();
print_r($stats);

6. 示例

6.1 缓存数据库查询结果

在Web应用程序中,缓存数据库查询结果是提高性能的常见方法。

<?php
$query = "SELECT * FROM users WHERE id = 1";
$cache_key = md5($query);// 尝试从缓存获取数据
$data = $memcached->get($cache_key);if ($data === false) {// 缓存未命中,从数据库获取数据$mysqli = new mysqli("localhost", "user", "password", "database");$result = $mysqli->query($query);$data = $result->fetch_assoc();// 将数据存储到缓存$memcached->set($cache_key, $data, 300); // 缓存300秒
}// 使用数据
print_r($data);

6.2 缓存API响应

缓存外部API的响应可以减少对API的请求频率,提高应用程序的响应速度。

<?php
$api_url = "https://api.example.com/data";
$cache_key = md5($api_url);// 尝试从缓存获取数据
$response = $memcached->get($cache_key);if ($response === false) {// 缓存未命中,发起API请求$response = file_get_contents($api_url);// 将响应存储到缓存$memcached->set($cache_key, $response, 600); // 缓存600秒
}// 使用API响应
echo $response;

7. 代码示例与项目实战

7.1 简单的PHP缓存类

我们可以创建一个简单的PHP类来封装Memcached的操作,使其在项目中更易于使用。

<?phpclass Cache
{private $memcached;public function __construct(){$this->memcached = new Memcached();$this->memcached->addServer('localhost', 11211);}public function set($key, $value, $expiration = 60){return $this->memcached->set($key, $value, $expiration);}public function get($key){return $this->memcached->get($key);}public function delete($key){return $this->memcached->delete($key);}public function increment($key, $offset = 1){return $this->memcached->increment($key, $offset);}public function decrement($key, $offset = 1){return $this->memcached->decrement($key, $offset);}public function getStats(){return $this->memcached->getStats();}
}// 使用示例
$cache = new Cache();
$cache->set('key', 'value');
echo $cache->get('key');

7.2 完整的Web应用缓存示例

下面是一个完整的Web应用示例,展示如何在PHP项目中集成Memcached。

<?php
require 'Cache.php';// 数据库连接
$mysqli = new mysqli("localhost", "user", "password", "database");// 缓存实例
$cache = new Cache();// 获取用户数据
function getUser($id)
{global $mysqli, $cache;$cache_key = "user_$id";$user = $cache->get($cache_key);if ($user === false) {$result = $mysqli->query("SELECT * FROM users WHERE id = $id");$user = $result->fetch_assoc();$cache->set($cache_key, $user, 300);}return $user;
}// 显示用户数据
$user = getUser(1);
print_r($user);

8. 总结

在本章中,我们详细介绍了如何在PHP中使用Memcached,包括安装和配置、基本操作、进阶技巧和性能优化等内容。通过这些内容,可以在PHP项目中高效地使用Memcached,提升Web应用程序的性能。

随着对Memcached的深入了解和实践,你会发现它在处理高并发和大数据量的应用场景中具有巨大的优势。在接下来的开发中,结合具体的业务需求和性能要求,灵活运用Memcached的各项功能,将使PHP项目更加高效和稳定。

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

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

相关文章

python运维实战-ssh工具

1. 功能描述 1.1 系统具有的功能描述 &#xff08;1&#xff09;连接服务器&#xff1a;用户可以通过系统连接到远程服务器&#xff0c;系统支持多个服务器配置&#xff0c;并且可以方便地管理这些配置。 &#xff08;2&#xff09;执行命令&#xff1a;用户可以在连接成功后…

RabbitMQ发布确认及交换机类型

RabbitMQ发布确认机制详解 一、引言 在消息队列&#xff08;MQ&#xff09;技术中&#xff0c;RabbitMQ因其稳定性、可靠性和易用性而受到广泛欢迎。为了确保消息的可靠传递&#xff0c;RabbitMQ提供了一系列高级特性&#xff0c;其中发布确认&#xff08;Publisher Confirms&…

配置kali 的apt命令在线安装包的源为国内源

目录 一、安装VMware Tools 二、配置apt国内源 一、安装VMware Tools 点击安装 VMware Tools 后&#xff0c;会加载一个虚拟光驱&#xff0c;里面包含 VMware Tools 的安装包 鼠标右键单击 VMware Tools 的安装包&#xff0c;点击复制到 点击 主目录&#xff0c;再点击选择…

C语言 ——— 写一个函数,调整 整型数组 中 奇数偶数的顺序

目录 题目要求 代码实现 题目要求 创建一个整型数组 自定义函数实现&#xff1a;调整该数组中数字的顺序&#xff0c;使得数组中所有的奇数位于数组的前半部分&#xff0c;数组中所有的偶数位于数组的后半部分 举例&#xff1a; 输入的整型数组为&#xff1a;[234,24,45,…

SQLite 合并两个表格

表格结构 在进行表格合并之前&#xff0c;我们需要确保两个要合并的表格具有相同的结构。这意味着两个表格应具有相同的列数和相同的列名。例如&#xff0c;我们有两个表格table1和table2&#xff0c;它们有相同的结构如下&#xff1a; table1 ----------------- | ID | Name…

TCP协议的相关特性

目录 首先先了解TCP和UDP协议的特点 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09; UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议&#xff09; TCP的六个标志位 确认应答 超时重传 连接管理(三次握手,四次挥…

十四、正则表达式

文章目录 学习目标一、正则表达式的介绍二、正则查找相关的方法三、re.Match类四、re.compile 方法的使用五、正则修饰符六、正则表达式6.1 正则表达式规则6.2 标点符号的特殊含义6.3 字母的特殊含义七、正则替换八、贪婪模式和非贪婪模式学习目标 能够描述什么是正则表达式能够…

Python爬虫(基本流程)

1. 确定目标和范围 明确需求&#xff1a;确定你需要从哪些网站抓取哪些数据。合法性&#xff1a;检查目标网站的robots.txt文件&#xff0c;了解哪些内容可以被抓取。数据范围&#xff1a;确定爬取数据的起始和结束点&#xff0c;比如时间范围、页面数量等。 2. 选择合适的工…

科研绘图系列:R语言微生物堆积图(stacked barplot)

介绍 堆叠条形图是一种数据可视化图表,它通过将每个条形分割成多个部分来展示不同类别的数值。每个条形代表一个总体数据,而条形内的每个部分则代表该总体数据中不同子类别的数值。这种图表特别适合展示整体与部分的关系,以及各部分在整体中的比例。 特点: 多部分条形:每…

框架设计MVP

重点&#xff1a; 1.presenter里面包含view和model 2.和MVC不同的是View和Model之间不进行交互 3.view包含presenter,view通过presenter反向处理逻辑。 链接&#xff1a; MVP简单实现_安卓mvp presenter-CSDN博客 Model.h #pragma once //Model数据处理器 class Model { …

动漫风格动漫404网站维护HTML源码

源码介绍 动漫风格动漫404网站维护HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面 效果预览 源码下载 动漫风格动漫404网站维护HTML源码

GSAP动画魔法:解锁网页设计的无限创意与动感

GSAP&#xff08;GreenSock Animation Platform&#xff09;是一个强大的JavaScript动画库&#xff0c;用于在Web应用程序中创建高性能和复杂的动画效果&#xff0c;其提供了一套丰富的API和工具&#xff0c;使开发者能够轻松地创建流畅、交互式的动画&#xff0c;涵盖了从简单…

Shader入门精要总结(一)渲染流水线

渲染流水线的最终目的在于生成或者说是渲染一张二维纹理&#xff0c;即我们在电脑屏幕上看到的所有效果。 流水线主要分成三个阶段&#xff1a;应用阶段&#xff0c;几何阶段&#xff0c;光栅化阶段。&#xff08;概念&#xff09; 一.概述 1. 应用阶段 这个阶段由应用主导&am…

Debian Linux下rclone挂载谷歌云盘碰到的坑

可能是明月好久没有使用境外服务器挂载境外的云盘缘故吧,今天一个代维客户需要他的Linux服务器挂载谷歌云盘好进行云备份,本来是个很简单的事儿,没想到在rclone连接谷歌云盘的时候卡壳了,可是把明月给难为坏了,搜索到的简体中文教程倒是很多,但没有一个提到这个“坑”,最…

【C++】位运算与相关算法问题

1.基础的位运算 在位运算中&#xff0c;比较重要的就是1.按位与&#xff08;&&#xff09;&#xff0c;2.按位或&#xff08;|&#xff09;&#xff0c;3.按位异或&#xff08;^&#xff09;。 &&#xff1a;有0则为0。 |&#xff1a;有1则为1。 ^&#xff1a;&…

秋招突击——7/20——科大讯飞笔试相关——提前{图像叠加、世界杯积分问题、直角三角形个数}——正式{持续输出中位数,二次幂和三次幂的序列表示}

文章目录 引言提前图像叠加世界杯积分问题个人实现参考实现 直角三角形个数个人实现 正式等待时间期望值中位数输出个人实现 二次幂和三次幂序列个人实现 总结 引言 昨天用了牛客网做了一下作业帮的笔试&#xff0c;做的一塌糊涂&#xff0c;但是提醒我要练习使用牛客网的环境…

HJ99 自守数

HJ99 自守数 描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如&#xff1a;25^2 625&#xff0c;76^2 5776&#xff0c;9376^2 87909376。请求出n(包括n)以内的自守数的个数 数据范围&#xff1a; 1≤&#x1d45b;≤10000 1≤n≤10000 输入描述&#xff1a; i…

基于Matlab的数据可视化

基于Matlab的数据可视化 一、二维图形的绘制&#xff08;一&#xff09;基本图形函数&#xff08;1&#xff09;plot函数&#xff08;2&#xff09;fplot函数&#xff08;3&#xff09;其他坐标系的二维曲线 &#xff08;二&#xff09;图形属性设置&#xff08;1&#xff09;线…

c++应用网络编程之四Linux常用的网络IO模型

一、网络IO模型的实际应用 在前面学习了基本的网络IO模型&#xff0c;那么这种抽象的网络IO模型如何在实际的编程中应用呢&#xff1f;这其实就是理论与实际如何产生联系的一个过程。在现实世界中&#xff0c;有了理论的指导&#xff0c;下一步就是要把相关的理论如何与具体的…

Linux网络:应用层协议HTTP(一)

一、什么是HTTP协议 虽然我们说, 应用层协议是我们程序猿自己定的. 但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. HTTP(超文本传输协议)就是其中之一。 在互联网世界中&#xff0c;HTTP&#xff08;HyperText Transfer Protocol&…