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、一、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 redis
root 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> 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(指定端口)正則表達式