MemCache 安装手册  
wget http://download.tangent.org/libmemcached-0.34.tar.gz
wget http://memcached.googlecode.com/files/memcached-1.4.1.tar.gz
wget  http://www.monkey.org/~provos/libevent-1.2.tar.gz

1、安装libevent
tar zxvf libevent-1.2.tar.gz
cd libevent-1.2
./configure -prefix=/usr/libevent
make
make install

2、安装memcache
tar -zxvf memcached-1.4.1.tar.gz
cd memcached-1.4.1
./configure -with-libevent=/usr/libevent/ -prefix=/usr/local/memcached
make
make install

 

3、安装libmemcached
 
wget http://download.tangent.org/libmemcached-0.34.tar.gz
tar xvzf libmemcached-0.34.tar.gz
cd libmemcached-0.34
./configure --prefix=/usr/local/libmemcached --with-memcached=/usr/local/memcached

./configure的时候,如果你的Memcached不是默认安装路径的话,会报

configure: error: “could not find memcached binary”

错,如下的类似的命令可以解决这个问题。

./configure --prefix=/usr/local/libmemcached --with-memcached=/usr/local/memcached/bin/memcached


make
make install
chmod 777 /etc/ld.so.conf
echo "/usr/local/libmemcached" >> /etc/ld.so.conf
ldconfig

 

 

4、安装memcached_functions_mysql
wget http://download.tangent.org/memcached_functions_mysql-0.9.tar.gz
tar zxvf memcached_functions_mysql-0.9.tar.gz
cd memcached_functions_mysql-0.9
./configure --prefix=/usr/local/memcache_mysql --with-mysql=/usr/local/mysql/bin/mysql_config --with-libmemcached=/usr/local/libmemcached

make; make install

 


cp /usr/local/memcache_mysql/lib/libmemcached_functions*   /usr/local/mysql/lib/mysql/plugin
5)添加memcache UDF 函数
mysql> source sql/install_functions.sql

这样我们就可以使用mysql memcached UDF 了,我们可以通过下面语句查看是否已经正常安装
mysql> select * from mysql.func;


添加trigger,就是向memcache内insert,update,deletel等,参照:
1)memcached_functions_mysql-0.9/sql 目录下的trigger_fun.sql
2)或者文档:http://dev.mysql.com/doc/refman/5.1/en/ha-memcached-interfaces-mysqludf.html
如果懒得看就看我后边的例子
3 测试

 

/usr/local/memcached/bin/memcached -m 110m -u root -p 11211 -d -P -t 200 /var/run/memcached1.pid

64位会报以下的错误:
/usr/local/memcached/bin/memcached: error while loading shared libraries: libevent-1.2.so.1: cannot open shared object file: No such file or directory
解决:ln -s /usr/libevent/lib/libevent-1.2.so.1 /usr/lib64/libevent-1.2.so.1

 

mysql> select memc_servers_set('127.0.0.1:11211')
注意:如果mysql restart,需要重新运行这句以建立与memcached之间的关系
mysql> select memc_servers_behavior_set('MEMCACHED_BEHAVIOR_NO_BLOCK','1');
+--------------------------------------------------------------+
| memc_servers_behavior_set('MEMCACHED_BEHAVIOR_NO_BLOCK','1') |
+--------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select memc_servers_behavior_set('MEMCACHED_BEHAVIOR_TCP_NODELAY','1');
+-----------------------------------------------------------------+
| memc_servers_behavior_set('MEMCACHED_BEHAVIOR_TCP_NODELAY','1') |
+-----------------------------------------------------------------+
| 0 |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)

 

注意:设置MEMCACHED_BEHAVIOR_NO_BLOCK为打开状态,这样在memcached出现问题时(不能连接时)
数据继续插入到mysql中,报错提示,如果不设置此值,如果memcached失败,mysql需要等到timeout
才可以插入到表中。
mysql> use test;
Database changed
 
mysql> create table xxd (id int, value varchar(100));   
mysql> create trigger xxdmmci after insert on xxd for each row set @tmp = memc_set(NEW.id, NEW.value);
mysql> create trigger xxdmmcu after update on xxd for each row set @tmp = memc_set(NEW.id, NEW.value);
mysql> create trigger xxdmmcd before delete on xxd for each row set @tmp = memc_delete(OLD.id);
mysql> insert into xxd values(1, 'xxd'),(2,'xxd79'),(3, 'buro79xxd');        
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> select memc_get('2');
+----------------------------+
| memc_get('2')              |
+----------------------------+
| xxd79 |
+----------------------------+
1 row in set (0.00 sec)
mysql> update xxd set value='xxd_new' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select memc_get('1');
+----------------------------+
| memc_get('1')              |
+----------------------------+
| xxd_new |
+----------------------------+
1 row in set (0.00 sec)
mysql> delete from xxd where id=1;
Query OK, 1 row affected (0.00 sec)
 
