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=$?
    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


然后增加服务并开机自启动:
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端口号)
先重启主机,再重启从机