话说PHP的Memcache & Memcached这两个扩展之间的关系,你都摸清楚了吗?

原创
移动开发 开发 后端
Memcached是程序员常用的缓存系统,但是在PHP里面,我们发现有两个扩展能够完成这个功能,即Memcache和Memcached扩展,那么这两个扩展的关系是什么呢?它们会不会是同一个扩展呢?我们在本文将一一揭晓。

【51CTO.com原创稿件】Memcached是一个免费开源的、高性能的、分布式内存缓存系统,对于很多WEB程序员来说,对它应该非常熟悉,很多WEB程序员经常用它将数据库里面的数据缓存起来从而提供网站或者应用的性能,而PHP作为网站开发的热门语言,肯定也是支持Memcached的,但是当我们打开PHP的官方手册,发现一个有趣的情况,就是PHP有两个扩展提供了类似的功能,它们就是Memcache和Memcached扩展,这两个扩展的关系是什么?以及两个扩展是不是相同的?带着这些问题,下面我们就来一一进行分析。

一些基本的概念

其实,Memcached就是一个C/S应用,所以有下面两个基本概念:

  • Memcached服务端。就是真正提供数据缓存的应用端,这个端是一个独立的进程,并且开放相应端口供Memcached客户端对数据进行增删改查等等操作。
  • Memcached客户端。只要是能够与Memcached服务端进行通讯、并且完成相应的数据操作功能,我们都可以称之为Memcached客户端,比如本文说的PHP两个扩展,都可以称之为客户端。

两个扩展的相关知识和运行原理

在pecl官方扩展库,我们能够看到,Memcache扩展的生日是2004年2月26日,而Memcached扩展的生日是2009年1月29日,哈哈,看着这两个生日,大家是不是想到了什么呢?

从上面的生日,我们能够看到,Memcache是先出生的,而Memcached是后出生的,下面我们再来看看二者的定义:

  • Memcache扩展。该扩展是一个提供了面向过程和面向对象两种方式的扩展。
  • Memcached。这个扩展使用libmemcached库与Memcached服务程序进行通信。

看了两个扩展的定义,越来越有意思了,我们似乎离真相越来越近了,只不过还差一步,就是这个libmemcached到底是什么,我们接着思考这个问题,继续打开Memcached的官方文档,我们不难发现,其实这个libmemcached就是Memcached提供的官方客户端,换句话说,php的Memcached扩展其实就是一个二次封装扩展,该扩展站在官方提供的客户端扩展的肩上,所以提供的功能肯定就多,而反观Memcache扩展仅仅是PHP自己实现的一套Memcached扩展库而已,说到这里,想必很多PHP程序员应该明白了,为什么我们不再提倡使用Memcache扩展的原因,下图是两个扩展的工作原理。

memcached

 

在PHP里面还有一个特殊的扩展

上面分析了两个扩展,其实这两个扩展的情况在PHP里面并不是***的,在PHP里面还有一个知识点和这个情况是一样的,它就是我们接下来要说的Mysqlnd和libmysqlclient。

 

通过前面的分析,我们不难想到,libmysqlclient其实就是MySQL数据库官方提供的MySQL编程客户端,而Mysqlnd其实就是PHP自己实现的MySQL编程客户端,它不是站在libmysqlclient的肩上进行二次开发的,它是用C语言编写的。

msyql

其实,Memcached不仅仅支持PHP语言,还支持C、C++、Java、MySQL、Python、Nodejs等等,通过上面的Memcache扩展,我们知道,只要按照它提供的协议,很容易实现自己领域编程语言的Memcached客户端,说了这么多,不知道你是否已经彻底明白了二者的关系,如果还有不明白的,可以在评论里面进行互动。也可以加群讨论(Q群号312724475

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

责任编辑:何星 来源: 51CTO
相关推荐

2020-02-27 14:05:26

SQLServer数据库

2020-08-18 08:22:46

归并排序

2021-05-11 16:44:42

Windows工具软件

2018-05-08 06:34:31

2020-08-25 20:42:48

Windows 10Windows蓝屏

2020-12-10 10:32:33

区块链比特币数字货币

2020-08-14 08:13:49

列表差异编程

2021-12-16 16:20:57

GoWebSocketLinux

2022-09-16 07:24:12

Python 的四舍

2023-09-12 08:19:48

接口Controller线程

2021-12-02 07:50:30

字节缓冲流使用

2022-02-21 23:08:50

Kubernetes集群容器

2021-09-13 13:05:05

Redis数据库内存

2021-03-15 09:44:39

Broker源码RocketMQ

2018-03-21 12:13:47

工具数据开发

2018-06-21 11:03:54

shelllinux命令

2022-06-23 08:01:48

hookSetMap

2023-01-13 16:57:50

SpringBoot配置核心

2011-04-15 09:47:38

IntentActivityAndroid

2021-12-02 05:56:58

SpringMVC核心组件
点赞
收藏

51CTO技术栈公众号