在Linux上安装redis6.2(centOS)

在 CentOS 8 升级 gcc

redis需要 gcc支持,并且需要gcc9以及以上版本来编译。查看服务器gcc版本命令

gcc -v

查看gcc版本


在CentOS8系统中,默认gcc版本已经是8.x.x版本,不要去编译升级 gcc,编译升级后可能会给你带来额外的麻烦。在 CentOS 8 版本中,红帽也提供了开发工具包管理 gcc 版本,install的包名从 devtoolset-x 变成了 gcc-toolset-x,通过该方式升级 gcc 好处就是随时可以切换 gcc 版本,不破坏原有 gcc 环境。

gcc-toolset仅支持gcc9、gcc10版本

  • gcc-toolset-9 对应 gcc9.x.x 版本
  • gcc-toolset-10 对应 gcc10.x.x 版本

安装gcc-toolset-10

dnf install centos-release-stream
dnf install gcc-toolset-10-gcc*
source /opt/rh/gcc-toolset-10/enable
echo "source /opt/rh/gcc-toolset-10/enable" >> /etc/profile

升级完毕查看服务器gcc版本

gcc -v

查看gcc版本


下载解压安装 redis6.2

进入redia官网: https://redis.io

redis官网

下载解压

cd  /tmp
wget -c https://download.redis.io/releases/redis-6.2.1.tar.gz
tar -xzvf redis-6.2.1.tar.gz

utils目录

在redis解压安装的目录下,有个utils目录,其中文件如上图, install_server.sh 文件是redis自动安装文件。 redis_init_script 是redis自带的初始化脚本实例,手动编译安装,复制此文件手动配置。自动安装和手工编译安装方式,任选一种。

方式一:自动安装 redis

运行install_server.sh文件,进入自动安装的交互界面

cd /tmp/redis-6.2.1/utils
./install_server.sh

直接运行此文件,会有提示:
This systems seems to use systemd.Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!

解决方案 :修改install_server.sh,把下面这一段进行注释:

#bail if this system is managed by systemd
#_pid_1_exe="$(readlink -f /proc/1/exe)"
#if [ "${_pid_1_exe##*/}" = systemd ]
#then
#       echo "This systems seems to use systemd."
#       echo "Please take a look at the provided example service unit files in this directory, and adapt and install them. Sorry!"
#       exit 1
#fi

注释掉后保存退出,再次运行此文件。根据提示输入对应的配置。

[root@VM_0_5_centos utils]# ./install_server.sh
Welcome to the redis service installer
This script will help you easily set up a running redis server

Please select the redis port for this instance: [6379] 6379
Please select the redis config file name [/etc/redis/6379.conf] /usr/local/redis/etc/redis.conf
Please select the redis log file name [/var/log/redis_6379.log] /var/log/redis.log
Please select the data directory for this instance [/var/lib/redis/6379] /usr/local/redis/data
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/bin/redis-server
Selected config:
Port           : 6379
Config file    : /usr/local/redis/etc/redis.conf
Log file       : /var/log/redis.log
Data dir       : /usr/local/redis/data
Executable     : /usr/local/bin/redis-server
Cli Executable : /usr/local/bin/redis-cli
Is this ok? Then press ENTER to go on or Ctrl-C to abort.
Copied /tmp/6379.conf => /etc/init.d/redis_6379
Installing service...
Successfully added to chkconfig!
Successfully added to runlevels 345!
Starting Redis server...
Installation successful!

自动配置需要填写的信息

运行后根据提示输入信息,最后会在/etc/init.d目录下自动生成一个启动脚本文件, /etc/init.d/redis_6379 ,用于开机自启动。可以修改文件名,也可以不修改。

cp /etc/init.d/redis_6379 /etc/init.d/redis
rm -f /etc/init.d/redis_6379

安装完服务,redis自动启动,可以用ps命令查看到相关信息:

[root@VM_0_5_centos bin]# ps -ef|grep redis
root      4885  3538  0 08:37 pts/0    00:00:00 grep --color=auto redis
root     26518     1  0 07:21 ?        00:00:31 /usr/local/bin/redis-server 127.0.0.1:6379



方式二:编译安装 redis

cd /tmp/redis-6.2.1
make
make install PREFIX=/usr/local/redis

安装文件目录

redis安装后文件列表

复制配置文件

mkdir -p /usr/local/redis/etc
cp /tmp/redis-6.2.1/redis.conf /usr/local/redis/etc/
cp /tmp/redis-6.2.1/utils/redis_init_script /etc/init.d/redis

创建软连接,便于命令能直接调用

ln -s /usr/local/redis/bin/redis-server /usr/local/bin/redis-server
ln -s /usr/local/redis/bin/redis-cli /usr/local/bin/redis-cli


