安装采用源码编译安装方法:
$ wget http://download.redis.io/releases/redis-3.2.1.tar.gz
$ tar xzf redis-3.2.1.tar.gz
$ cd redis-3.2.1
$ make
完成以上操作后执行:
make test
有些机器因为没有安装一些软件就会有相应的错误提示,可自行查找再进行解决,例如我自己的机器就提示没有安装tcl,我用命令yum一些:
yum install -y tcl
最后make test通过测试,将redis的服务端和客户端拷贝到系统目录:
cp redis-server /usr/local/bin/
cp redis-cli /usr/local/bin/
然后新建目录,存放配置文件
mkdir /etc/redis
mkdir /var/redis
mkdir /var/redis/log
mkdir /var/redis/run
mkdir /var/redis/6379
在redis解压根目录中找到配置文件模板,复制到如下位置。
cp redis.conf /etc/redis/redis.conf
通过vim命令修改配置文件里面的参数:
daemonize yes
设置服务在后台运行
再设置一下redis的pid路径,日志路径,数据库存放路径
pidfile /var/redis/run/redis_6379.pid
logfile /var/redis/log/redis_6379.log
dir /var/redis/6379
编写脚本
vim /etc/init.d/redis
大致的配置文件如下
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
REDISPORT=6379
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/etc/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
;;
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
编辑后之后保存,设置开机启动项:
centos6系统:chkconfig redis on
如果系统是centos7系统,则需要写个开机启动脚本:
vim /etc/systemd/system/redis.service
脚本内容如下:
[Unit]
Description=Redis on port 6379
[Service]
User=nginx
Group=nginx
Type=forking
ExecStart=/etc/init.d/redis start
ExecStop=/etc/init.d/redis stop
[Install]
WantedBy=multi-user.target
centos7系统设置开机启动:systemctl enable redis.service
注意上面的User和Group配置,由于服务器用的nginx用户执行php程序,如果这里不设置redis的执行用户和用户组,默认是用root启动redis进程的,这样的话,当你用PHP的redis扩展来连接redis时候,由于权限问题,redis是拒绝连接的,因为nginx用户执行的php程序是无法访问root用户进程redis的,这个很重要。
启动redis后查看一下日志可以看到一些关于系统内存或内核的错误提示,这时需要修改一下配置:
配置 vm.overcommit_memory 为1,这可以避免数据被截断
sysctl -w vm.overcommit_memory=1
修改backlog连接数的最大值超过redis.conf中的 tcp-backlog 值,即默认值511。你可以在kernel.org 找到更多有关基于sysctl的ip网络隧道的信息。
sysctl -w net.core.somaxconn=512
取消对透明巨页内存(transparenthuge pages)的支持,因为这会造成redis使用过程产生延时和内存访问问题。
echo never > /sys/kernel/mm/transparent_hugepage/enabled
安装php的redis扩展
$ wget https://github.com/phpredis/phpredis/archive/2.2.4.tar.gz
$ cd phpredis-2.2.7 # 进入 phpredis 目录
$ /usr/local/php/bin/phpize # php安装后的路径
$ ./configure --with-php-config=/usr/local/php/bin/php-config
$ make && make install
修改php.ini文件
vi /etc/php.ini
添加一下记录:
extension=redis.so
重启php-fpm
systemctl restart php-fpm
查看phpinfo页面可以看见redis扩展支持。
安全设置:
默认安装的redis是无需密码就可以远程连接的,如果你不需要远程连接,就可以关闭,只需要在配置文件设置如下代码:
bind 127.0.0.1
默认的redis端口是:6379
最好把默认端口改改,比如改为6380,则在配置文件如此改:port 6380
如果你的redis服务只需要本地连接,不用远程连接,还可以用unix套接字的方式连接
unixsocket /tmp/redis.sock
unixsocketperm 700
如果你需要远程连接redis最好开启一下密码验证:
requirepass yourpassword
添加以下的配置,转换一下命令,防止远程清空数据库或修改redis的配置:
rename-command FLUSHALL ""
rename-command CONFIG ""
rename-command EVAL ""
rename-command FLUSHDB ""