mysql+memcached 索引值資料庫

來源:互聯網
上載者:User

標籤:key   value   mysql   memcached   


key value 索引值資料庫


記憶體中心化設計

記憶體中心化設計是一種進來十分流行的架構,用於解決web2.0時代資料大量讀寫帶來的效能壓力。

實現思路:

增加緩衝層,利用記憶體的高I/O效能

將大量的即時資料以key_value的形式在記憶體中處理

通過預讀和合并寫入等技術減少後端資料庫的IO壓力


key-value資料庫簡介

memcached 與redis


什麼是memcached?

memcached 是一個高效能的分布式記憶體對象緩衝系統,用於動態web應用以減輕資料庫負載。他通過在記憶體中快取資料和對象來減少讀取資料庫的次數,從而提高動態,資料庫驅動網站的速度。

memcached 基於一個儲存鍵/值對的hashmap。 


web

|

memcached

|

mysql


memcached文法

memcached的伺服器用戶端通訊兵不使用複雜的XML等格式,而是使用簡單的基於文本行的協議。因此也可以用telnet在memcached上儲存資料,取得資料。

 memcached -d -c 10240 -m 1024 -u root 

  247  ps -ef|grep memcached

  248  telnet 127.0.0.1 11211

  249  yum install telnet -y

  250  telnet 127.0.0.1 11211


mysql-memcached 之間通常沒有直接聯絡,是通過應用程式或者中介軟體決定的

mysql5.6中加入了一個全新的memcached外掛程式,通過該外掛程式可以非常方便實現mysql與memcached的組合。使得我們可以用memcached文法操作msyql資料庫,也可以使用SQL文法來操作memcached,實現了mysql對於nosql的支援

memcached Plugin:innodb——memcached、local cache



基於mysql官方外掛程式的memcached的實現 


安裝:

如果使用的官方發布的rpm包安裝的mysql,那麼memcached外掛程式已經附帶mysql-server包中了

如果是源碼包  安裝mysql,則需要在編譯過程中加入對應配置項

另外系統中要安裝libevent包

cmake -DWITH_INNODB_MEMCACHED=ON



以mysql  rpm包來講 或者二進位包來講

1,先查看外掛程式儲存目錄,以及檔案

mysql> select @@plugin_dir;

+------------------------------+

| @@plugin_dir                 |

+------------------------------+

| /usr/local/mysql/lib/plugin/ |

+------------------------------+

1 row in set (0.00 sec)


mysql> Ctrl-C -- exit!

Aborted

[[email protected] ~]# ls /usr/local/mysql/lib/plugin/ | grep memcached

libmemcached.so


2,匯入表結構

接下來,匯入memcached外掛程式所需要的表結構

[[email protected] ~]# find / -name innodb_memcached_config.sql

/usr/local/mysql/share/innodb_memcached_config.sql

mysql -h 127.0.0.1 -p < /usr/local/mysql/share/innodb_memcached_config.sql

 mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| innodb_memcache    | ********

| mysql              |

| performance_schema |

| t9                 |

| test               |

| viewdb             |

+--------------------+

mysql> use innodb_memcache

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A


Database changed

mysql> show tables;

+---------------------------+

| Tables_in_innodb_memcache |

+---------------------------+

| cache_policies            | 

| config_options            |

| containers                |

+---------------------------+




3,載入、下載外掛程式命令

之後在mysql中載入外掛程式,使用install命令載入也可以使用uninstall卸載

如果需要重啟外掛程式,則需要先uninstall,然後在install

mysql> install plugin daemon_memcached soname ‘libmemcached.so‘;

Query OK, 0 rows affected (0.25 sec)

mysql>uninsall plugin daemon_memcached;


4,查看外掛程式配置資訊

mysql> show variables like ‘%memcache%‘;

  

+----------------------------------+------------------+

| Variable_name                    | Value            |

+----------------------------------+------------------+

| daemon_memcached_enable_binlog   | OFF              |  是否把memcached操作的資料記錄在binlog中,預設是關閉

| daemon_memcached_engine_lib_name | innodb_engine.so | 

| daemon_memcached_engine_lib_path |                  |

| daemon_memcached_option          |                  |

| daemon_memcached_r_batch_size    | 1                |

| daemon_memcached_w_batch_size    | 1                |

+----------------------------------+------------------+

6 rows in set (0.00 sec)


