歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 談談Memcached與Redis

談談Memcached與Redis

日期:2017/2/28 14:35:18   编辑:Linux教程

1. Memcached 簡介

Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric為首開發的高性能分布式內存緩存服務器。其本質上就是一個內存key-value數據庫,但是不支持數據的持久化,服務器關閉之後數 據全部丟失。Memcached使用C語言開發,在大多數像Linux、BSD和Solaris等POSIX系統上,只要安裝了libevent即可使 用。在Windows下,它也有一個可用的非官方版本(http://code.jellycan.com/memcached/)。Memcached 的客戶端軟件實現非常多,包括C/C++, PHP, Java, Python, Ruby, Perl, Erlang, Lua等。當前Memcached使用廣泛,除了LiveJournal以外還有Wikipedia、Flickr、Twitter、Youtube和 WordPress等。

在Window系統下,Memcached的安裝非常方便,只需從以上給出的地址下載可執行軟件然後運行memcached.exe –d install即可完成安裝。在Linux等系統下,我們首先需要安裝libevent,然後從獲取源碼,make && make install即可。默認情況下,Memcached的服務器啟動程序會安裝到/usr/local/bin目錄下。在啟動Memcached時,我們可以為其配置不同的啟動參數。

1.1 Memcache 配置

Memcached服務器在啟動時需要對關鍵的參數進行配置,下面我們就看一看Memcached在啟動時需要設定哪些關鍵參數以及這些參數的作用。

1)-p <num> Memcached的TCP監聽端口,缺省配置為11211;

2)-U <num> Memcached的UDP監聽端口,缺省配置為11211,為0時表示關閉UDP監聽;

3)-s <file> Memcached監聽的UNIX套接字路徑;

4)-a <mask> 訪問UNIX套接字的八進制掩碼,缺省配置為0700;

5)-l <addr> 監聽的服務器IP地址,默認為所有網卡;

6)-d 為Memcached服務器啟動守護進程;

7)-r 最大core文件大小;

8)-u <username> 運行Memcached的用戶,如果當前為root的話需要使用此參數指定用戶;

9)-m <num> 分配給Memcached使用的內存數量,單位是MB;

10)-M 指示Memcached在內存用光的時候返回錯誤而不是使用LRU算法移除數據記錄;

11)-c <num> 最大並發連數,缺省配置為1024;

12)-v –vv –vvv 設定服務器端打印的消息的詳細程度,其中-v僅打印錯誤和警告信息,-vv在-v的基礎上還會打印客戶端的命令和相應,-vvv在-vv的基礎上還會打印內存狀態轉換信息;

13)-f <factor> 用於設置chunk大小的遞增因子;

14)-n <bytes> 最小的chunk大小,缺省配置為48個字節;

15)-t <num> Memcached服務器使用的線程數,缺省配置為4個;

16)-L 嘗試使用大內存頁;

17)-R 每個事件的最大請求數,缺省配置為20個;

18)-C 禁用CAS,CAS模式會帶來8個字節的冗余;

2. Redis 簡介

Redis是一個開源的key-value存儲系統。與Memcached類似,Redis將大部分數據存儲在內存中,支持的數據類型包括:字符串、哈希 表、鏈表、集合、有序集合以及基於這些數據類型的相關操作。Redis使用C語言開發,在大多數像Linux、BSD和Solaris等POSIX系統上 無需任何外部依賴就可以使用。Redis支持的客戶端語言也非常豐富,常用的計算機語言如C、C#、C++、Object-C、PHP、Python、 Java、Perl、Lua、Erlang等均有可用的客戶端來訪問Redis服務器。當前Redis的應用已經非常廣泛,國內像新浪、淘寶,國外像 Flickr、Github等均在使用Redis的緩存服務。

Redis的安裝非常方便,只需從http://redis.io/download獲取源碼,然後make && make install即可。默認情況下,Redis的服務器啟動程序和客戶端程序會安裝到/usr/local/bin目錄下。在啟動Redis服務器時,我們需要為其指定一個配置文件,缺省情況下配置文件在Redis的源碼目錄下,文件名為redis.conf。

2.1 Redis 配置文件

為了對Redis的系統實現有一個直接的認識,我們首先來看一下Redis的配置文件中定義了哪些主要參數以及這些參數的作用。

1)daemonize no 默認情況下,redis不是在後台運行的。如果需要在後台運行,把該項的值更改為yes;

2)pidfile /var/run/redis.pid當Redis在後台運行的時候,Redis默認會把pid文件放在/var/run/redis.pid,你可以配置到其他地址。當運行多個redis服務時,需要指定不同的pid文件和端口;

3)port 6379指定redis運行的端口,默認是6379;

4)bind 127.0.0.1 指定redis只接收來自於該IP地址的請求,如果不進行設置,那麼將處理所有請求。在生產環境中最好設置該項;

5)loglevel debug 指定日志記錄級別,其中Redis總共支持四個級別:debug、verbose、notice、warning,默認為verbose。debug表示 記錄很多信息,用於開發和測試。verbose表示記錄有用的信息,但不像debug會記錄那麼多。notice表示普通的verbose,常用於生產環 境。warning 表示只有非常重要或者嚴重的信息會記錄到日志;

6)logfile /var/log/redis/redis.log 配置log文件地址,默認值為stdout。若後台模式會輸出到/dev/null;

7)databases 16 可用數據庫數,默認值為16,默認數據庫為0,數據庫范圍在0-(database-1)之間;