mysql> select memc_get('1');
+----------------------------+
| memc_get('1')              |
+----------------------------+
| NULL |
+----------------------------+
1 row in set (0.00 sec)
mysql> exit
$ telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get 1
END
get 2
VALUE 2 0 5
xxd79
END
get 3
VALUE 3 0 9
buro79xxd
END
quit
Connection closed by foreign host.
--EOF--
(1). 下载安装 lib_mysqludf_json 修改版:

  以下安装包适合32位Linux操作系统:

wget http://mysql-udf-http.googlecode.com/files/lib_mysqludf_json-i386.tar.gz
tar zxvf lib_mysqludf_json-i386.tar.gz
cd lib_mysqludf_json-i386/
# 如果你的MySQL安装路径不是/usr/local/webserver/mysql/,请修改以下路径。
cp -f lib_mysqludf_json.so /usr/local/webserver/mysql/lib/mysql/plugin/lib_mysqludf_json.so
cd ../

 

  以下安装包适合64位Linux操作系统:

wget http://mysql-udf-http.googlecode.com/files/lib_mysqludf_json-x86_64.tar.gz
tar zxvf lib_mysqludf_json-x86_64.tar.gz
cd lib_mysqludf_json-x86_64/
# 如果你的MySQL安装路径不是/usr/local/webserver/mysql/,请修改以下路径。
cp -f lib_mysqludf_json.so /usr/local/webserver/mysql/lib/mysql/plugin/lib_mysqludf_json.so
cd ../

 

  通过命令行登陆进入MySQL:

/usr/local/webserver/mysql/bin/mysql -S /tmp/mysql.sock


  mysql>
create function lib_mysqludf_json_info returns string soname 'lib_mysqludf_json.so';  
create function json_array returns string soname 'lib_mysqludf_json.so'; 
create function json_members returns string soname 'lib_mysqludf_json.so'; 
create function json_object returns string soname 'lib_mysqludf_json.so';
create function json_values returns string soname 'lib_mysqludf_json.so';
create function lib_mysqludf_json_info returns string soname 'lib_mysqludf_json.so';
create function json_array returns string soname 'lib_mysqludf_json.so';
create function json_members returns string soname 'lib_mysqludf_json.so';
create function json_object returns string soname 'lib_mysqludf_json.so';
create function json_values returns string soname 'lib_mysqludf_json.so';  
lib_mysqludf_json的详细用法请访问:http://www.mysqludf.org/lib_mysqludf_json/

(2). 创建测试表

  mysql>

SET NAMES UTF8;  

USE test;  