5.檢查memcached狀態

[[email protected] ~]# ps axu | grep memcached

root     10783  0.0  0.0 331864   136 ?        Ssl  Jan20   0:01 memcached -d -c 10240 -m 1024 -u root

root     12570  0.0  0.1 103244   836 pts/2    S+   01:39   0:00 grep memcached

[[email protected] ~]# netstat -tnlp  | grep 11211

tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      10783/memcached     

tcp        0      0 :::11211                    :::*                        LISTEN      10783/memcached 


6,innodb_memcache 庫

匯入外掛程式所需要的表結構後,會在資料庫中建一個名為innodb_memcache的庫,

  cache_policies      定義緩衝策略      | 

| config_options      定義分隔字元        |

| containers          容器


cache_policies :

mysql> select * from cache_policies;

+--------------+-------------+-------------+---------------+--------------+

| policy_name  | get_policy  | set_policy  | delete_policy | flush_policy |

+--------------+-------------+-------------+---------------+--------------+

| cache_policy | innodb_only | innodb_only | innodb_only   | innodb_only  |

+--------------+-------------+-------------+---------------+--------------+

1 row in set (0.00 sec)


cache_police表

cache_police 定義了緩衝策略,包含如下選擇:

innodb_only:只是用innodb作為資料存放區。

cache_only:只使用傳統的memcached引擎作為後端儲存、

caching:二者皆使用,如果在memcached裡找,如找不到,就查詢innodb


mysql> update cache_policies set get_policy=‘caching‘;  先查cache,如果沒在查innodb,最後在緩衝到cache中

Query OK, 1 row affected (0.04 sec)

Rows matched: 1  Changed: 1  Warnings: 0


mysql> select * from cache_policies;

+--------------+------------+-------------+---------------+--------------+

| policy_name  | get_policy | set_policy  | delete_policy | flush_policy |

+--------------+------------+-------------+---------------+--------------+

| cache_policy | caching    | innodb_only | innodb_only   | innodb_only  |

+--------------+------------+-------------+---------------+--------------+

1 row in set (0.00 sec)


  config_options :

config_options定義了分隔字元:

separate:memcached只是識別單值,使用此分隔字元(|)來串連欄位的值

table_map_delimiter:通過此分隔字元(.)來確認表和鍵,如:@@table.key


mysql> select * from config_options;

   

+---------------------+-------+

| name                | value |

+---------------------+-------+

| separator           | |     | 欄位分割符號

| table_map_delimiter | .     |  表

+---------------------+-------+

 

containers表

mysql> select * from containers;

+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+

| name | db_schema | db_table  | key_columns | value_columns | flags | cas_column | expire_time_column | unique_idx_name_on_key |

+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+

| aaa  | test      | demo_test | c1          | c2            | c3    | c4         | c5                 | PRIMARY                |

+------+-----------+-----------+-------------+---------------+-------+------------+--------------------+------------------------+

1 row in set (0.00 sec)


memcached 文法簡介-參數

key              用於尋找緩衝值

flags            可以包括索引值對的整型參數,客戶機使用它儲存關於索引值對的額外資訊、

expiration       在緩衝中儲存索引值對的時間長度

bytes            在緩衝中儲存的位元組數

value             儲存的值


文法:

set 用於向緩衝添加新的索引值對。如果已存在,則替換之前新的。

set UId 0 0 5


add 僅當緩衝不存在鍵時候,add命令才會向緩衝中添加一個索引值對,如果緩衝中已經存在鍵,則之前的值將任然保持相同,並且將活動not_stored


get   查詢索引值對

replace  專門更新現有的索引值對


delete 用於刪除memcached中飯任何現有的值,如果存在於緩衝中,則刪除該值,如果不存在,則返回not_found


進階文法:

gets  返回的資訊多、

cas (check & set) 是一個非常便捷的memcached命令,用設定名稱,

flush——all    用於清理緩衝中的所有名稱、值對(慎用,和delete一樣會刪除資料庫中資料)

status 狀態

stats命令用於調優緩衝的使用


mysql>update cache_policies set flush_policy=‘cache_only‘;   以後在memcached中做flush_all操作的時候,只操作cache,而不操作資料庫的表資料


本文出自 “crazy_sir” 部落格,請務必保留此出處http://douya.blog.51cto.com/6173221/1613253

mysql+memcached 索引值資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.