《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》第3章Memcached应用实战,本章主要介绍Memcached的特征、运行原理和使用经验。Memcached是一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,进而提升系统性能。本节为大家介绍Memcached的简单使用过程。
3.1.4 Memcached的简单使用过程
前面已经提到过,许多语言都实现了Memcached的客户端,目前应用最多的是通过Perl、PHP实现对Memcached的操作。这里以Perl的Cache::Memcached为例简要说明使用Memcached的过程。Perl的Cache::Memcached在CPAN上对应的地址为:http://search.cpan.org/dist/CacheMemcached/。
通过Cache::Memcached连接Memcached的示例代码如下:
- #!/usr/bin/perl
- use Cache::Memcached;
- my $key = "test";
- my $value = "HelloWorld!";
- my $expires = 120;
- my $memcached = Cache::Memcached->new({
- servers => ["127.0.0.1:11211"],
- compress_threshold => 100
- });
- $memcached->add($key, $value, $expires);
- my $return = $memcached->get($key);
- print "$return\n";
Cache::Memcached的常用选项如下:
servers,用数组指定连接Memcached服务器的IP地址和端口号。
compress_threshold, 启用数据压缩时使用的值。
namespace,指定添加到键的前缀。
另外,利用Cache::Memcached可以将Perl的复杂数据序列化之后再保存,所以能直接将散列、数组、对象都保存到Memcached的缓存中。
1.向Memcached存数据的方法
向Memcached存数据的方法有set、add和replace,这些方法的使用方式相同。
- my $add = $memcached->add( ‘键', ‘值', '过期时间' );
- my $replace = $memcached->replace( '键', ‘值', '过期时间' );
- my $set = $memcached->set( '键', '值', ‘过期时间' );
向Memcached存数据时可以指定过期时间(秒),若不指定过期时间,Memcached则按照LRU算法保存存入的数据。但这三个方法有一些区别:
set, 无论在什么情况下都保存写入的数据。
add,仅当存储空间中不存在key相同的数据时才保存。
replace,仅当存储空间中存在key相同的数据时才保存。
2.获取数据的方法
可以使用get和get_multi方法来获取数据,使用方法如下:
- my $value = $memcached->get(‘键');
- my $value = $memcached->get_multi(‘键1', '键2', ‘键3');
如果想一次获取多条数据,可以使用get_multi方法。利用get_multi方法可以非同步地同时取得多个键值,其速度要比循环调用get方法快很多倍。
3.删除数据方法
删除数据可以使用delete方法。
- $memcached->delete('键', '阻塞时间(秒)');
第一个参数指定要删除的数据的键,第二个参数指定一个时间值,以禁止使用同样的键保存新数据,这个功能可以防止缓存数据的不完整。但是set 方法忽视该阻塞,会继续保存数据。
4.加一和减一方法
可以把Memcached上某一个特定的键值作为计数器使用。
- my $return = $memcached->incr('键');
- $memcached->add('键', 0) unless defined $return;
加一和减一都属于原子操作,进行这两个操作时若未对键值设置初始值,则不会自动将初始值赋为0。因此,应当进行错误检查,必要时加入初始化操作。