日期:2014-05-17  浏览次数:20462 次

PHP之Memcached和ttserver

以前只是会用memcached做防刷控制,最近看了一些博客文章和公司一些项目对其了解加深了一步,写个笔记。

?

PHP提供的有memcache和memcached,至于他们的区别,建议看PHP模块:Memcached > Memcache这篇文章就有明了了。

?

什么是Memcached?
Memcached是国外社区网站 LiveJournal 的开发团队开发的高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

?

?

我们知道PHP的memcached中有Memcached::addServers()向服务器池中增加servers参数指定的服务器。Memcache 客户端使用 addServer 服务器池时,是根据“crc32(key) % current_server_num”哈希算法将 key 哈希到不同的服务器的,PHP、C 和 python 的客户端都是如此的算法。Memcache 客户端的 addserver 具有故障转移机制,当 addserver 了2台 Memcached 服务器,而其中1台宕机了,那么 current_server_num 会由原先的2变成1。

?

下面我们就来测试一下分布式,你也许说我没有那么多机子,可以参照memcached的分布式应用,

?

?

PHP与Memcache分布式

在一台或者多台机器启用一个或者多个进程,这里是在一台机器启用两个进程,使用两个端口:
# /usr/local/bin/memcached -p 11211 -d -u nobody
# /usr/local/bin/memcached -p 11212 -d -u nobody

PHP 测试代码
<?php
//连接Memcache
$mem = new Memcache;
$mem->addServer("localhost", 11211);
$mem->addServer("localhost", 11212);

$mem->add('key1', 1);
$mem->add('key2', 2);
$mem->add('key3', 3);
$mem->add('key4', 4);
?

然后在我们memcache pecl中的memcache.php来看着写值得分布,你就可以看出端倪了。(prc中也apc.php,以前不知道还想自己写一个的)

?

?

有关ttserver的,请参考

?

?

Tokyocabinet/Tokyotyrant文档大合集

任何Memcached客户端均可直接调用tokyotyrant。

?

这里让我迷路了,我们常说的memcached是memcached.org实现的,Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统,对任何原有Memcached客户端来讲,可以将Tokyo Tyrant看成是一个Memcached,但是,它的数据是可以持久存储的。这一点,跟新浪的Memcachedb性质一样。这里的意思ttserver支持memcached协议,我只需要启动ttserver就可以通过使用php的memcache来使用(只需启动ttserver即可,不用启动memcache),这是我粗俗的理解。

?

?

想要深入的理解请参考http://www.google.com/cse/home?cx=016088334967758658265:ej58ey2f_s0这个自定义google引擎中有关memcache的文章。还有一些别人翻译文档。

?

准备写一个类似apc.php的ttserver的监控...