CREATE TABLE IF NOT EXISTS `mytable` (  
`id` int(10) NOT NULL AUTO_INCREMENT, 
`addtime` int(10) NOT NULL,  
`title` varchar(255) CHARACTER SET utf8 NOT NULL,
 PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1; 
SET NAMES UTF8;
USE test;
CREATE TABLE IF NOT EXISTS `mytable` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `addtime` int(10) NOT NULL,
  `title` varchar(255) CHARACTER SET utf8 NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
  (3). 为测试表创建触发器:

  mysql>

/* INSERT插入操作的触发器 */  

DELIMITER |  

DROP TRIGGER IF EXISTS mytable_insert;  
CREATE TRIGGER mytable_insert 
AFTER INSERT ON mytable 
FOR EACH ROW BEGIN 
SET @tt_json = (SELECT json_object(id,addtime,title) FROM mytable WHERE id = NEW.id LIMIT 1); 
SET @tt_resu = (SELECT http_put(CONCAT('http://192.168.8.34:1978/', NEW.id), @tt_json));  
END |
DELIMITER ;  


/* UPDATE更新操作的触发器 */  
DELIMITER |  
DROP TRIGGER IF EXISTS mytable_update; 
CREATE TRIGGER mytable_update  
AFTER UPDATE ON mytable  
FOR EACH ROW BEGIN
SET @tt_json = (SELECT json_object(id,addtime,title) FROM mytable WHERE id = OLD.id LIMIT 1); 
  SET @tt_resu = (SELECT http_put(CONCAT('http://192.168.8.34:1978/', OLD.id), @tt_json));  
END | 
DELIMITER ;  
 
/* DELETE删除操作的触发器 */  
DELIMITER |  
DROP TRIGGER IF EXISTS mytable_delete; 
CREATE TRIGGER mytable_delete 
AFTER DELETE ON mytable 
FOR EACH ROW BEGIN
 SET @tt_resu = (SELECT http_delete(CONCAT('http://192.168.8.34:1978/', OLD.id))); 
END |  
DELIMITER ; 
/* INSERT插入操作的触发器 */
DELIMITER |
DROP TRIGGER IF EXISTS mytable_insert;
CREATE TRIGGER mytable_insert
AFTER INSERT ON mytable
FOR EACH ROW BEGIN
    SET @tt_json = (SELECT json_object(id,addtime,title) FROM mytable WHERE id = NEW.id LIMIT 1);
    SET @tt_resu = (SELECT http_put(CONCAT('http://192.168.8.34:1978/', NEW.id), @tt_json));
END |
DELIMITER ;

/* UPDATE更新操作的触发器 */
DELIMITER |
DROP TRIGGER IF EXISTS mytable_update;
CREATE TRIGGER mytable_update
AFTER UPDATE ON mytable
FOR EACH ROW BEGIN
    SET @tt_json = (SELECT json_object(id,addtime,title) FROM mytable WHERE id = OLD.id LIMIT 1);
    SET @tt_resu = (SELECT http_put(CONCAT('http://192.168.8.34:1978/', OLD.id), @tt_json));
END |
DELIMITER ;

/* DELETE删除操作的触发器 */
DELIMITER |
DROP TRIGGER IF EXISTS mytable_delete;
CREATE TRIGGER mytable_delete
AFTER DELETE ON mytable
FOR EACH ROW BEGIN
    SET @tt_resu = (SELECT http_delete(CONCAT('http://192.168.8.34:1978/', OLD.id)));
END |
DELIMITER ;
  (4). 将 MySQL 表和 Tokyo Tyrant 关联进行查询:

  mysql>
SELECT id,addtime,title,http_get(CONCAT('http://192.168.8.34:1978/',id)) AS tt FROM mytable ORDER BY id DESC LIMIT 0,5; 
SELECT id,addtime,title,http_get(CONCAT('http://192.168.8.34:1978/',id)) AS tt FROM mytable ORDER BY id DESC LIMIT 0,5;

--------------------------------------------------------------------------------

  5. 如何删除mysql-udf-http UDF函数:

  mysql>
drop function http_get;  
drop function http_post;  
drop function http_put;  
drop function http_delete; 
drop function http_get;
drop function http_post;
drop function http_put;
drop function http_delete;

 

 

以上为详细安装!!!

 

 

 

 

 

mysql触发器(trigger)操作memcache .
2011-06-24 14:30 220人阅读 评论(0) 收藏 举报
安装遇到的问题:

对memcache的操作一般都是放程序里面去操作的,新增,更新,删除什么的。如果能利用mysql来对memcache进行操作,那就更好,代码端就会简单一点。但是利用mysql来操作memcache,比较适合实现简单的方式。下面说一下安装的过程和遇到的问题,在看安装过程的之前,我觉得应当先看一下,我安装时候所遇到的问题,这样你可以避免掉,少走一点弯路。

一,安装所要的软件

mysql5.1以上版本:http://downloads.mysql.com/archives/

libevent下载:wget  http://www.monkey.org/~provos/libevent-1.2.tar.gz

libmemcached下载:http://download.tangent.org/

memcached下载:http://www.danga.com/memcached/

memcached_functions_mysql下载:http://download.tangent.org/

 

二,mysql的安装

mysql的安装方式有很多,你可以用系统的软件管理包来安装,不同的linux版本,软件管理工具是不一样的。

redhat,centos 有yum,ubuntu 有apt-get ,arch有pacman等。用系统自带的管理工具安装比较简单。如果是自己下载怎么安装的呢,mysql的官方网站提供了三种mysql的安装源码,一种是.rpm的,一种是二进制的,一种是要自己编译的。

1,用rpm来按装

01.rpm -i MySQL-server-VERSION.i386.rpm  
02.rpm -i MySQL-client-VERSION.i386.rpm  
2,二进制包进行安装

二进制包安装有一个缺点,就是要安装到什么地方,都是死的。安装过程中有问题的,查看一下是不是装了glibc,以及版本是不是太低了。

01.groupadd mysql  
02.useradd -g mysql mysql  
03.tar zxvf /path/to/mysql-VERSION-OS.tar.gz -C /usr/local  
04.cd /usr/local  
05.mv mysql-VERSION-OS ./mysql  
06.cd /usr/local/mysql  
07.scripts/mysql_install_db        --user=mysql  
08.chown  -R mysql:mysql /usr/local/mysql  
09.bin/mysqld_safe --user=mysql        &  
3,源码自己编译

01.groupadd mysql  
02.useradd -g mysql mysql  
03.tar zxvf /path/to/mysql-VERSION-OS.tar.gz  
04.cd /mysql-VERSION-OS  
05../configure --prefix=/usr/local/mysql  //路径可自定义   
06.make && make install  
07.cp support-files/my-medium.cnf /etc/my.cnf  
08.cd /usr/local/mysql  
09.bin/mysql_install_db --user=mysql  
10.chown  -R mysql:mysql /usr/local/mysql  
11.bin/mysqld_safe --user=mysql &  
安装遇难问题:安装mysql至少要5.1版本以上的,服务器端,还是客户端都要,装完memcached_functions_mysql后,调用libmemcached模块时会报错的。

[root@BlackGhost sql]#  /usr/local/mysql/bin/mysql <install_functions.sql
ERROR 1126 (HY000) at line 1: Can't open shared library 'libmemcached_functions_mysql.so' (errno: 22 /usr/local/mysql/lib/mysql/plugin/libmemcached_functions_mysql.so: undefined symbol: memcached_string_append)

上面是用mysqld_safe来启动mysql的,也可以用mysql.server来启动,它在/usr/local/mysql/share/mysql 下面,你也可以把mysql.server考到开机启动的目录下面,并且重命名为mysqld

[root@BlackGhost mysql]# ./mysql.server stop
Shutting down MySQL.. SUCCESS!
[root@BlackGhost mysql]# ./mysql.server start
Starting MySQL. SUCCESS!

二,关于libevent和memcached的安装

1.deb

Debian 系直接 $  sudo apt-get install memcached   都搞定,不然还需要分别安装libevent与memcached

2.源码安装

 

wget  http://www.monkey.org/~provos/libevent-1.2.tar.gz   #下载libevent

1 .查看是否已经安装了libevent,一般情况下,装系统的时候libevent就会装进去的。
ls -al /usr/lib | grep libevent

 

[root@BlackGhost etc]# ls -al /usr/lib | grep libevent
lrwxrwxrwx  1 mysql mysql       21 Mar 25  2009 libevent-1.2.so.1 -> libevent-1.2.so.1.0.3
-rwxr-xr-x  1 mysql mysql   208300 Mar 25  2009 libevent-1.2.so.1.0.3
-rw-r--r--  1 mysql mysql   268992 Mar 25  2009 libevent.a
-rwxr-xr-x  1 mysql mysql      820 Mar 25  2009 libevent.la
lrwxrwxrwx  1 mysql mysql       21 Mar 25  2009 libevent.so -> libevent-1.2.so.1.0.3
如果显示上面内容说明你已安装了,就可以跳过第二步。

2 . 先安装libevent:

第一种方法
tar zxvf libevent-1.2.tar.gz
cd libevent-1.2
./configure --prefix=/usr
make
make install

第二种方法

用系统自命的软件管理工具,archlinux用pacman,centos用yum ,大便用apt-get等

[root@BlackGhost etc]# pacman -Ss libevent
core/libevent 1.4.11-1
An event notification library

安装完后在进行第一步,进行测试

3 . 安装memcached服务器端:
tar zxvf memcached-1.2.0.tar.gz
cd memcached-1.2.0
./configure  --with-libevent=/usr    --prefix=/usr/local/memcahced
make
make install
如果有错,请确认一下,local下面有memcahced这个文件夹,以及libevent的安装路径是否正确

4 .启动memcached服务

/usr/local/bin/memcached -d -m 20 -u zhangy -p 11211 -P ./memcached.pid

-d #作为守护进程运行

-m#分配20M的内存

-u #用户是zhangy

-p #监听端口是12000

-P#进程PID存放的位置

[zhangy@BlackGhost ~]$ ps -e|grep memcache
17904 ?        00:00:00 memcached

到此memcached的服务器端已经安装。

 

三,libmemcached的安装

 

 


$ wget  http://download.tangent.org/libmemcached-0.34.tar.gz
$ tar xvzf  libmemcached-0.34.tar.gz
$ cd libmemcached-0.34
$  ./configure --prefix=/usr/local/libmemcached34 --with-memcached=/usr/bin/memcached
$ sudo make
$ sudo make install
$ sudo chmod 777 /etc/ld.so.conf
$ echo "/usr/local/libmemcached34" >> /etc/ld.so.conf
$ ldconfig

 

注意路径不要错了。install_functions.sql定义了一些memcache的操作函数:如下到这儿安装基本上结束,下面我们来测试一下


1.当时我下载的是libmemcached-0.42.tar.gz,安装memcached_functions_mysql过程中遇到这样一个问题

servers.c:263:28: error: 'memcached_st' has no member named 'hosts'
servers.c:264:28: error: 'memcached_st' has no member named 'hosts'

后来我在网上查一下,libmemcached-0.34没有这个问题

2. libmemcached-0.37会 遇到  ERROR 1126 (HY000) at line 38: Can't open shared library 'libmemcached_functions_mysql.so' (errno: 0 /usr/local/mysql/lib/plugin/libmemcached_functions_mysql.so: undefined symbol: memcached_string_append)

所以推荐安装 ibmemcached-0.34。

3.在安装libmemcached的时候,如果不是默认安装,需要指定memcached安装路径。

 

四,安装memcached_functions_mysql

01.tar xzf memcached_functions_mysql-0.9.tar.gz  
02.cd memcached_functions_mysql-0.9  
03../configure --prefix=/usr/local/memcache_mysql --with-mysql=/usr/local/mysql/bin/mysql_config --with-libmemcached=/usr/local/libmemcached37  
04.make && make install  
05.cp /usr/local/memcache_mysql/lib/libmemcached_functions*   /usr/local/mysql/lib/mysql/plugin 别忘了加上--with-libmemcached=/usr/local/libmemcached34 不然会报以下错误

checking for mysql_config... /usr/bin/mysql_config
checking for libmemcached >= 0.17... configure: error: libmemcached not found

如果是mysql 5.5 mysql插件的目录是/usr/local/mysql/lib/plugin


 

创建mysql的memcache操作函数

$ mysql < sql/install_functions.sql

mysql如果不是默认安装,需要指定路径。

也可以在mysql管理里面运行install_functions.sql的sql脚本。

mysql>  source sql/install_functions.sql

 


这样我们就可以使用mysql memcached UDF 了,我们可以通过下面语句查看是否已经正常安装
mysql>  select * from mysql.func;
+------------------------------+-----+---------------------------------+----------+
| name | ret | dl | type |
+------------------------------+-----+---------------------------------+----------+
| memc_add | 2 | libmemcached_functions_mysql.so | function |
| memc_add_by_key | 2 | libmemcached_functions_mysql.so | function |
| memc_servers_set | 2 | libmemcached_functions_mysql.so | function |
32 rows in set (0.00 sec)

添加trigger ,就是向memcache内insert,update,deletel等,参照:
1)memcached_functions_mysql-0.9/sql 目录下的trigger_fun.sql
2)或者文档:http://dev.mysql.com/doc/refman/5.1/en/ha-memcached-interfaces-mysqludf.html
如果懒得看就看我后边的例子

