首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL InnoDB Memcached Plugin:NoSQL 介面加速讀寫

     編輯:MySQL 資料庫相關知識

在 MySQL 內部直接暴露 Memcached 協議

官方 `daemon_memcached` 插件讓 InnoDB 表可透過 Memcached 協議 (Key-Value) 直接存取,省去獨立 Memcached 叢集與雙寫一致性維護,並借助 MySQL 複制實現 KV 資料同步。

安裝啟用

# 編譯安裝需啟用 WITH_INNODB_MEMCACHED
cmake . -DWITH_INNODB_MEMCACHED=ON
make && make install

# 載入插件
INSTALL PLUGIN daemon_memcached SONAME "libmemcached.so";
# 導入配置表
SOURCE /usr/local/mysql/share/innodb_memcached_config.sql;

核心配置表

  • cache_policies:`innodb_only`、`cache_only`、`caching` (預設)。
  • config_options:`separator` (預設 `|`)、`table_map_delimiter` (預設 `.`)。
  • containers:映射 KV 到 InnoDB 表欄位。
    INSERT INTO containers (name, db_schema, db_table, key_columns, value_columns, flags, cas_column, expire_time_column, unique_idx_name_on_key)
    VALUES ('default', 'test', 'users', 'username', 'password|email', 'flags', 'cas_column', 'expire_time_column', 'username');

限制條件

  • `key_columns`:CHAR/VARCHAR ≤ 250 字元。
  • `value_columns`:CHAR/VARCHAR/BLOB,支援多欄位用分隔符串聯。
  • `flags`、`cas_column` (BIGINT)、`expire_time_column` (INT) 必須存在,無對應業務欄位需額外建立。

實戰:用戶登錄資訊 KV 存取

# 讀取單鍵
echo "get foo" | nc localhost 11211
# 返回: VALUE foo 0 47 fffff...|foo@domain.com

# 批量讀取
echo "get foo bar" | nc localhost 11211

效能與建議

  • 讀效能較純 SQL 提升 ~100%,但遜於獨立 Memcached。
  • 寫操作建議仍走 SQL,保證事務一致性與二級索引維護。
  • 調大 `daemon_memcached_r_batch_size` / `w_batch_size` 批量提交事務提升吞吐,但需權衡持久化風險。
  • 分隔符衝突時修改 `config_options.separator` 並重載插件。

結論: 適合「讀多寫少、Key-Value 存取模式明確、不想維護獨立快取叢集」的場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved