MySQL 5.6 開始支援 InnoDB memcached

安裝 MySQL,從官網下載的

MySQL-server-5.6.25-1.el6.x86_64.rpm
MySQL-client-5.6.25-1.el6.x86_64.rpm
MySQL-devel-5.6.25-1.el6.x86_64.rpm
MySQL-shared-5.6.25-1.el6.x86_64.rpm
MySQL-shared-compat-5.6.25-1.el6.x86_64.rpm
MySQL-test-5.6.25-1.el6.x86_64.rpm

啟動 MySQL

mysql_install_db --user=mysql 
service mysql start

匯入 innodb memcached 設定

mysql < /usr/share/mysql/innodb_memcached_config.sql

這個動作會建立 innodb_memcache 資料庫,及 test 資料庫的 TABLE demo_test

innodb_memcache 裡有個 TABLE containers,是結合 資料庫 與 memcache  的設定

意思就是我們建立的資料庫 test,裡面的TABLE demo_test,要在 memcached 裡使用就要設定關連在 innodb_memcache 的 containers 裡

比如說建立一個資料庫

mysql> CREATE TABLE `test`.`users` (
 `user_id` varchar(32) NOT NULL DEFAULT '',
 `first` varchar(100) DEFAULT NULL,
 `last` varchar(100) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB;

就要另外 INSERT 資料進 innobd_memcahce 的 containers 裡面

INSERT INTO `containers` (`name`, `db_schema`, `db_table`, `key_columns`, `value_columns`, `unique_idx_name_on_key`)
 VALUES ('default', 'test', 'users', 'user_id', 'first|last', 'PRIMARY');

再來啟動 memcached,這邊不用 service memcached start,因為 install plugin 時就會 listen memcahced 11211 了

mysql> INSTALL PLUGIN daemon_memcached SONAME 'libmemcached.so';

訊息

mysql> SHOW PLUGINS;
| daemon_memcached | ACTIVE | DAEMON | libmemcached.so | GPL |

反安裝

mysql> UNINSTALL PLUGIN daemon_memcached;

測試

telnet localhost 11211
set foo 0 0 14      # set 告訴 memcached 我們要存值,foo 是 key,第一個 0 是flags,第二個0是 expiration TTL,14是字串長度

Jarvis|Badgley      # 這個是 value
# 就會 STORED

再來取值

telnet localhost 11211
get foo

就會得到

VALUE foo 0 14
Jarvis|Badgley
END

我們來透過 memcached 取現在資料庫 test.demo_test 裡面的值

telnet localhost 11211
get @@aaa.AA

上面的 aaa 是 innodb_memcache 的 containers.name 裡的值,AA 是 test 的 demo_test.c1 裡的值,因為在 containers 裡有對應是誰,所以 @@aaa.AA 就可以取到我們要的結果了

得到

VALUE @@aaa.AA 8 12
HELLO, HELLO
END

另一個取法

telnet localhost 11211
get @aaa
get AA

使用 php,我重新編譯 5.6 版本,再加上 memcached

<?php
$mem = new Memcached();
$mem->addServer("127.0.0.1", 11211);
$result = $mem->get("foo");
echo $result;

 

參考

  • http://chipersoft.com/p/MySQL-via-Memcache/
  • http://imysql.com/2013/08/15/innodb-memcached-vs-native-memcached-benchmark.shtml
  • http://huoding.com/2013/08/20/279
  • http://imysql.com/2013/08/15/innodb-memcached-vs-native-memcached-benchmark.shtml
  • http://www.oschina.net/translate/mysql-5-7-innodb-memcached-plugins
  • http://www.farmer.idv.tw/?viewDoc=591

 

最後修改日期: 2015 年 06 月 04 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。