五,测试

例子1:

 

mysql> select memc_servers_set('127.0.0.1:11211')
注意:如果mysql restart,需要重新运行这句以建立与memcached之间的关系
mysql>  select memc_servers_behavior_set('MEMCACHED_BEHAVIOR_NO_BLOCK','1');
+--------------------------------------------------------------+
| memc_servers_behavior_set('MEMCACHED_BEHAVIOR_NO_BLOCK','1') |
+--------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>  select memc_servers_behavior_set('MEMCACHED_BEHAVIOR_TCP_NODELAY','1');
+-----------------------------------------------------------------+
| memc_servers_behavior_set('MEMCACHED_BEHAVIOR_TCP_NODELAY','1') |
+-----------------------------------------------------------------+
| 0 |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)
注意:设置MEMCACHED_BEHAVIOR_NO_BLOCK为打开状态,这样在memcached出现问题时(不能连接时)
数据继续插入到mysql中,报错提示,如果不设置此值,如果memcached失败,mysql需要等到timeout
才可以插入到表中。
mysql> use test;
Database changed
 
mysql> create table xxd (id int, value varchar(100));   
mysql> create trigger xxdmmci after insert on xxd for each row set @tmp = memc_set(NEW.id, NEW.value);
mysql> create trigger xxdmmcu after update on xxd for each row set @tmp = memc_set(NEW.id, NEW.value);
mysql> create trigger xxdmmcd before delete on xxd for each row set @tmp = memc_delete(OLD.id);
mysql> insert into xxd values(1, 'xxd'),(2,'xxd79'),(3, 'buro79xxd');        
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> select memc_get('2');
+----------------------------+
| memc_get('2')              |
+----------------------------+
| xxd79 |
+----------------------------+
1 row in set (0.00 sec)
mysql> update xxd set value='xxd_new' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select memc_get('1');
+----------------------------+
| memc_get('1')              |
+----------------------------+
| xxd_new |
+----------------------------+
1 row in set (0.00 sec)
mysql> delete from xxd where id=1;
Query OK, 1 row affected (0.00 sec)
 
