簡體   English   中英

如何為mysql innodb配置memcached?

[英]How to configure memcached for mysql innodb?

目前,我們有一個運行在帶有Direct Admin的Centos 6.5網絡服務器上的網站。 APC在過去配置並且運行良好,但是一些閱讀建議也實現memcached來緩存一些靜態表(例如菜單)。

從MySQL 5.6開始,innoDB表與mysql memcache deamon兼容,所以我開始關注本指南: http//dev.mysql.com/doc/refman/5.6/en/innodb-memcached-installing.html 運行配置腳本並安裝deamon。

但是Drupal memcache插件沒有看到memcache正在運行。 該模塊顯然正在檢查php memcached deamon,而我的deamon已經在mysql中運行了。

由於這兩個擴展名都稱為memcached.so ,因此我們強烈認為這是相同的事情。 實際上有兩個不同的東西,Drupal不支持InnoDB memcached deamon,我是否需要兩個(php擴展來訪問mysql擴展?),或者這應該是有效的,我們做錯了什么?

更新

狀態報告顯示“不運行”之類的內容,但我的一位同事現在已經安裝了PHP PECL擴展程序,它似乎正在運行。 但后來我仍然不明白MySQL innodb deamon插件的作用。 是不是需要它,還是它改進了數據庫訪問,甚至PHP擴展會更多?

InnoDB的Memcached接口是MySQL支持memcached協議的一個特性,但InnoDB作為后端存儲。 似乎很多人都對這意味着什么感到困惑,所以我會試着解釋一下。

真正的memcached守護進程將數據存儲在內存中,而MySQL將數據持久存儲在InnoDB表中。 PHP應用程序可以使用memcached擴展讀取和寫入數據,就像它們使用標准的memcached內存存儲一樣。 但是,它們實際上是在從InnoDB表中讀取和寫入行。

這比標准的memcached慢一些,因為它寫入磁盤的開銷大於訪問內存。 但它比使用SQL讀取和寫入這些行要快一些,因為它會省略SQL解析器和查詢優化器的復雜性。

這實際上是MySQL中的新功能:繞過SQL,並通過簡單但熟悉的界面直接訪問InnoDB存儲引擎。 他們在理論上選擇了memcached,許多開發人員都熟悉它,並且已經為它提供了工具和語言支持。

InnoDB的memcached的界面類似於所謂的早期實驗插件HandlerSocket的在2010年開發的http://yoshinorimatsunobu.blogspot.com/2010/10/using-mysql-as-nosql-story-for.html

這是一個Percona博客,顯示了InnoDB memcached與SQL查詢的相對速度測試: http//www.percona.com/blog/2013/03/29/mysql-5-6-innodb-memcached-plugin-as-一個緩存層/


在評論中回答你的問題:

你可能會誤解。 數據永遠不會在Memcached中。 MySQL和Memcached之間沒有自動同步。 唯一的問題是MySQL正在模仿Memcached的API和協議。 除了讓開發人員熟悉API之外,他們沒有理由這樣做。

當您使用“Memoached API for InnoDB”時,您將應用程序連接到mysqld守護程序進程偵聽的端口。 您對此連接的請求直接在InnoDB存儲引擎中讀取和寫入行。 兩者之間沒有Memcached實例。

InnoDB Memcached插件是MySQL> = 5.6中的一個功能,它在現有的mysqld進程中運行Memcached守護進程,支持在不同端口(默認為11211 )上偵聽Memcached API。 因為它在與InnoDB相同的進程空間中運行,所以您可以通過現有的,廣泛可用的Memcached客戶端,對InnoDB表中存儲的數據進行低延遲訪問。

這有一些有趣的用例:

  1. 透明支持將InnoDB作為高性能持久層添加到現有的memcached客戶端/應用程序
  2. 提高了SQL查詢的性能,可以直接與InnoDB表進行交互(特別是插入新的鍵/值對),因為簡單的Memcached協議可以繞過SQL解析和查詢計划優化的開銷
  3. 高性能“MySQL +緩存層”架構,其中memcached守護程序從底層InnoDB表中獲取數據並直接從本地內存提供緩存數據

案例#3特別值得注意:盡管默認情況下Memcached插件配置為直接讀取/寫入底層InnoDB表( innodb_only緩存策略),但它可以配置為使用自己獨立的本地內存緩存,就像獨立的Memcached實例一樣或者,根本不使用InnoDB存儲( cache-only ),或者使用InnoDB作為后備存儲( caching )。 (請注意,此時當前接受的答案不正確。)

請參閱文檔中的體系結構圖 (請注意“本地緩存(可選)”組件,該組件由cache-only cachingcaching緩存策略使用):

在設置/安裝方面,如果您將Memcached插件用於獨立鍵值緩存(案例#1)以外的任何其他內容,則需要創建從Memcached鍵/值到InnoDB表/列的映射。在特殊的innodb_memcache.containers表中寫一行。 有關詳細信息,請參閱創建新表和列映射

這里有一點側面軌道,但現在你最好使用memcache_storage模塊。 模塊頁面有很多很好的指示,如何使用該模塊以及它與其他模塊很好地集成,以便為您的站點提供更好,更快的緩存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM