首页 > Linux, Redis > 初识Redis

初识Redis

在进行缓存技术选型时,Redis越来越受到开发者的青睐。主要原因有以下几点:

  • Redis在支持k/v类型数据的同时还提供list,set,hash等数据结构的存储
  • 通过RDB和AOF对数据进行持久化操作
  • 在性能上与memcached不相上下
  • 支持Master-Slave 主从同步

1.持久化原理

Redis持久化主要通过RDB和AOF方式

1.1 RDB,默认的持久化方式

RDB的方式说白了就是把数据一次性从内存导出来存储在本地磁盘的rdb为后缀的二进制文件中,这种持久化方式被称为快照(snapshot)。注意不是增量导出。可以通过执行 SAVE或者 BGSAVE 命令进行手动备份数据。SAVE和BGSAVE 区别在于 SAVE执行者为Redis主进程,BGSAVE则fork 出一个新子进程负责将数据保存到磁盘。可以通过修改 redis.conf , 让它在“N 秒内数据集至少有 M 个改动”这一条件被满足时, 自动保存一次数据集。比如save  864000 1 //每天备份一次。由于RDB的工作方式,它特别适合做数据备份和恢复操作,但是又由于每次操作是全局导出耗时较长,在客户端大量请求的时候容易造成无法响应。一旦发生故障停机, 你就可能会丢失一段时间的数据。

1.2 AOF

AOF(Append Only File)工作方式是把所有的写操作命令以redis协议格式保存在aof文件中,新命令会被追加到文件的末尾。在服务器启动时,通过重新执行这些命令来还原数据集。AOF 文件是一个只进行追加操作的日志文件。同时Redis 在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的实际大小。AOF 的默认策略为每秒钟 fsync 一次,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据( fsync 会在后台线程执行,所以主线程可以继续努力地处理命令请求)。缺点是在处理巨大的写入载入时,不能提供最大延迟保障。注意 redis安装完之后默认是不开启aof功能,需要修改redis.conf 中 把”appendonly no“ 改成 ”appendonly yes“。

2.安装Redis

cd /usr/local
wget http://download.redis.io/releases/redis-2.8.13.tar.gz
tar zxvf redis-2.8.13.tar.gz
mv redis-2.8.13 redis
cd redis
make
make install

修改/usr/local/redis/redis.conf, 把”daemonize no”  改成”daemonize yes”,设置服务为后台运行
logfile /var/log/redis/redis.log//设置日志输出目录

接着把redis增加到系统服务中且设置开机启动

编辑 vim /etc/init.d/redis

# chkconfig: 2345 10 90
# description: Start and Stop redis

PATH=/usr/local/bin:/sbin:/usr/bin:/bin

REDISPORT=6379 
EXEC=/usr/local/redis/src/redis-server 
REDIS_CLI=/usr/local/redis/src/redis-cli 

PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis/redis.conf" 

case "$1" in
        start)
                if [ -f $PIDFILE ]
                then
                        echo "$PIDFILE exists, process is already running or crashed."
                else
                        echo "Starting Redis server..."
                        $EXEC $CONF
                fi
                if [ "$?"="0" ]
                then
                        echo "Redis is running..."
                fi
                ;;
        stop)
                if [ ! -f $PIDFILE ]
                then
                        echo "$PIDFILE exists, process is not running."
                else
                        PID=$(cat $PIDFILE)
                        echo "Stopping..."
                        $REDIS_CLI -p $REDISPORT SHUTDOWN
                        while [ -x $PIDFILE ]
                        do
                                echo "Waiting for Redis to shutdown..."
                                sleep 1
                        done
                        echo "Redis stopped"
                fi
                ;;
        restart|force-reload)
                ${0} stop
                ${0} start
                ;;
        *)
                echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
                exit 1
esac
#修改执行权限
chmod +x /etc/init.d/redis
# 设置服务开机启动
chkconfig redis on
#启动服务
service redis start

3.redis.conf 

这边主要解释一些重要参数

#开启AOF持久化
appendonly yes
#设置在rewrite的时候是否对新的写操作进行fsync。no表示进行fsync,yes表示不进行。建议设置成yes
no-appendfsync-on-rewrite yes

Tips

1.由于RDB方式没办法设置具体的时间备份数据,可能会影响到正常请求。

这边建议通过crontab方式http://redis4you.com/articles.php?id=010

2.监控

redis-cli info

参考 http://redis.io/topics/persistence

参考 http://redis.io/topics/quickstart

 

分类: Linux, Redis 标签: , , , , ,
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
*