mysql> select memc_get('1');
+----------------------------+
| memc_get('1')              |
+----------------------------+
| NULL |
+----------------------------+
1 row in set (0.00 sec)
mysql> exit
$  telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
get 1
END
get 2
VALUE 2 0 5
xxd79
END
get 3
VALUE 3 0 9
buro79xxd
END
quit
Connection closed by foreign host.


例子2:


01.//创建一个测试有   
02.drop table if  exists urls;  
03.create table urls (  
04. id int(3) not null,  
05. url varchar(64) not null default   '' ,  
06. primary key (id)  
07. );  
08.  
09.//连接memcched,根启动memcahed的端口要一样   
10.select memc_servers_set('127.0.0.1:12000,127.0.0.1:13000' );  
11.//设置一个开始序列   
12.select memc_set('urls:sequence' , 0);  
13.  
14.//创建插入memcached触发器   
15.DELIMITER |  
16.  
17.DROP TRIGGER IF EXISTS url_mem_insert |  
18.CREATE TRIGGER url_mem_insert  
19.BEFORE INSERT ON urls  
20.FOR EACH ROW BEGIN  
21. SET NEW.id= memc_increment('urls:sequence' );  
22. SET @mm= memc_set(concat('urls:' ,NEW.id), NEW.url);  
23.END  |  
24.  
25.//创建更新memcached触发器   
26.DROP TRIGGER IF EXISTS url_mem_update |  
27.CREATE TRIGGER url_mem_update  
28.BEFORE UPDATE ON urls  
29.FOR EACH ROW BEGIN  
30. SET @mm= memc_replace(concat('urls:' ,OLD.id), NEW.url);  
31.END  |  
32.  
33.//创建删除memcached触发器   
34.DROP TRIGGER IF EXISTS url_mem_delete |  
35.CREATE TRIGGER url_mem_delete  
36.BEFORE DELETE  ON urls  
37.FOR EACH ROW BEGIN  
38. SET @mm= memc_delete(concat('urls:' ,OLD.id));  
39.END  |  
40.  
41.DELIMITER ;  //写触发器的时候,我们会用;mysql执行分割符也是;所以我们在写触发器或者是存储过程的时候都会改变一下,例如:DELIMITER |   
42.  
43.//插入一些测试数据   
44.insert into urls (url) values ('http://google.com' );  
45.insert into urls (url) values ('http://baidu.com/' );  
46.insert into urls (url) values ('http://www.51yip.com/' );  
47.insert into urls (url) values ('http://blog.51yip.com/' );  
48.insert into urls (url) values ('http://51yip.com' );  
49.insert into urls (url) values ('http://mysql.com' );  
50.select * from urls;  
51.  
52.//将插入的6条数据显示出来,下面的显示和删除也是一样的不多说了。   
53.select memc_get('urls:1' );  
54.select memc_get('urls:2' );  
55.select memc_get('urls:3' );  
56.select memc_get('urls:4' );  
57.select memc_get('urls:5' );  
58.select memc_get('urls:6' );  
59.  
60.update urls set url= 'http://mysql.com/sun'  where url =  'http://51yip.com' ;  
61.select url from urls where url = 'http://51yip.com/manual' ;  
62.select memc_get('urls:6' );  
63.  
64.delete  from urls where url =  'http://blog.51yip.com/' ;  
65.select * from urls where url='http://blog.51yip.com/' ;  
66.select memc_get('urls:4' );  
我以前写过一篇:关于memcache的key的管理,徘徊中 (http://blog.51yip.com/php/729.html)里面提到对单表进行缓存 ,可以完全配合这篇文章所说的东西。如果有多表联合查询的话,在用触器就比较麻烦了,还不如放到程序里去执行