天天看点

redis安装,+主从安装

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端口号)

先重启主机,再重启从机

继续阅读