原贴:http://www.junney.cn/archives/78 mysql触发器自动更新memcache[原创] posted by admin 十一月 4, 2008 今天看了mysql官方网站,发现这个udfs,udfs 是 user defined functions 的缩写,指 mysql的用户定义函数,应用可以通过使用这些函数从 mysql5.0
原贴:http://www.junney.cn/archives/78
mysql触发器自动更新memcache[原创]
posted by admin
十一月 4, 2008
今天看了mysql官方网站,发现这个udfs,udfs 是 user defined functions 的缩写,指 mysql的用户定义函数,应用可以通过使用这些函数从 mysql5.0 以上版本的数据库中访问 memcached 写入或者获得数据。此外,从mysql5.1 开始支持触发器,这样就可以在触发器中使用 udfs 直接更新 memcached的内容,减轻了应用程序设计和编写的复杂性。下面我们简要介绍 udfs 的安装和使用:
1、安装libmemcached(memcached的客户端c api)
下载地址:http://download.tangent.org/
# ./configure –prefix=/usr && make && make install
注意:请安装在/usr下,不然后面安装memcached_functions_mysql的时候找不到,还要指定pkg_config_path,麻烦。
2、安装memcached_functions_mysql
下载地址:http://download.tangent.org/
# ./configure –with-mysql=/usr/local/mysql/bin/mysql_config
安装完成之后,需要将 libmemcached_functions_mysql 的库文件拷贝到 mysql/lib 目录下的 plugin 目录中。
# cp /usr/local/lib/libmemcached_functions_mysql* /usr/local/mysql/lib/plugin/.
# shell> mysql 3、触发器实现
定义memcached服务器
mysql> select memc_servers_set(’192.168.0.1:11211,192.168.0.2:11211′);
创建测试表:
mysql> create table test3 (
-> id int(3) not null,
-> name varchar(64) not null default ”,
-> primary key (id)
-> );
创建触发器
mysql>delimiter |
->create trigger test3_insert
->before insert on test3
->for each row begin
->set @mm = memc_set(concat(’id:’,new.id), new.name);
->end |
可以参见官方网站:http://dev.mysql.com/doc/refman/5.1/en/ha-memcached-interfaces-mysqludf.html
后记:我觉得它的应用场景应该是写操作不太频繁,但查询量非常大的网站,memcache不超时的缓存数据库的数据,当数据库发生更改的时候,利用mysql的insert,update,delete触发器来更改memcached服务器的数据。但mysql的操作数据类型不支持数组,memc_set应该也不支持对象或者数组等数据类型。实现起来有点难度。
续记:mysql udf of json
基于以上的试用感想,我认为应该有udf可以将数据行转成json格式的数据,这样就真的可以实现前端不用访问数据库的想法了,google真是个好东西,google后还真找到了:udf repository formysql,外国人真是有开源精神:),这是一个mysql udf库的网站,我在里面找到for json的udf。
下载地址:http://www.mysqludf.org/lib_mysqludf_json/lib_mysqludf_json_0.0.2.tar.gz
安装:
# mkdir udf_of_json
# cd udf_of_json
# wget http://www.mysqludf.org/lib_mysqludf_json/lib_mysqludf_json_0.0.2.tar.gz
# tar zxvf lib_mysqludf_json_0.0.2.tar.gz
# cp ./lib_mysqludf_json.so /usr/local/mysql/lib/plugin/.
# mysql -u root
mysql> source ./ lib_mysqludf_json.sql
测试:
delimiter ||
create trigger user_insert
after insert on users
for each row begin
selectjson_array(username,user_type,real_name,password,active,last_login,description)into @user_info from users where user_id=new.user_id;
set @mm= memc_set(concat(’user_info_’,new.user_id), @user_info);
end ||
它还支持中文真是让人很欣喜,但不支持多行集,如果我用存储过程或者自定义函数自己写一个呢。研究中。。。。
cache, mysql
if you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.
comments还没有任何评论。