测试启动redis

/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

启动redis

看到如上界面,说明redis安装成功。 Ctrl + c 退出。再继续设置。



修改redis配置

mkdir -p /usr/local/redis/run
mkdir -p /usr/local/redis/data

vim /usr/local/redis/etc/redis.conf
  • 设置后台运行: daemonize yes (redis默认值为no,禁止后台运行。)
  • 设置访问密码: requirepass 123456 (默认密码为空)在配置文件中找到这一行 # requirepass foobared ,删除前面的注释符号 # ,并把foobared修改成自己的密码。
  • 设置远程访问: protected-mode no (默认值yes,禁止远程访问。)
  • 设置访问地址:redis默认绑定本机IP,所以要注释掉 # bind 127.0.0.1 -::1
  • 设置数据存放: dir /usr/local/redis/data (redis默认 ./ ,即redis-server启动的目录下。
  • 设置PID进程: pidfile /usr/local/redis/run/redis.pid 当redis以守护进程运行时,默认将pid写入此路径下的文件中,可以通过修改配置项的值指定其他路径下的文件。
daemonize yes
requirepass 123456
dir /usr/local/redis/data
pidfile /usr/local/redis/run/redis.pid
protected-mode no
# bind 127.0.0.1 -::1

redis.conf配置文件中的项的含义

  • daemonize no redis默认不是使用守护进程运行的,可以修改该配置项的值,使用yes以守护进程启动redis。
  • pidfile /usr/run/redis_6379.pid 当redis以守护进程运行时,默认将pid写入此路径下的文件中,可以通过修改配置项的值指定其他路径下的文件。
  • port: 6379 redis默认的端口号。
  • bind 127.0.0.1 默认绑定主机,默认情况下只有本机才可以访问redis ,如果需要在其他计算机上访问该服务器上的redis,需要将该配置项注释。
  • timeout 300 当客户端闲置指定时间后,关闭连接,如果设置0,则表示关闭此功能。
  • loglevel verbose 指定redis的日志级别,redis的日志级别有:debug、verbose、notice、warning,默认为verbose。
  • logfile stdout 日志记录方式,默认为标准输出,如果将redis设置为守护进程,而此处又设置为标准输出,则日志输出会发送给/dev/null。
  • databases 16 设置数据库的数量,默认数据库的标号为0,可以使用SELECT 命令在连接上指定数据库id。
  • save <seconds><changes> 指定在多长时间,有多少条更新操作,就将数据同步到数据文件,可以多条配合

    Redis默认配置文件中提供了三个条件:
    save 900 1
    save 300 10
    save 60 10000
    分别表示 900秒(15分钟)内有1个更新操作,300秒(5分钟)内有10个更新操作,60秒(1分钟)内有10000个更新操作。

  • rdbcompression yes 指定存储至本地数据库时是否进行压缩,默认为yes,redis采用LZF压缩,如果想要节省CPU占用,可以关闭此项,但是会导致数据库文件增大。
  • dbfilename dump.rdb 指定本地数据库的文件名。
  • dir ./ 指定本地数据库文件存放位置。根据启动redis时所在目录存放,比如我在/usr下使用./usr/local/redis/bin/redis-server启动。则会在/usr下生成demp.rdb本地数据库文件。
  • replicaof <masterip><masterport> 设置当本地为slave(主从服务中的从服务)服务时,master服务的IP以及端口号,在redis启动时,它会自动从master进行数据同步。
  • masterauth <password> 当master服务设置了密码时,slave服务连接master服务的密码。
  • replicaof-read-only yes 设置salve服务是否只读,默认为yes。
  • requirepass foobared 设置当客户端连接服务端时的密码,默认关闭。
  • maxclients 128 设置同一时间最大客户端连接数,默认无限制,如果设置为0,则表示不显示,当客户端达到限制时,新的客户端无法连接redis,并会返回max number of clients reached 错误信息。
  • maxmemory <bytes> 指定redis最大内存限制,默认是256MB,到达最大内存之后,redis会尝试清除已到期或即将到期的key,当此方法处理之后,仍到达最大内存,这时将无法对redis进行写操作,但是仍然可以读取数据。
  • appendonly no 指定是否在每次更新操作后进行日志记录,redis默认情况下是异步的将数据写入磁盘,如果不开启,可能会因为断电导致一段时间的数据丢失。因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。
  • appendfilename appendonly.aof 指定更新日志的文件名。
  • appendfsync everysec 指定更新日志条件,共有3个值:
    • no:表示等操作系统进行数据缓存同步到磁盘(快)。
    • always:表示每次更新操作后手动调用fsync()将数据同步到磁盘(慢、安全)。
    • everysec:表示每秒同步一次(折中方案,也是默认值)。


修改 redis 启动脚本

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.

### BEGIN INIT INFO
# Provides:     redis_6379
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Redis data structure server
# Description:          Redis data structure server. See https://redis.io
### END INIT INFO


#默认端口
REDISPORT=6379

#自己实际安装redis服务的路径,本文提到的软联接的路径
EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

#redis的PID路径
PIDFILE=/usr/local/redis/run/redis.pid

#自己安装的redis配置文件的位置(根据自己的实际情况修改)
CONF="/usr/local/redis/etc/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 -a $RESDISPASSWORD -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

修改redis运行脚本文件redis

修改完成之后,添加权限:

chmod 777 /etc/init.d/redis



添加redis为系统服务

使用 systemctl 命令管理服务,适用centOS7、centOS8。使用 systemd 自定义redis服务。 systemctl 脚本存放在: /usr/lib/systemd/ ,有系统(system)和用户(user)之分,即: /usr/lib/systemd/system /usr/lib/systemd/user 。每一个服务以 .service 结尾,一般会分为3部分:[Unit]、[Service]和[Install]

第一步:在系统服务目录/usr/lib/systemd/system/里创建redis.service文件

vim /usr/lib/systemd/system/redis.service

在 redis.service 文件写入如下内容。重启系统即可开机启动。文件内容:

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
#redis-server安装的路径 和 redis.conf配置文件的路径(根据自己安装的情况来填写绝对路径)
ExecStart=/usr/local/redis/bin/redis-server   /usr/local/redis/etc/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

各项参数说明:

  • Description:描述服务。
  • After:描述服务在哪些基础服务启动后再启动。
  • [Service]服务运行参数的设置。
  • Type=forking是最简单和速度最快的选择。
  • ExecStart为启动服务的具体运行命令。
  • ExecReload为重启命令。
  • ExecStop为停止命令。
  • PrivateTmp=True表示给服务分配独立的临时空间。

注意:[Service]的启动、重启、停止命令全部要求使用 绝对路径 。[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3。

第二步:设置redis开机启动

systemctl enable redis



管理 redis

systemctl命令

开启、重启、查看运行redis

systemctl start redis
systemctl restart redis
systemctl status redis


redis-server命令

redis-server命令:开启

redis-server /usr/local/redis/etc/redis.conf

关闭 redis

若redis没设置密码,可以使用 systemctl stop redis
若设置了密码,使用此命令会出错。应该用 redis-cli 客户端连接服务器后执行 shutdown 命令,则执行停止redis服务操作。



查看redis是否运行

方法一:

ps -ef | grep redis

方法二:

lsof -i :6379

方法三:

netstat -lntp | grep 6379

redis进程

用 kill -9 杀掉redis进程,强制关闭redis服务

查看redis进程PID

ps -ef | grep redis

查看redis进程PID

如上图中 748 即是,杀掉此进程

kill -9 748

使用 killall 命令杀掉 redis 全部进程

killall redis


使用 redis-cli 客户端联接 redis 服务

使用 redis-cli 连接redis本机默认连接地址 127.0.0.1 ,端口 6379 ,本机可以不指定。

redis-cli -h 127.0.0.1 -p 6379

若redis设置了密码,使用auth 认证密码。实例设置的简单密码 123456 ,根据自己的情况设置使用自己的密码。

auth 123456

Redis Ping 命令使用客户端向 Redis 服务器发送一个 PING ,如果服务器运作正常的话,会返回一个 PONG 。通常用于测试与服务器的连接是否仍然生效,或者用于测量延迟值。

PING

ECHO,打印字符串

ECHO "Hello World"

quit,关闭连接

quit


使用redis-cli客户端

使用 redis-cli 客户端关闭 redis 服务

如果客户端设置了密码,则需要先连接 redis 服务端后再使用 shutdown 关闭。

redis-cli -h 127.0.0.1 -p 6379
auth 123456
shutdown

若无密码,直接 shutdown 关闭。

redis-cli shutdown

关闭redis服务



安装php扩展 php_redis

官方网址: https://pecl.php.net/package/redis

下载到本地,文件传输上传到服务器上 /tmp 目录下

cd /tmp
tar xzf redis-5.3.4.tgz
cd redis-5.3.4
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

安装完,会在/usr/local/php/lib/php/extensions/no-debug-non-zts-20200930/目录下生成 redis.so 扩展文件。

vim /usr/local/php/etc/php.ini

# 使用查找命令 /extension ,在 ;zend_extension=opcache 的上面一行加上 
# extension=redis.so