The following briefly introduces the application examples of the memcached class, which has certain reference value. Interested friends can refer to it.
1. Introduction to memcached
On many occasions, we will hear the name memcached, but many students have only heard of it and have not used it or actually understood it. They only know that it is a very good thing. Here is a brief introduction: memcached is an efficient and fast distributed memory object caching system, mainly used to accelerate WEB dynamic applications.
2. Memcached installation
The first step is to download memcached. The latest version is 1.1.12. You can download memcached-1.1.12.tar.gz directly from the official website. In addition, memcached uses libevent, and I downloaded libevent-1.1a.tar.gz.
The next step is to unpack, compile and install libevent-1.1a.tar.gz and memcached-1.1.12.tar.gz respectively:
# tar -xzf libevent-1.1a.tar.gz
# cd libevent-1.1a
# ./configure --prefix=/usr
#make
# make install
# cd ..
# tar -xzf memcached-1.1.12.tar.gz
# cd memcached-1.1.12
# ./configure --prefix=/usr
#make
# make install
After the installation is complete, memcached should be in /usr/bin/memcached.
3. Run the memcached daemon
Running the memcached daemon is very simple, just a command line, no need to modify any configuration files (there are no configuration files for you to modify):
/usr/bin/memcached -d -m 128 -l 192.168.1.1 -p 11211 -u httpd
Parameter explanation:
Of course, there are other parameters that can be used. You can see them by running man memcached.
4. How memcached works
First of all, memcached runs in one or more servers as a daemon, accepting client connection operations at any time. Clients can be written in various languages. Currently known client APIs include Perl/PHP/Python/Ruby/Java /C#/C etc. After PHP and other clients establish a connection with the memcached service, the next thing is to access objects. Each accessed object has a unique identifier key. Access operations are performed through this key and saved to memcached. The objects in are actually placed in memory, not stored in cache files, which is why memcached can be so efficient and fast. Note that these objects are not persistent, and the data inside will be lost after the service is stopped.
5. How to use PHP as memcached client
There are two ways to use PHP as a memcached client to call the memcached service for object access operations.
First, PHP has an extension called memcache. When compiling under Linux, you need to bring the –enable-memcache[=DIR] option. Under Windows, remove the comment in front of php_memcache.dll in php.ini to make it available. .
In addition, there is another way to avoid the trouble caused by expansion and recompilation, and that is to use php-memcached-client directly.
This article uses the second method. Although the efficiency will be slightly worse than the extension library, it is not a big problem.
6. PHP memcached application example
First download memcached-client.php. After downloading memcached-client.php, you can operate the memcached service through the class "memcached" in this file. In fact, the code call is very simple. The main methods used are add(), get(), replace() and delete(). The method description is as follows:
add ($key, $val, $exp = 0)
Write objects into memcached. $key is the unique identifier of the object. $val is the object data written. $exp is the expiration time in seconds. The default is unlimited time;
get ($key)
Get object data from memcached through the unique identifier $key of the object;
replace ($key, $value, $exp=0)
Use $value to replace the object content with the identifier $key in memcached. The parameters are the same as the add() method. It will only work if the $key object exists;
delete ($key, $time = 0)
Delete the object with the identifier $key in memcached. $time is an optional parameter, indicating how long to wait before deleting.
The following is a simple test code that accesses object data with the identifier 'mykey':
<?php // 包含 memcached 类文件 require_once('memcached-client.php'); // 选项设置 $options = array( 'servers' => array('192.168.1.1:11211'), //memcached 服务的地址、端口,可用多个数组元素表示多个 memcached 服务 'debug' => true, //是否打开 debug 'compress_threshold' => 10240, //超过多少字节的数据时进行压缩 'persistant' => false //是否使用持久连接 ); // 创建 memcached 对象实例 $mc = new memcached($options); // 设置此脚本使用的唯一标识符 $key = 'mykey'; // 往 memcached 中写入对象 $mc->add($key, 'some random strings'); $val = $mc->get($key); echo "n".str_pad('$mc->add() ', 60, '_')."n"; var_dump($val); // 替换已写入的对象数据值 $mc->replace($key, array('some'=>'haha', 'array'=>'xxx')); $val = $mc->get($key); echo "n".str_pad('$mc->replace() ', 60, '_')."n"; var_dump($val); // 删除 memcached 中的对象 $mc->delete($key); $val = $mc->get($key); echo "n".str_pad('$mc->delete() ', 60, '_')."n"; var_dump($val); ?>
是不是很简单,在实际应用中,通常会把数据库查询的结果集保存到 memcached 中,下次访问时直接从 memcached 中获取,而不再做数据库查询操作,这样可以在很大程度上减轻数据库的负担。通常会将 SQL 语句 md5() 之后的值作为唯一标识符 key。下边是一个利用 memcached 来缓存数据库查询结果集的示例(此代码片段紧接上边的示例代码):
<?php $sql = 'SELECT * FROM users'; $key = md5($sql); //memcached 对象标识符 { // 在 memcached 中未获取到缓存数据,则使用数据库查询获取记录集。 echo "n".str_pad('Read datas from MySQL.', 60, '_')."n"; $conn = mysql_connect('localhost', 'test', 'test'); mysql_select_db('test'); $result = mysql_query($sql); while ($row = mysql_fetch_object($result)) $datas[] = $row; // 将数据库中获取到的结果集数据保存到 memcached 中,以供下次访问时使用。 $mc->add($key, $datas); { echo "n".str_pad('Read datas from memcached.', 60, '_')."n"; } var_dump($datas); ?>
可以看出,使用 memcached 之后,可以减少数据库连接、查询操作,数据库负载下来了,脚本的运行速度也提高了。
之前我曾经写过一篇名为《PHP 实现多服务器共享 SESSION 数据》文章,文中的 SESSION 是使用数据库保存的,在并发访问量大的时候,服务器的负载会很大,经常会超出 MySQL 最大连接数,利用 memcached,我们可以很好地解决这个问题,工作原理如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。