1、下載源代碼
http://code.google.com/p/redis/downloads/list
下載redis-1.2.6.tar.gz 將下載包拷貝到/usr/local/webserver/redis-1.2.6/下
或者http://redis.io/下載redis-2.4.15
2、安裝
tar -zxvf redis-1.2.6.tar.gz
cd redis-1.2.6
make && make install
3、調整內存
如果內存情況比較緊張的話,需要設定內核參數:
echo 1 > /proc/sys/vm/overcommit_memory
這裏說一下這個配置的含義:
/proc/sys/vm/overcommit_memory
該文件指定了內核針對內存分配的策略,其值可以是0、1、2。
0,表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。
1,表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。
2,表示內核允許分配超過所有物理內存和交換空間總和的內存
設置可選部分:拷貝文件
cp redis.conf /etc/ #這個文件時redis啓動的配置文件
cp redis-benchmark redis-cli redis-server /usr/bin/ #這個倒是很有用,這樣就不用再執行時加上./了,而且可以在任何地方執行
4、編輯redis.conf
daemonize yes #轉爲守護進程,否則啓動時會每隔5秒輸出一行監控信息
save 60 1000 #減小改變次數,其實這個可以根據情況進行指定
maxmemory 1024000000 #分配256M內存
5、服務管理
5.1 啓動服務
redis-server redis.conf #啓動服務
5.2 存儲值
redis-cli set name zhoufeng redis-cli get name
5.3 關閉服務
redis-cli shutdown
5.3.1 如果端口變化可以指定端口:
redis-cli -p 6380 shutdown
5.3.2 這時內存中的數據會自動寫入硬盤,文件地址是在redis.conf裏配置的:
dbfilename dump.rdb
5.3.3 說明:數據備份可以通過定期備份該文件實現。
5.3.4 另外,從網上看到說redis不能將內存數據轉存到硬盤上,這個問題我也遇到了,後來發現是用戶權限的問題,最開始啓動redis我使用的root用戶,後來使用wap用戶就發現
不能將數據寫入硬盤,這是因爲dump.rdb已經是root權限了,不知道說redis不能存儲到硬盤的人是不是和我犯了同樣的錯誤。
5.3.5 另外,我發現執行redis-benchmark命令時也會將內存數據寫入硬盤。
5.3.6 redis-benchmark:檢查當前機器的處理性能。
6、強制保存內存數據到硬盤
因爲redis是異步寫入磁盤的,如果要讓內存中的數據馬上寫入硬盤可以執行如下命令:
redis-cli save 或者 redis-cli -p 6380 save(指定端口)
注意,以上部署操作需要具備一定的權限,比如複製和設定內核參數等。
7、同步機制
redis實現的同步機制相對簡單,缺少同步機制常見的check point和校驗機制。
在運行時,如果master -> slave同步請求轉發被丟棄, slave將無法恢復該請求的相關信息,直到slave重啓時從master全量加載數據時才能修復。因此,建議使用redis儘量利用其key/value和value支持多種類型的特性,存儲一些相對不重要的數據。
以上文章摘自:
http://zhumeng8337797.blog.163.com/blog/static/100768914201121325626422/
http://www.oschina.net/question/12_18065
補充的部分:
Redis安裝
Redis是一種高級key-value數據庫。它跟memcached類似,不過數據可以持久化,而且支持的數據類型很豐富。有字符串,鏈表,集合和有序集合。支持在服務器端計算集合的並,交和補集(difference)等,還支持多種排序功能。所以Redis也可以被看成是一個數據結構服務 器。
Redis的所有數據都是保存在內存中,然後不定期的通過異步方式保存到磁盤上(這稱爲“半持久化模式”);也可以把每一次數據變化都寫入到一個appendonly file(aof)裏面(這稱爲“全持久化模式”)。
一、下載最新版
wgethttp://redis.googlecode.com/files/redis-2.0.4.tar.gz
二、解壓縮
tar redis-2.0.4.tar.gz
三、安裝C/C++的編譯組件(非必須)
apt-get install build-essential
四、編譯
cd redis-2.0.4
make
make命令執行完成後,會在當前目錄下生成本個可執行文件,分別是redis-server、redis-cli、redis-benchmark、redis-stat,它們的作用如下:
redis-server:Redis服務器的daemon啓動程序
redis-cli:Redis命令行操作工具。當然,你也可以用telnet根據其純文本協議來操作
redis-benchmark:Redis性能測試工具,測試Redis在你的系統及你的配置下的讀寫性能
redis-stat:Redis狀態檢測工具,可以檢測Redis當前狀態參數及延遲狀況
在後面會有這幾個命令的說明,當然是從網上抄的。。。
五、修改配置文件
/etc/sysctl.conf
添加
vm.overcommit_memory=1
刷新配置使之生效
sysctl vm.overcommit_memory=1
補充介紹:
**如果內存情況比較緊張的話,需要設定內核參數:
echo 1 > /proc/sys/vm/overcommit_memory
內核參數說明如下:
overcommit_memory文件指定了內核針對內存分配的策略,其值可以是0、1、2。
0, 表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。
1, 表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。
2, 表示內核允許分配超過所有物理內存和交換空間總和的內存
**編輯redis.conf配置文件(/etc/redis.conf),按需求做出適當調整,比如:
daemonize yes #轉爲守護進程,否則啓動時會每隔5秒輸出一行監控信息
save 60 1000 #減小改變次數,其實這個可以根據情況進行指定
maxmemory 256000000 #分配256M內存
在我們成功安裝Redis後,我們直接執行redis-server即可運行Redis,此時它是按照默認配置來運行的(默認配置甚至不是後臺運行)。我們希望Redis按我們的要求運行,則我們需要修改配置文件,Redis的配置文件就是我們上面第二個cp操作的redis.conf文件,目前 它被我們拷貝到了/usr/local/redis/etc/目錄下。修改它就可以配置我們的server了。如何修改?下面是redis.conf的主 要配置參數的意義:
daemonize:是否以後臺daemon方式運行
pidfile:pid文件位置
port:監聽的端口號
timeout:請求超時時間
loglevel:log信息級別
logfile:log文件位置
databases:開啓數據庫的數量
save * *:保存快照的頻率,第一個*表示多長時間,第三個*表示執行多少次寫操作。在一定時間內執行一定數量的寫操作時,自動保存快照。可設置多個條件。
rdbcompression:是否使用壓縮
dbfilename:數據快照文件名(只是文件名,不包括目錄)
dir:數據快照的保存目錄(這個是目錄)
appendonly:是否開啓appendonlylog,開啓的話每次寫操作會記一條log,這會提高數據抗風險能力,但影響效率。
appendfsync:appendonlylog如何同步到磁盤(三個選項,分別是每次寫都強制調用fsync、每秒啓用一次fsync、不調用fsync等待系統自己同步)
下面是一個略做修改後的配置文件內容:
daemonize yes
pidfile /usr/local/redis/var/redis.pid
port 6379
timeout 300
loglevel debug
logfile /usr/local/redis/var/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
rdbcompression yes
dbfilename dump.rdb
dir /usr/local/redis/var/
appendonly no
appendfsync always
glueoutputbuf yes
shareobjects no
shareobjectspoolsize 1024
將上面內容寫爲redis.conf並保存到/usr/local/redis/etc/目錄下
然後在命令行執行:
1 |
/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf |
即可在後臺啓動redis服務,這時你通過
1 |
telnet 127.0.0.1 6379 |
即可連接到你的redis服務。
六、啓動服務並驗證
啓動服務器
./redis-server
或
$redis-server /etc/redis.conf
查看是否成功啓動
$ ps -ef | grep redis
或
./redis-cli ping
PONG
七、啓動命令行客戶端賦值取值
redis-cli set mykey somevalue
./redis-cli get mykey
八、添加到開機啓動
vi /etc/rc.d/rc.local
redis-server /usr/local/redis/etc/redis.conf
最後還要開放redis的端口,否則客戶端無法連接。方法如下:
vi /etc/sysconfig/iptables #需要具備其修改權限
增加一行:
# redis
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -jACCEPT
保存後重啓iptables:
service iptables restart (PATH中加入了/sbin/)或者 /etc/init.d/iptables restart
九.關閉服務
[wap@hanqunfeng redis-1.2.6]$ redis-cli shutdown
如果端口變化可以指定端口: redis-cli -p 6380 shutdown
這時內存中的數據會自動寫入到硬盤,文件地址是在redis.conf裏配置的:
dbfilename dump.rdb
說明:數據備份可以通過定期備份該文件實現。
另 外,從網上看到說redis不能將內存數據轉存到硬盤上,這個問題我也遇到了,後來發現是用戶權限的問題,最開始啓動redis我使用的root用戶,後來使用wap用戶就發現不能將數據寫入硬盤,這是因爲dump.rdb已經是root權限了,不知道說redis不能存儲到硬盤的人是不是和我犯了同樣的 錯誤。
另外,我發現執行redis-benchmark命令時也會將內存數據寫入硬盤。
redis-benchmark:檢查當前機器的處理性能。
重啓服務後再次取值,取值成功
[wap@hanqunfeng redis-1.2.6]$
[wap@hanqunfeng redis-1.2.6]$ redis-server /etc/redis.conf
New pid: 12797
[wap@hanqunfeng redis-1.2.6]$ redis-cli get name
value
強制保存內存數據到硬盤
因爲redis是異步寫入磁盤的,如果要讓內存中的數據馬上寫入硬盤可以執行如下命令:
redis-cli save 或者 redis-cli -p 6380 save(指定端口)
注意,以上部署操作需要具備一定的權限,比如複製和設定內核參數等。
ok,redis配置完成。
配置文件篇:
如果認爲Redis是一個key value存儲, 可以使用它來代替MySQL;如果認爲它是一個可以持久化的cache, 可能只是用它保存一些頻繁訪問的臨時數據(代替Memcached);除此之外,還可以把Redis當做一個輕量級的消息隊列使用,因爲它內置就支持list數據結構和PUB/SUB命令;還可以當做一個輕量級的分佈式鎖系統。Redis是REmote DIctionary Server的縮寫,在Redis在官方網站的解釋是:
Redis is an open source, advanced key-value store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets and sorted sets.
本文將會詳細介紹Redis的配置文件。
1. Redis默認不是以守護進程的方式運行,可以通過該配置項修改,使用yes啓用守護進程
daemonize no
2. 當Redis以守護進程方式運行時,Redis默認會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定
pidfile /var/run/redis.pid
3. 指定Redis監聽端口,默認端口爲6379,作者在自己的一篇博文中解釋了爲什麼選用6379作爲默認端口,因爲6379在手機按鍵上MERZ對應的號碼,而MERZ取自意大利歌女Alessia Merz的名字
port 6379
4. 綁定的主機地址
bind 127.0.0.1
5.當 客戶端閒置多長時間後關閉連接,如果指定爲0,表示關閉該功能
timeout 300
6. 指定日誌記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,默認爲verbose
loglevel verbose
7. 日誌記錄方式,默認爲標準輸出,如果配置Redis爲守護進程方式運行,而這裏又配置爲日誌記錄方式爲標準輸出,則日誌將會發送給/dev/null
logfile stdout
8. 設置數據庫的數量,默認數據庫爲0,可以使用SELECT <dbid>命令在連接上指定數據庫id
databases 16
9. 指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合
save <seconds> <changes>
Redis默認配置文件中提供了三個條件:
save 900 1 save 300 10 save 60 10000
分別表示900秒(15分鐘)內有1個更改,300秒(5分鐘)內有10個更改以及60秒內有10000個更改。
10. 指定存儲至本地數據庫時是否壓縮數據,默認爲yes,Redis採用LZF壓縮,如果爲了節省CPU時間,可以關閉該選項,但會導致數據庫文件變的巨大
rdbcompression yes
11. 指定本地數據庫文件名,默認值爲dump.rdb
dbfilename dump.rdb
12. 指定本地數據庫存放目錄
dir ./
13. 設置當本機爲slav服務時,設置master服務的IP地址及端口,在Redis啓動時,它會自動從master進行數據同步
slaveof <masterip> <masterport>
14. 當master服務設置了密碼保護時,slav服務連接master的密碼
masterauth <master-password>
15. 設置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過AUTH <password>命令提供密碼,默認關閉
requirepass foobared
16. 設置同一時間最大客戶端連接數,默認無限制,Redis可以同時打開的客戶端連接數爲Redis進程可以打開的最大文件描述符數,如果設置maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息
maxclients 128
17. 指定Redis最大內存限制,Redis在啓動時會把數據加載到內存中,達到最大內存後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理後,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內存,Value會存放在swap區
maxmemory <bytes>
18. 指定是否在每次更新操作後進行日誌記錄,Redis在默認情況下是異步的把數據寫入磁盤,如果不開啓,可能會在斷電時導致一段時間內的數據丟失。因爲redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於內存中。默認爲no
appendonly no
19. 指定更新日誌文件名,默認爲appendonly.aof
appendfilename appendonly.aof
20. 指定更新日誌條件,共有3個可選值:
no:表示等操作系統進行數據緩存同步到磁盤(快)
always:表示每次更新操作後手動調用fsync()將數據寫到磁盤(慢,安全)
everysec:表示每秒同步一次(折衷,默認值)
appendfsync everysec
21. 指定是否啓用虛擬內存機制,默認值爲no,簡單的介紹一下,VM機制將數據分頁存放,由Redis將訪問量較少的頁即冷數據swap到磁盤上,訪問多的頁面由磁盤自動換出到內存中(在後面的文章我會仔細分析Redis的VM機制)
vm-enabled no
22. 虛擬內存文件路徑,默認值爲/tmp/redis.swap,不可多個Redis實例共享
vm-swap-file /tmp/redis.swap
23. 將所有大於vm-max-memory的數據存入虛擬內存,無論vm-max-memory設置多小,所有索引數據都是內存存儲的(Redis的索引數據就是keys),也就是說,當vm-max-memory設置爲0的時候,其實是所有value都存在於磁盤。默認值爲0
vm-max-memory 0
24. Redis swap文件分成了很多的page,一個對象可以保存在多個page上面,但一個page上不能被多個對象共享,vm-page-size是要根據存儲的數據大小來設定的,作者建議如果存儲很多小對象,page大小最好設置爲32或者64bytes;如果存儲很大大對象,則可以使用更大的page,如果不確定,就使用默認值
vm-page-size 32
25. 設置swap文件中的page數量,由於頁表(一種表示頁面空閒或使用的bitmap)是在放在內存中的,,在磁盤上每8個pages將消耗1byte的內存。
vm-pages 134217728
26. 設置訪問swap文件的線程數,最好不要超過機器的核數,如果設置爲0,那麼所有對swap文件的操作都是串行的,可能會造成比較長時間的延遲。默認值爲4
vm-max-threads 4
27. 設置在向客戶端應答時,是否把較小的包合併爲一個包發送,默認爲開啓
glueoutputbuf yes
28. 指定在超過一定的數量或者最大的元素超過某一臨界值時,採用一種特殊的哈希算法
hash-max-zipmap-entries 64 hash-max-zipmap-value 512
29. 指定是否激活重置哈希,默認爲開啓(後面在介紹Redis的哈希算法時具體介紹)
activerehashing yes
30. 指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件
include /path/to/local.conf
本文完整的介紹了Redis配置文件,希望對大家有用。
補充說明部分:
簡述: redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)和zset(有序集合)。這些數據類型都支持push/pop、add/remove及取交集並集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,爲了保證效率,數據都是緩存在內存中。區別的是redis會週期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,並且在此基礎上實現了master-slave(主從)同步。
環境:CentOS 5.5 x64
下載安裝:
- cd /root/tools
- wget http://redis.googlecode.com/files/redis-2.4.2.tar.gz
- tar zxvf redis-2.4.2.tar.gz
- cd redis-2.4.2
- make && make install
- cp redis.conf /etc/
- cd
- daemonize yes
- pidfile /var/run/redis.pid
- port 6379
- #bind 127.0.0.1
- timeout 600
- loglevel notice
- logfile /elain/logs/redis/redis.log
- databases 16
- save 900 1
- save 300 10
- save 60 10000
- rdbcompression yes
- dbfilename dump.rdb
- dir /elain/data/redis/
- # maxclients 128
- appendonly yes
- appendfilename appendonly.aof
- # appendfsync always
- appendfsync everysec
- # appendfsync no
- requirepass elain
- no-appendfsync-on-rewrite no
- auto-aof-rewrite-percentage 100
- auto-aof-rewrite-min-size 64mb
- slowlog-log-slower-than 10000
- slowlog-max-len 1024
- really-use-vm yes
- vm-enabled yes
- vm-swap-file /tmp/redis.swap
- vm-max-memory 0
- vm-page-size 32
- vm-pages 134217728
- vm-max-threads 4
- hash-max-zipmap-entries 512
- hash-max-zipmap-value 64
- list-max-ziplist-entries 512
- list-max-ziplist-value 64
- set-max-intset-entries 512
- zset-max-ziplist-entries 128
- zset-max-ziplist-value 64
- activerehashing yes
- # include /path/to/local.conf
- # include /path/to/other.conf
啓動:#redis-server /etc/redis.conf
開機加自啓動:# echo "redis-server /etc/redis.conf" >> /etc/rc.local
測試:$redis-cli -a elain (注意端口:$redis-cli -p 8359)
查看狀態信息:$redis-cli info
主從同步配置:
只需把/etc/redis.conf 複製到 從機上,主、從機上把127.0.0.1 IP 改成本機ip,然後在從機上的redis.conf 裏添加以下幾行,重啓即可:
- slave-serve-stale-data yes
- slaveof 主服務器IP 6379
- masterauth <master-password>
注:以上主從配置做了密碼驗證,也可不做驗證,不用加masterauth 選項
附上啓動腳本:
腳本用法:/etc/init.d/redis-server start|restart|stop
- #!/bin/sh
- #
- # redis - this script starts and stops the redis-server daemon
- #
- # chkconfig: - 85 15
- # description: Redis is a persistent key-value database
- # processname: redis-server
- # config: /etc/redis.conf
- # config: /etc/sysconfig/redis
- # pidfile: /var/run/redis.pid
- # Source function library.
- . /etc/rc.d/init.d/functions
- # Source networking configuration.
- . /etc/sysconfig/network
- # Check that networking is up.
- [ "$NETWORKING" = "no" ] && exit 0
- redis="/usr/local/bin/redis-server"
- prog=$(basename $redis)
- REDIS_CONF_FILE="/etc/redis.conf"
- [ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis
- lockfile=/var/lock/subsys/redis
- start() {
- [ -x $redis ] || exit 5
- [ -f $REDIS_CONF_FILE ] || exit 6
- echo -n $"Starting $prog: "
- daemon $redis $REDIS_CONF_FILE
- retval=$?
- echo
- [ $retval -eq 0 ] && touch $lockfile
- return $retval
- }
- stop() {
- echo -n $"Stopping $prog: "
- killproc $prog -QUIT
- retval=$?
- echo
- [ $retval -eq 0 ] && rm -f $lockfile
- return $retval
- }
- restart() {
- stop
- start
- }
- reload() {
- echo -n $"Reloading $prog: "
- killproc $redis -HUP
- RETVAL=$?
- echo
- }
- force_reload() {
- restart
- }
- rh_status() {
- status $prog
- }
- rh_status_q() {
- rh_status >/dev/null 2>&1
- }
- case "$1" in
- start)
- rh_status_q && exit 0
- $1
- ;;
- stop)
- rh_status_q || exit 0
- $1
- ;;
- restart|configtest)
- $1
- ;;
- reload)
- rh_status_q || exit 7
- $1
- ;;
- force-reload)
- force_reload
- ;;
- status)
- rh_status
- ;;
- condrestart|try-restart)
- rh_status_q || exit 0
- ;;
- *)
- echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
- exit 2
- esac
redis官方文檔:http://redis.io/documentation
redis官方操作命令全集:http://redis.io/commands
reids 各接口使用方法請參考官方文檔
附錄:
配置文件 redis.conf 詳解
daemonize yes #是否以後臺進程運行,默認爲no
pidfile /var/run/redis.pid #如以後臺進程運行,則需指定一個pid,默認爲/var/run/redis.pid
bind 127.0.0.1 #綁定主機IP,默認值爲127.0.0.1(註釋)
port 6379 #監聽端口,默認爲6379
timeout 300 #超時時間,默認爲300(秒)
loglevel notice #日誌記slave-serve-stale-data yes:在master服務器掛掉或者同步失敗時,從服務器是否繼續提供服務。錄等級,有4個可選值,debug,verbose(默認值),notice,warning
logfile /var/log/redis.log #日誌記錄方式,默認值爲stdout
databases 16 #可用數據庫數,默認值爲16,默認數據庫爲0
save 900 1 #900秒(15分鐘)內至少有1個key被改變
save 300 10 #300秒(5分鐘)內至少有300個key被改變
save 60 10000 #60秒內至少有10000個key被改變
rdbcompression yes #存儲至本地數據庫時是否壓縮數據,默認爲yes
dbfilename dump.rdb #本地數據庫文件名,默認值爲dump.rdb
dir ./ #本地數據庫存放路徑,默認值爲 ./
slaveof 10.0.0.12 6379 #當本機爲從服務時,設置主服務的IP及端口(註釋)
masterauth elain #當本機爲從服務時,設置主服務的連接密碼(註釋)
slave-serve-stale-data yes #在master服務器掛掉或者同步失敗時,從服務器是否繼續提供服務。
requirepass elain #連接密碼(註釋)
maxclients 128 #最大客戶端連接數,默認不限制(註釋)
maxmemory <bytes> #設置最大內存,達到最大內存設置後,Redis會先嚐試清除已到期或即將到期的Key,當此方法處理後,任到達最大內存設置,將無法再進行寫入操作。(註釋)
appendonly no #是否在每次更新操作後進行日誌記錄,如果不開啓,可能會在斷電時導致一段時間內的數據丟失。因爲redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於內存中。默認值爲no
appendfilename appendonly.aof #更新日誌文件名,默認值爲appendonly.aof(註釋)
appendfsync everysec #更新日誌條件,共有3個可選值。no表示等操作系統進行數據緩存同步到磁盤,always表示每次更新操作後手動調用fsync()將數據寫到磁盤,everysec表示每秒同步一次(默認值)。
really-use-vm yes
vm-enabled yes #是否使用虛擬內存,默認值爲no
vm-swap-file /tmp/redis.swap #虛擬內存文件路徑,默認值爲/tmp/redis.swap,不可多個Redis實例共享
vm-max-memory 0 #vm大小限制。0:不限制,建議60-80% 可用內存大小。
vm-page-size 32 #根據緩存內容大小調整,默認32字節。
vm-pages 134217728 #page數。每 8 page,會佔用1字節內存。
vm-page-size #vm-pages 等於 swap 文件大小
vm-max-threads 4 #vm 最大io線程數。注意: 0 標誌禁止使用vm
hash-max-zipmap-entries 512
hash-max-zipmap-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
activerehashing yes
本文出自 “elain的技術博客” 博客,請務必保留此出處http://elain.blog.51cto.com/3339379/705846
補充的知識:
redis作爲NoSQL數據庫的一種應用,響應速度和命中率上還是比較高效的。項目中需要用集中式可橫向擴展的緩存框架,做了一點調研,即便redis、memcached存在效率上的差異(具體比較參考http://timyang.net/data/mcdb-tt-redis/),但其實都能滿足目前項目的需求;但是redis還是比較風騷的,支持鏈表和集合操作,支持正則表達式查找key,目前項目緩存的結果大多是鏈表,如果鏈表新增或者修改數據的話,redis就體現出了極大的優勢(memcached只能重新加載鏈表,redis可以對鏈表新增或者修改)
1:下載redis
下載地址 http://code.google.com/p/redis/downloads/list
推薦下載redis-1.2.6.tar.gz,之前這個版本同事已經有成功安裝運行的經驗,redis-2.0.4.tar.gz 這個版本我安裝後無法操作緩存數據,具體原因後續再說
2:安裝redis
下載後解壓 tar zxvf redis-1.2.6.tar.gz 到任意目錄,例如/usr/local/redis-1.2.6
解壓後,進入redis目錄
cd /usr/local/redis-1.2.6
make
拷貝文件
cp redis.conf /etc/ 這個文件時redis啓動的配置文件
cp redis-benchmark redis-cli redis-server /usr/bin/ #這個倒是很有用,這樣就不用再執行時加上./了,而且可以在任何地方執行
設置內存分配策略(可選,根據服務器的實際情況進行設置)
/proc/sys/vm/overcommit_memory
可選值:0、1、2。
0, 表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。
1, 表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。
2, 表示內核允許分配超過所有物理內存和交換空間總和的內存
值得注意的一點是,redis在dump數據的時候,會fork出一個子進程,理論上child進程所佔用的內存和parent是一樣的,比如parent佔用的內存爲8G,這個時候也要同樣分配8G的內存給child,如果內存無法負擔,往往會造成redis服務器的down機或者IO負載過高,效率下降。所以這裏比較優化的內存分配策略應該設置爲
1(表示內核允許分配所有的物理內存,而不管當前的內存狀態如何)
開啓redis端口,修改防火牆配置文件
vi /etc/sysconfig/iptables
加入端口配置
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT
重新加載規則
service iptables restart
3:啓動redis服務
[root@Architect redis-1.2.6]# pwd
/usr/local/redis-1.2.6
[root@Architect redis-1.2.6]# redis-server /etc/redis.conf查看進程,確認redis已經啓動
[root@Architect redis-1.2.6]# ps -ef | grep redis
root 401 29222 0 18:06 pts/3 00:00:00 grep redisroot 29258 1 0 16:23 ? 00:00:00 redis-server /etc/redis.conf
如果這裏啓動redis服務失敗,一般情況下是因爲redis.conf文件有問題,建議檢查或找個可用的配置文件進行覆蓋,避免少走彎路,這裏建議,
修改redis.conf,設置redis進程爲後臺守護進程
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
daemonize yes
4:測試redis
[root@Architect redis-1.2.6]# redis-cli (注意端口:redis-cli -p 8359)
redis> set name songbin
OK
redis> get name
"songbin"
5:關閉redis服務
#redis-cli shutdown
redis服務關閉後,緩存數據會自動dump到硬盤上,硬盤地址爲redis.conf中的配置項dbfilename dump.rdb所設定
#redis-cli save 或者 redis-cli -p 6380 save(指定端口)
本文轉自:http://www.oschina.net/question/12_18065