redis 安裝

大概在兩年前就開始關注Redis。後來換了項目就沒有再怎麼關注過,算是有點遺憾失去了當初進入社區的機會。

先說說安裝吧。

1,通過網絡下載 Linux命令 wget http://download.redis.io/releases/redis-3.0.1.tar.gz

2,解壓

使用tar -zxvf redis-3.0.0.tar.gz命令將root目錄下的redis-3.0.0.tar.gz文件還是解壓到該目錄下。 

3,如果沒有安裝gcc需要 由於redis是由c語言編寫的,所以安裝redis需要c語言的編譯環境,因此我們需要先安裝gcc。如果沒有gcc,則需要在線安裝,安裝命令是yum install gcc-c++。 

4,進入cd redis-3.0.0 目錄,     make命令編譯,

編譯完成後,我們使用make install PREFIX=/usr/local/redis命令來進行安裝

接着我們進入redis目錄,在該目錄下可以看到bin目錄,進入到bin目錄可以看到redis的客戶端和服務端,如下所示


5,啓動  

第一種啓動方式是前端啓動,即在redis的安裝目錄下直接使用./redis-server命令啓動redis-server,如下所示(可以看到默認端口是6379)

,只不過這種啓動會佔用終端,如果我們按Ctrl+C就會停止redis-server。 


可能會報錯



5.WARNING FIX

  從上面redis啓動之後的控制檯打出的信息來看,有3條WARNING信息。他們分別如下:

5.1. WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

解決方式:

1
2
3
4
5
6
7
8
9
第一種:無需重啓系統即可生效;但重啓以後信息丟失
[root@localhost ~]# echo 511 >/proc/sys/net/core/somaxconn
 
第二種:即可生效,重啓不會丟失
1. 編輯/etc/sysctl.conf文件,在其後追加
net.core.somaxconn = 511
 
2. sysctl.conf生效
[root@localhost ~]# sysctl -p

原理:

對於一個TCP連接,Server與Client需要通過三次握手來建立網絡連接.當三次握手成功後,  我們可以看到端口的狀態由LISTEN轉變爲ESTABLISHED,接着這條鏈路上就可以開始傳送數據了.每一個處於監聽(Listen)狀態的端口,都有自己的監聽隊列.監聽隊列的長度,與如下兩方面有關:一個是 somaxconn參數;另一個是使用該端口的程序中listen()函數.故而somaxconn會限制了接收新 TCP 連接偵聽隊列的大小。對於一個經常處理新連接的高負載 web服務環境來說,默認的 128 太小了。大多數環境這個值建議增加到 1024 或者更多。 服務進程會自己限制偵聽隊列的大小,常常在它們的配置文件中有設置隊列大小的選項。大的偵聽隊列對防止拒絕服務 DoS 攻擊也會有所幫助。

redis配置文件中有個參數,tcp-backlog默認值是511,而系統默認的somaxconn是128,所以redis啓動以後報出這個warnning

 

5.2. WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

解決辦法:

複製代碼
第一種:無需重啓系統即可生效;但重啓以後信息丟失
[root@localhost ~]# echo 1 > /proc/sys/vm/overcommit_memory

第二種:即可生效,重啓不會丟失
1. 編輯/etc/sysctl.conf文件,在其後追加
vm.overcommit_memory=1

2. sysctl.conf生效
[root@localhost ~]# sysctl -p
複製代碼

原理

內核參數overcommit_memory 確定了內存分配策略,可選值爲[0、1、2]
0: 表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。
1: 表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。
2: 表示內核允許分配超過所有物理內存和交換空間總和的內存

 進程通常調用malloc()函數來請求分配內存,Linux支持超量分配內存,以允許分配比可用RAM加上交換內存的請求。Linux對大部分申請內存的請求都回復"yes",以便能跑更多更大的程序。因爲申請內存後,並不會馬上使用內存。這種技術叫做Overcommit。當linux發現內存不足時,會發生OOM killer(OOM=out-of-memory)。它會選擇殺死一些進程(用戶態進程,不是內核線程),以便釋放內存。當oom-killer發生時,linux會選擇殺死哪些進程?選擇進程的函數是oom_badness函數(在mm/oom_kill.c中),該函數會計算每個進程的點數(0~1000)。點數越高,這個進程越有可能被殺死。每個進程的點數跟oom_score_adj有關,而且oom_score_adj可以被設置(-1000最低,1000最高)。

 

5.3. WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.

 解決辦法 

複製代碼
第一種方法:重啓生效,不會丟失
1. 編輯/etc/rc.local,在最後新增如下內容:
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
   echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
2. 重新啓動系統
[root@localhost redis]# reboot

第二種方法:及時生效,重啓丟失
[root@localhost redis]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
複製代碼

 原理

正常來說,有兩種方式來增加內存,可以管理的內存大小:
1.增大硬件內存管理單元的大小。
2.增大page的大小。
第一個方法不是很現實,現代的硬件內存管理單元最多隻支持數百到上千的page表記錄,並且,對於數百萬page表記錄的維護算法必將與目前的數百條記錄的維護算法大不相同才能保證性能,目前的解決辦法是,如果一個程序所需內存page數量超過了內存管理單元的處理大小,操作系統會採用軟件管理的內存管理單元,但這會使程序運行的速度變慢。

從redhat 6(centos,sl,ol)開始,操作系統開始支持 Huge Pages,也就是大頁。簡單來說, Huge Pages就是大小爲2M到1GB的內存page,主要用於管理數千兆的內存,比如1GB的page對於1TB的內存來說是相對比較合適的。

THP(Transparent Huge Pages)是一個使管理Huge Pages自動化的抽象層。目前需要注意的是,由於實現方式問題,THP會造成內存鎖影響性能,尤其是在程序不是專門爲大內內存頁開發的時候,簡單介紹如下:操作系統後臺有一個叫做khugepaged的進程,它會一直掃描所有進程佔用的內存,在可能的情況下會把4kpage交換爲Huge Pages,在這個過程中,對於操作的內存的各種分配活動都需要各種內存鎖,直接影響程序的內存訪問性能,並且,這個過程對於應用是透明的,在應用層面不可控制,對於專門爲4k page優化的程序來說,可能會造成隨機的性能下降現象。

6,爲了方便我們直接換個啓動方式

第二種啓動方式是使用配置文件啓動(也叫後臺啓動),我們需要先到redis的解壓縮目錄(/root/redis-3.0.0)下把redis.conf文件

複製一份到/usr/local/redis/bin目錄下。

下面我們需要使用vim redis.conf命令簡單修改下redis.conf文件,把daemonize的值由默認的no修改爲yes,這個配置是指定是否在後臺運行


7,修改完之後,可按esc鍵+:wq保存修改,並退出編輯。 

下面使用./redis-server redis.conf命令進行後臺啓動



安裝測試OK後,下節會介紹實戰中的應用場景。待續

發佈了63 篇原創文章 · 獲贊 14 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章