8)save 900 1保存數據到磁盤,格式為save <seconds> <changes>,指出在多長時間內,有多少次更新操作,就將數據同步到數據文件rdb。相當於條件觸發抓取快照,這個可以多個條件配合。save 900 1就表示900秒內至少有1個key被改變就保存數據到磁盤;

9)rdbcompression yes 存儲至本地數據庫時(持久化到rdb文件)是否壓縮數據,默認為yes;

10)dbfilename dump.rdb本地持久化數據庫文件名,默認值為dump.rdb;

11)dir ./ 工作目錄,數據庫鏡像備份的文件放置的路徑。這裡的路徑跟文件名要分開配置是因為redis在進行備份時,先會將當前數據庫的狀態寫入到一個臨時文件中, 等備份完成時,再把該臨時文件替換為上面所指定的文件。而這裡的臨時文件和上面所配置的備份文件都會放在這個指定的路徑當中,AOF文件也會存放在這個目 錄下面。注意這裡必須指定一個目錄而不是文件;

12)slaveof <masterip> <masterport> 主從復制,設置該數據庫為其他數據庫的從數據庫。設置當本機為slave服務時,設置master服務的IP地址及端口。在Redis啟動時,它會自動從master進行數據同步;

13)masterauth <master-password> 當master服務設置了密碼保護時(用requirepass制定的密碼)slave服務連接master的密碼;

14)slave-serve-stale-data yes 當從庫同主機失去連接或者復制正在進行,從機庫有兩種運行方式:如果slave-serve-stale-data設置為yes(默認設置),從庫會繼續 相應客戶端的請求。如果slave-serve-stale-data是指為no,除去INFO和SLAVOF命令之外的任何請求都會返回一個錯誤"SYNC with master in progress";

15)repl-ping-slave-period 10從庫會按照一個時間間隔向主庫發送PING,可以通過repl-ping-slave-period設置這個時間間隔,默認是10秒;

16)repl-timeout 60 設置主庫批量數據傳輸時間或者ping回復時間間隔,默認值是60秒,一定要確保repl-timeout大於repl-ping-slave-period;

17)requirepass foobared 設置客戶端連接後進行任何其他指定前需要使用的密碼。因為redis速度相當快,所以在一台比較好的服務器下,一個外部的用戶可以在一秒鐘進行150K次的密碼嘗試,這意味著你需要指定非常強大的密碼來防止暴力破解;

18)rename-command CONFIG "" 命令重命名,在一個共享環境下可以重命名相對危險的命令,比如把CONFIG重名為一個不容易猜測的字符:# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52。如果想刪除一個命令,直接把它重命名為一個空字符""即可:rename-command CONFIG "";

19)maxclients 128設置同一時間最大客戶端連接數,默認無限制。Redis可以同時打開的客戶端連接數為Redis進程可以打開的最大文件描述符數。如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息;

20)maxmemory <bytes> 指定Redis最大內存限制。Redis在啟動時會把數據加載到內存中,達到最大內存後,Redis會先嘗試清除已到期或即將到期的Key,Redis同 時也會移除空的list對象。當此方法處理後,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作。注意:Redis新的vm機制,會 把Key存放內存,Value會存放在swap區;

21)maxmemory-policy volatile-lru 當內存達到最大值的時候Redis會選擇刪除哪些數據呢?有五種方式可供選擇:volatile-lru代表利用LRU算法移除設置過過期時間的key (LRU:最近使用 Least Recently Used ),allkeys-lru代表利用LRU算法移除任何key,volatile-random代表移除設置過過期時間的隨機key,allkeys_random代表移除一個隨機的key,volatile-ttl代表移除即將過期的key(minor TTL),noeviction代表不移除任何key,只是返回一個寫錯誤。

注意:對於上面的策略,如果沒有合適的key可以移除,寫的時候Redis會返回一個錯誤;

22)appendonly no 默認情況下,redis會在後台異步的把數據庫鏡像備份到磁盤,但是該備份是非常耗時的,而且備份也不能很頻繁。如果發生諸如拉閘限電、拔插頭等狀況,那 麼將造成比較大范圍的數據丟失,所以redis提供了另外一種更加高效的數據庫備份及災難恢復方式。開啟append only模式之後,redis會把所接收到的每一次寫操作請求都追加到appendonly.aof文件中。當redis重新啟動時,會從該文件恢復出之 前的狀態,但是這樣會造成appendonly.aof文件過大,所以redis還支持了BGREWRITEAOF指令對appendonly.aof 進行重新整理,你可以同時開啟asynchronous dumps 和 AOF;

23)appendfilename appendonly.aof AOF文件名稱,默認為"appendonly.aof";

Redis 的詳細介紹:請點這裡
Redis 的下載地址:請點這裡

推薦閱讀:

Redis集群明細文檔 http://www.linuxidc.com/Linux/2013-09/90118.htm

Ubuntu 12.10下安裝Redis(圖文詳解)+ Jedis連接Redis http://www.linuxidc.com/Linux/2013-06/85816.htm

Redis系列-���裝部署維護篇 http://www.linuxidc.com/Linux/2012-12/75627.htm

CentOS 6.3安裝Redis http://www.linuxidc.com/Linux/2012-12/75314.htm

Redis配置文件redis.conf 詳解 http://www.linuxidc.com/Linux/2013-11/92524.htm

Copyright © Linux教程網 All Rights Reserved