Mysql自動同步memcached並把表原有數據進行初始化到memcached
Mysql通過觸發器把表數據更改自動同步到memcached,而且可以實現對mysql表原有數據進行初始化到memcached下.
具體安裝略.....
下面是對自己建的you測試表操作
建立insert觸發器
delimiter $$
create trigger you_mem_insert before insert on you for each row begin set @tex=memc_set(concat('text_',NEW.id),NEW.text);
set @us=memc_set(concat('user_',NEW.id),NEW.user);
set @ti=memc_set(concat('time_',NEW.id),NEW.time);
end $$
建立update觸發器
delimiter $$
create trigger you_mem_update before update on you for each row begin set @tex=memc_set(concat('text_',OLD.id),NEW.text);
set @us=memc_set(concat('user_',OLD.id),NEW.user);
set @ti=memc_set(concat('time_',OLD.id),NEW.time);
end $$
建立delete觸發器
delimiter $$
create trigger you_mem_delete before delete on you for each row begin set @tex=memc_delete(concat('text_',OLD.id));
set @us=memc_delete(concat('user_',OLD.id));
set @ti=memc_delete(concat('time_',OLD.id));
end $$
建立完成後退出再登錄,進入到you表所在的庫.
通過show triggers可查看添加的觸發器
添加memcached服務器地址
select memc_servers_set('127.0.0.1:11211');
mysql可以通過 select memc_set()來把數據寫入到memcached,所以可以對mysql進行初始化,把表已有數據初始化到memcached下,腳本如下(mem.sh) ;
mysql -e "select * from test.you" > 3.txt
k=`cat 3.txt |wc -l`
for((i=2;i<=k;i++))
do
mysql --database test -e "select memc_set('text_`awk -v var=$i 'NR==var{print$1}' 3.txt`','`awk -v var=$i 'NR==var{print$2}' 3.txt`')"
mysql --database test -e "select memc_set('user_`awk -v var=$i 'NR==var{print$1}' 3.txt`','`awk -v var=$i 'NR==var{print$3}' 3.txt`')"
mysql --database test -e "select memc_set('time_`awk -v var=$i 'NR==var{print$1}' 3.txt`','`awk -v var=$i 'NR==var{print$4}' 3.txt`')"
done
運行mem.sh
再 telnet到memcached上,可查看到表數據全部初始化到memcached上來了.
後期的就是由mysql自動同步memcached了,但這樣子對於應用到生產環境還是不行的.