redis作為nosql資料庫的一種應用,響應速度和命中率上還是比較高效的。項目中需要用集中式可橫向擴充的緩存架構,做了一點調研,即便redis、memcached存在效率上的差異(具體比較參考http://timyang.net/data/mcdb-tt-redis/),但其實都能滿足目前項目的需求;但是redis還是比較風騷的,支援連結清單和集合操作,支援正規表達式查找key,目前項目緩存的結果大多是連結清單,如果連結清單新增或者修改資料的話,redis就展現出了極大的優勢(memcached隻能重新加載連結清單,redis可以對連結清單新增或者修改)
1:下載下傳redis
cd /opt/
wget http://redis.googlecode.com/files/redis-2.4.14.tar.gz
2:安裝redis
下載下傳後解壓到任意目錄,例如本文我放到/opt/下
tar zxvf redis-2.4.14.tar.gz
cd redis-2.4.14
make
make install
3:拷貝檔案
cp redis.conf /etc/
cd src/
cp redis-benchmark redis-cli redis-check-dump redis-server /usr/local/bin/
設定redis程序為背景守護程序:
sed -i "s/daemonize no/daemonize yes/g" /etc/redis.conf
4:啟動redis
redis-server /etc/redis.conf
5:測試redis
#redis-cli
redis 127.0.0.1:6379> set name bin
ok
redis 127.0.0.1:6379> get name
"bin"
redis 127.0.0.1:6379> exit
6:關閉redis服務
redis-cli shutdown
redis服務關閉後,緩存資料會自動dump到硬碟上,硬碟位址為redis.conf中的配置項dbfilename dump.rdb所設定
強制備份資料到磁盤,使用如下指令
redis-cli save 或者 redis-cli -p 6380 save(指定端口)
7:設定記憶體配置設定政策(可選,根據伺服器的實際情況進行設定)
/proc/sys/vm/overcommit_memory
可選值:0、1、2
0, 表示核心将檢查是否有足夠的可用記憶體供應用程序使用;如果有足夠的可用記憶體,記憶體申請允許;否則,記憶體申請失敗,并把錯誤傳回給應用程序。
1, 表示核心允許配置設定所有的實體記憶體,而不管目前的記憶體狀态如何。
2, 表示核心允許配置設定超過所有實體記憶體和交換空間總和的記憶體
vi /etc/sysctl.conf
vm.overcommit_memory = 1
然後應用生效:
sysctl –p
8:建立redis啟動腳本:
vim /etc/init.d/redis
#!/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 -eq 0 ] && rm -f $lockfile
restart() {
stop
start
reload() {
echo -n $"reloading $prog: "
killproc $redis -hup
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
restart|configtest)
reload)
rh_status_q || exit 7
force-reload)
force_reload
status)
rh_status
condrestart|try-restart)
;;
*)
echo $"usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
然後增加服務并開機自啟動:
chmod 755 /etc/init.d/redis
chkconfig --add redis
chkconfig --level 345 redis on
chkconfig --list redis
redis主從配置相當簡單,一些文章啰裡羅嗦的寫了一大篇,其實就兩句話:
打開從機的redis.conf
port 6381 (注:不能跟主機的一樣)
sleverof 192.168.109.149 6383 (注:ip為主機ip,6383為主機redis端口号)
先重新開機主機,再重新開機從機