安装Redis
希望将Redis安装在此目录下:
/usr/local/redis
参考http://redis.io/download的安装说明,做调整:
$ mkdir /usr/local/redis
$ cd /usr/local/src
$ wget http://download.redis.io/releases/redis-2.6.14.tar.gz
$ tar xzf redis-2.6.14.tar.gz
$ ln -s redis-2.6.14 redis #建立一个链接
$ cd redis
$ make PREFIX=/usr/local/redis install #安装到指定目录中
可能遇到的错误,解决如下:
>>提示1:
make[3]: gcc:命令未找到
>>解决
yum -y install gcc-c++
>>提示2:
在包含自 adlist.c:34 的文件中:
zmalloc.h:50:31: 错误:jemalloc/jemalloc.h:没有那个文件或目录
zmalloc.h:55:2: 错误:#error "Newer version of jemalloc required"
>> 解决
make的时候加上 MALLOC=libc 参数
make PREFIX=/data/apps/redis2.6.14 MALLOC=libc install
注意上面的最后一行,我们通过PREFIX指定了安装的目录。如果make失败,一般是你们系统中还未安装gcc,那么可以通过yum安装之:
yum install gcc
安装完成后,则执行make.
在安装redis成功后,你将可以在/usr/local/redis看到一个bin的目录,里面包括了以下文件:
redis-benchmark
redis-check-aof
redis-check-dump
redis-cli
redis-server
将Redis做成一个服务
1.复制脚本到/etc/rc.d/init.d目录
按以上步骤安装Redis时,其服务脚本位于:
/usr/local/src/redis/utils/redis_init_script
必须将其复制到/etc/rc.d/init.d的目录下:
cp /usr/local/src/redis/utils/redis_init_script /etc/rc.d/init.d/redis
以下将redis_init_script复制到/etc/rc.d/init.d/,同时易名为redis。
如果这时,我们直接注册服务:
chkconfig --add redis
将报以下错误:
redis服务不支持chkconfig
为些,我们需要更改redis的脚本,请看下节说明。
2.更改redis的服务脚本
vim /etc/rc.d/init.d/redis
看到以下的文件内容:
#!/bin/bash
#chkconfig: 2345 80 90
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=6379
EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/etc/redis/${REDISPORT}.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
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
1)解决无法注册的问题:
原文件是没有以下第2行的内容的,
#chkconfig: 2345 80 90
这时如果注册将报错,要添加再注册就OK了。
2)更改EXEC、CLIEXEC参数,设置对应的值,如上所示即和我们前面安装的一致。
3)更改redis开启的命令,以后台运行的方式执行:
$EXEC $CONF &
注意后面的那个“&”,即是将服务转到后面运行的意思,否则启动服务时,Redis服务将
占据在前台,占用了主用户界面,造成其它的命令执行不了。
4)将redis配置文件拷贝到/etc/redis/${REDISPORT}.conf
mkdir /etc/redis
cp /usr/local/src/redis/redis.conf /etc/redis/6379.conf
这样redis服务脚本指定的CONF就存在了。默认情况下,Redis未启用认证,可以通过开启6379.conf的requirepass 指定一个验证密码。
以上操作完成后,即可注册服务:
chkconfig --add redis
启动Redis服务
$ service redis start
将Redis的命令所在目录添加到系统参数PATH中
修改profile文件:
#vi /etc/profile
在最后行添加:
export PATH="$PATH:/usr/local/redis/bin"
然后马上应用这个文件:
./etc/profile
这样就可以直接调用redis-cli的命令了,如下所示:
$ redis-cli
redis 127.0.0.1:6379> auth superman
OK
redis 127.0.0.1:6379> ping
PONG
redis 127.0.0.1:6379>
由于上面我开启了安全验证功能,密码为superman,因此需要auth后才能和服务器交互。
配置优化:
• 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
daemonize no ---> daemonize yes
• 2.当 客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能,单位是毫秒
timeout 3000
• 3.指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes ---> rdbcompression no
• 4.设置同一时间最大客户端连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件描述符数。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息
#maxclients 10000 ---> maxclients 10000
• 5.指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区
#maxmemory <bytes> ---> maxmemory <根据服务器自己设定>
• 6.指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
appendonly no ---> appendonly yes
• 7.指定本地数据库存放目录<可以选择容量适中,安全的磁盘>
dir ./ ---> dir /data/redis/data/
• 8.数据备份<主从设置> && 集群搭建
slaveof <masterip> <masterport>
• Snapshotting
快照是默认的持久化方式。这种方式将内存中数据以快照的方式写入到二进制文件中,默认的文件名为dump.rdb。可以配置自动做快照持久 化的方式。我们可以配置redis在n秒内如果超过m个key被修改就自动做快照,下面是默认的快照保存配置
save 900 1 #900秒内如果超过1个key被修改,则发起快照保存
save 300 10 #300秒内容如超过10个key被修改,则发起快照保存
save 60 10000
• loglevel notice
指定输出消息的级别
# debug (调试级别,详细信息,信息量大)
# verbose (详细信息,信息量较大)
# notice (通知,生产环境推荐)
# warning (错误信息警告信息)
• logfile /var/log/redis.log
日志输出文件,默认在前端运行的时候此key的默认值是stdout输出到终端,如果用守护进程运行此key的stdout的时候将日志输入到/dev/null,如果想记录日志,就必须为其指定logfile位置
logfile /var/log/redis.log