场景:项目开发中需要用到redis,之前自己对于缓存这块一直不是很理解,所以一直有从头做起的想法。
本文详细介绍redis单机单实例安装与配置,服务及开机自启动。如有不对的地方,欢迎大家拍砖o(∩_∩)o
(以下配置基于CentOS release 6.5 Final, redis版本3.0.2 [redis版本号中间位是偶数的是稳定版,奇数的为非稳定版])
参考知识:Redis知识库http://lib.csdn.net/base/redis
1 安装redis
这里特别提示下,Linux下安装redis最好使用root权限,否则会遇到很多麻烦,很可能不能保证下面的步骤能够正常进行。
1.1 下载redis安装包
可去官网http://redis.io ,也可通过wget命令,
wget http://download.redis.io/redis-stable.tar.gz
1.2 解压
tar -zxvf redis-stable.tar.gz
1.3 编译、安装
cd redis-stable make
Problem:
如果提示gcc command不识别,请自行安装gcc;
如果提示couldn’t execute tcl : no such file or dicrectory,请自行安装tcl;
如果提示
请执行make distclean,然后再make
Make成功之后,会在src目录下多出一些文件,如下
手动拷贝redis-server、redis-cli、redis-check-aof、redis-check-dump等至/usr/local/bin目录下,也可执行make install,此处执行make install(为什么要这么做不清楚)
make install
cd /usr/local/bin/
ll
可查看,/usr/local/bin下已有这些文件。
注意:若此时执行redis-server –v (查看版本命令),若提示redis-server command not found,则需要将/usr/local/bin目录加到环境变量,如何添加,此处不做详细介绍,可查看修改/etc/profile,(查看环境变量命令:echo $PATH)
/usr/local/bin/redis-server –v
正常如下
至此,redis安装完成,接着配置。
2 修改配置文件.conf
2.1 创建配置文件目录和其它三个文件目录
- 配置文件一般放在/etc/下,创建redis目录
cd /etc/ mkdir redis ll
ll 查看创建的redis目录
- 创建dump file 目录,进程pid目录,log目录等
dump file、进程pid、log目录等,一般放在/var/目录下,
cd /var/ mkdir redis cd redis mkdir data log run
- 查看已经创建的目录
cd /var/redis/
ll
至此,目录创建完毕
2.2 修改配置文件,配置参数
- 首先拷贝解压包下的redis.conf文件至/etc/redis
//这里有个cs408是因为在安装时候我用的是cs408这个用户安装的,建议直接用root用户安装,下面的命令是切换到redis的解压目录
cd /home/cs408/redis-stable/ ll
//复制
cp redis.conf /etc/redis/ //查看
cd /etc/redis/ ll
至此,配置文件复制完毕!
- 修改redis.conf文件
修改端口(默认6379)
修改pid目录为新建目录
pidfile /var/redis/run/redis.pid
修改dump目录为新建目录
dir /var/redis/data
修改log存储目录为新建目录
logfile /var/redis/log/redis.log
ps:在修改完log目录启动redis时候发现:不用root目录会一直报错。。。。。状况不明
2.3 持久化
默认rdb,可选择是否开启aof,若开启,修改配置文件appendonly(不理解)
2.4 启动redis,查看各目录下文件
先切换目录,再执行启动命令:
cd /usr/local/bin/
redis-server /etc/redis/redis.conf
或者 直接执行启动命令:
/usr/local/bin/redis-server /etc/redis/redis.conf
查看是否启动:
ps -ef | grep redis
查看是否占用6379端口号
netstat -tunpl | grep 6379
Problem:
查看dump, log, pid等
发现只有日志,没有dump和pid信息,是因为当前redis服务仍然是console模式运行的,且没有数据存储操作
停止redis服务,
pkill redis-server
或者使用命令:
/usr/local/bin/redis-cli shutdown
Answer:
修改配置文件使得redis在background运行
改成yes,保存,重启redis服务
查看redis启动日志:
cat /var/redis/log/redis.log
第一个标注是启动成功,第二个标注是关闭成功!
查看pid信息,如下
查看dump信息
若配置了aof持久化方式,data目录下还会有aof的相关文件
2.5 客户端连接redis
/usr/local/bin/redis-cli
默认端口6379
退出客户端
exit //或者
quit
2.6 redis的一些配置
daemonize如果需要在后台运行,把该项改为yes
pidfile配置多个pid的地质,默认在/var/ren/redis.pid
bind绑定ip,设置后只接受来自该ip的请求
port监听端口,默认为6379
timeout设置客户端连接时的超时时间,单位为秒
loglevel分为4级,debug、verbose、notice、warning
logfile配置log文件地址 databases 设置数据库的个数,默认使用的数据库为0
save设置redis进行数据库镜像的频率
rdbcompression在进行镜像备份时,是否进行压缩
Dbfilename镜像备份文件的文件名
Dir数据库镜像备份的文件放置路径
Slaveof设置数据库为其他数据库的从数据库
Masteauth主数据库连接需要的密码验证
Requirepass设置登陆时需要的使用的密码
Maxclients限制同时连接的客户数量
Maxmemory设置redis能够使用的最大内存
Appendonly开启append only模式
Appendfsync设置对appendonly.aof文件同步的频率
vm-enabled是否开启虚拟内存支持
vm-swap-file设置虚拟内存的交换文件路径
vm-max-memory设置redis使用的最大物理内存大小
vm-page-size设置虚拟内存的页大小
vm-pages设置交换文件的总的page数量
vm-max-threads设置VMIO同时使用的线程数量
Glueoutputbuf设置在向客户端应答时,是否把较小的包合并为一个包发送,默认为开启
hash-max-zipmap-entries设置hash的临界值
Activerehashing重置hash,默认为开启
至此,redis基础配置完毕,若有其他相关配置调整,可查找文档再修改
3 服务及开机自启动
3.1 创建redis启动脚本
拷贝解压包下utils下redis启动脚本至/etc/init.d/,修改脚本名称(也可不修改)为redis
cp /home/cs408/redis-stable/utils/redis_init_script /etc/init.d/redis
cd /etc/init.d/
查看ll
修改脚本pid及conf路径为实际路径
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli PIDFILE=/var/redis/run/redis.pid
CONF="/etc/redis/redis.conf"
这里切换到root用户,避免不必要的麻烦!
PS:生产环境下,配置时,配置文件、pid等最好加上端口标识,以便区分,如
根据启动脚本要求,将修改好的配置文件以端口为名复制一份到指定目录。需使用root用户。
保存
退出
至此,在/etc/init.d/目录下,已经可以通过service redis start/stop 命令启动和关闭redis
service redis start
service redis stop
若在其他目录下,不能够使用这2个命令,请继续配置3,2,添加权限
3.2 给启动脚本添加权限
chmod +x /etc/init.d/redis
实际命令,根据目录的不同,会不一样
相应的删除权限是
chmod –x /etc/init.d/redis
如果需要在开机的时候,redis服务自动启动,可继续3.3
3.3 设置自启动
设置为开机自启动服务器
chkconfig redis on
如果运行报错,提示
是因为没有在启动脚本里加入redis启动优先级信息,可添加如下
vi /etc/init.d/redis
#!/bin/sh
# chkconfig: 2345 90 10
# description: Redis is a persistent key-value database
#
再次执行chkconfig redis on,成功
至此,自启动配置完毕
3.4 自启动补充知识
接3.3自启动失败,进行处理:
service redis does not support chkconfig的解决办法
问题解决办法如下:
必须把下面两行注释放在/etc/init.d/redis文件靠前的注释中:
# chkconfig: 2345 90 10 # description: Redis is a persistent key-value database
上面的注释的意思是,redis服务必须在运行级2,3,4,5下被启动或关闭,启动的优先级是90,关闭的优先级是10。
附录:
linux 运行级别
运行级别就是操作系统当前正在运行的功能级别。这个级别从0到6 ,具有不同的功能。这些级别在/etc/inittab文件里指定。这个文件是init程序寻找的主要文件,最先运行的服务是那些放在/etc/rc.d 目录下的文件。
不同的运行级定义如下:(可以参考Linux里面的/etc/inittab)
# 缺省的运行级,RHS用到的级别如下:
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
对各个运行级的详细解释:
0 为停机,机器关闭。
1 为单用户模式,就像Win9x下的安全模式类似。
2 为多用户模式,但是没有NFS支持。
3 为完整的多用户模式,是标准的运行级。
4 一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本 电脑的电池用尽时,可以切换到这个模式来做一些设置。
5 就是X11,进到X Window系统了。
6 为重启,运行init 6机器就会重启。
chkconfig用法
chkconfig命令可以用来检查、设置系统的各种服务
使用语法:
chkconfig [--add][--del][--list][系统服务] 或 chkconfig [--level <等级代号>][系统服务][on/off/reset]
参数用法:
ps:下面的注释是参数,注意在参数前面还有一个‘“-”
–add 增加所指定的系统服务,让chkconfig指令得以管理它,并同时在系统启动的叙述文件内增加相关数据。
–del 删除所指定的系统服务,不再由chkconfig指令管理,并同时在系统启动的叙述文件内删除相关数据。
–level<等级代号> 指定读系统服务要在哪一个执行等级中开启或关毕。
使用范例:
chkconfig –-list 列出所有的系统服务 chkconfig –-add redis 增加redis服务 chkconfig –-del redis 删除redis 服务 chkconfig –-level redis 2345 on 把redis在运行级别为2、3、4、5的情况下都是on(开启)的状态。