Linux系统安装Redis

lishihuan大约 15 分钟

Linux系统安装Redis

笔记备份

https://www.lanmper.cn/redis/t9365open in new window

安装说明

参考:https://www.cnblogs.com/AllWjw/p/15771097.htmlopen in new window

redis 目录和安装都放到 /usr/local/redis 目录下,这样 方便后续的卸载

  • 解压到指定文件夹下并且 重新命名 tar -zvxf redis-5.0.7.tar.gz -C /usr/local/redis
  • 指定安装目录 make PREFIX=/usr/local/redis install
  • 查询 gcc -v 查询版本 [注意](#2.3 注意事项) (redis6以上 gcc版本不能低于 5,所以这个不行,我们需要升级它)-- 升级完成后最好重新打开一个shell窗口
$ yum install gcc-c++  ## 需要安装 gcc 通过 gcc -v 检测版本 (需要执行升级 gcc) ---- 目前centos7应该是不支持这样升级了
$ wget http://download.redis.io/releases/redis-6.0.6.tar.gz 
$ tar xzf redis-6.0.6.tar.gz	  ## 解压			
$ mv redis-6.0.6 /usr/local/redis ## 移动并且重命名(如果/usr/local/ 下存在redis文件夹 则会将redis-6.0.6 移动到/usr/local/redis目录下,所以不需要事先创建好redis文件夹)
$ cd /usr/local/redis
$ make 								##编译
$ make PREFIX=/usr/local/redis install ## 安装

## 备份conf文件
$ cp /usr/local/redis/redis.conf /usr/local/redis/redis_backup.conf  ### 备份conf文件
## 设置 后台启动
$ vi /usr/local/redis/redis.conf   ## 配置redis为后台启动 将daemonize no 改成daemonize yes
## 设置开机启动
$ chmod +x /etc/rc.d/rc.local ## 给 rc.local 赋权,否则 开机启动无法执行
$ vi /etc/rc.local   ## 在/rc.local 中添加   /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf (意思就是开机调用这段开启redis的命令)

## 卸载
$ rm -rf /usr/local/redis

使用说明

  • 默认端口 6379
  • 启动: /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
    • 说明:如果bin 下没有 redis-server 则说明没有执行 make install
  • 检查是否启动:
    • ps -aux | grep redis
    • netstat -tplan | grep 6379
  • 关闭
    • redis-cli shutdown
    • kill -9 xxxx ( 通过 ps -ef|grep redis 查看pid)
    • killall redis

https://www.cnblogs.com/hunanzp/p/12304622.htmlopen in new window

https://www.cnblogs.com/lauhp/p/8487029.htmlopen in new window

https://www.cnblogs.com/happywish/p/10944253.htmlopen in new window

RedisDesktopManager : Redis桌面管理器 https://github.com/uglide/RedisDesktopManager/releases/tag/0.8.8open in new window

1.查看Redis运行

查询进程

1、采取查看进程方式

ps -aux | grep redis

结果如下图:

img
img
img
img

2、采取端口监听查看方式

netstat -lanp | grep 6379

Redis的安装查询

  1. 登录到您安装了Redis的服务器或计算机上。
  2. 打开命令行终端(Windows上是命令提示符或PowerShell,Linux/macOS上是终端)。
  3. 根据操作系统类型执行相应的命令:
    • 在Windows上,输入以下命令并按回车键: where redis-server
    • 在Linux/macOS上,输入以下命令并按回车键:which redis-server
  4. 系统将返回Redis服务器的安装路径。例如,对于Windows,它可能是类似于 C:\Program Files\Redis\redis-server.exe 的路径,而对于Linux/macOS,它可能是 /usr/bin/redis-server/usr/local/bin/redis-server

如果找不到可以尝试使用find命令来搜索Redis可执行文件,如下所示:

find / -name redis-server

这将在整个文件系统中搜索redis-server文件,并显示其路径

2.下载 Redis

2.1. 通过下载压缩包进行安装(不推荐)

image-20230308232957298
image-20230308232957298

2.2. 通过 wget 下载安装

文件备份在 home/software ==> mkdir software

如果没有 安装wget yum -y install wget

wget http://download.redis.io/releases/redis-6.0.6.tar.gz
wget http://download.redis.io/releases/redis-4.0.8.tar.gz

2.3 注意事项

由于redis是由C语言编写的,它的运行需要C环境,因此我们需要先安装gcc

安装gcc环境

## 查询版本和检查是否安装
$ gcc -v

$ yum install gcc-c++

注意: redis6以上 gcc版本不能低于 5,所以这个不行,我们需要升级它

sudo yum install centos-release-scl
sudo yum install devtoolset-7-gcc*
scl enable devtoolset-7 bash

https://blog.csdn.net/weixin_50843918/article/details/128631662open in new window

server.c: 在函数‘writeCommandsDeniedByDiskError’中:
server.c:3826:1: 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]
}
^
server.c: 在函数‘iAmMaster’中:
server.c:5000:1: 警告:在有返回值的函数中,控制流程到达函数尾 [-Wreturn-type]

分析 由于gcc版本过低,不匹配Redis6.0以后所以无法编译

解决更新gcc到八以上

yum install centos-release-scl scl-utils-build
yum install -y devtoolset-8-toolchain
echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile

升级后可以查看一下版本

升级后可以查看一下版本

gcc -v

3.解压并安装Redis

3.1 解压

tar -zvxf redis-5.0.7.tar.gz
mv redis-5.0.7 /usr/local/redis ## 移动并且重命名

3.2 编译

在这步可能会报错,主要是因为未安装gcc

cd /usr/local/redis ## 进入文件夹
make		## 需要主要是在 redis 文件夹下

3.3 安装

make install
## 或者 -下面的最优
make PREFIX=/usr/local/redis install

也可以执行 make PREFIX=/usr/local/redis install

这里多了一个关键字 PREFIX= 这个关键字的作用是编译的时候用于指定程序存放的路径。比如我们现在就是指定了redis必须存放在/usr/local/redis目录。假设不添加该关键字Linux会将可执行文件存放在/usr/local/bin目录,库文件会存放在/usr/local/lib目录。配置文件会存放在/usr/local/etc目录。其他的资源文件会存放在usr/local/share目录。

这里指定号目录也方便后续的卸载,后续直接rm -rf /usr/local/redis 即可删除redis

配置redis为后台启动

## 备份conf 文件
mkdir /usr/local/redis/myconf_backup
cp /usr/local/redis/redis.conf /usr/local/redis/myconf_backup/redis.conf 

 ## 配置redis为后台启动 将daemonize no 改成daemonize yes
vi /usr/local/redis/redis.conf


## 修改连接ip
bind 192.168.1.132
#修改 密码
requirepass Semdo@2022

4. 将redis加入到开机启动

4.1 通过systemd 来实现开机启动

使用 systemd 服务来实现 redis服务的开机自启动

vim /etc/systemd/system/redis.service

添加下面的

[Unit]
Description=Redis In-Memory Data Store
Documentation=http://redis.io/documentation
After=network.target

[Service]
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
ExecStop=/usr/local/redis/bin/redis-cli -p 6379 -a Semdo@2022 shutdown
Restart=always
WorkingDirectory=/usr/local/redis
PIDFile=/usr/local/redis/redis.pid

[Install]
WantedBy=multi-user.target

启动设置

# 重新加载 systemd 配置 (为了让 systemd 识别新的服务,你需要执行以下命令)
sudo systemctl daemon-reload

# 启动 Redis 服务
sudo systemctl start redis

# 设置 Redis 服务开机自启
sudo systemctl enable redis

# 重启
sudo systemctl restart redis
#查看状态
sudo systemctl status redis
# 禁止开机自启
sudo systemctl disable redis
# 关闭
sudo systemctl stop redis

需要注意的是,下面两个配置需要保持路径一致,否则上面的 sudo systemctl start redis 启动会失败

pidfile /usr/local/redis/redis.pid
logfile /usr/local/redis/logs/redis.log

4.2 通过rc.local脚本开机

这里可能会没生效,2种可能

  1. 可能是路径配置的不对

  2. 第二目前 CentOS7 服务器的 rc.local脚本开机不自动执行 ===》 给 rc.local文件授予可执行权限

vi /etc/rc.local
## 在里面添加内容:
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf   ## (意思就是开机调用这段开启redis的命令)

解决CentOS7 服务器的 rc.local脚本开机不自动执行 ===》 给 rc.local文件授予可执行权限

## 授权
chmod +x /etc/rc.d/rc.local

## 查看启动情况
systemctl status rc-local.service 
## 重启
sudo systemctl restart rc-local.service

[root@localhost ~]# systemctl status rc-local.service
● rc-local.service - /etc/rc.d/rc.local Compatibility
   Loaded: loaded (/usr/lib/systemd/system/rc-local.service; static; vendor preset: disabled)
   Active: inactive (dead)
Condition: start condition failed at 六 2023-03-11 21:06:11 CST; 1min 27s ago
           ConditionFileIsExecutable=/etc/rc.d/rc.local was not met
[root@localhost ~]# Connection closing...Socket close.

## 赋权后 重启 然后 可以通过 systemctl status rc-local.service 进行检查

[root@localhost ~]# systemctl status rc-local.service
● rc-local.service - /etc/rc.d/rc.local Compatibility
   Loaded: loaded (/usr/lib/systemd/system/rc-local.service; static; vendor preset: disabled)
   Active: active (running) since 六 2023-03-11 21:09:13 CST; 1min 19s ago
  Process: 1116 ExecStart=/etc/rc.d/rc.local start (code=exited, status=0/SUCCESS)
 Main PID: 1129 (redis-server)
   CGroup: /system.slice/rc-local.service
           └─1129 /usr/local//bin/redis-server 127.0.0.1:6379

下面是2个场景,第一个是成功启动

第二个因为配置logfile,由于路径不存在导致启动失败

image-20230815210458399
image-20230815210458399
image-20230815210715659
image-20230815210715659

5. 启动redis

启动redis服务:(三种启动方式)

  • 前台启动:在任何目录下执行 redis-server
  • 后台启动:在任何目录下执行 redis-server &
  • 启动redis服务时,指定配置文件:redis-server redis.conf & ,这种主要用于你改了配置文件的情况,比如你把默认端口号改了,你就用这个,正常也用这个
  • 如果添加到systemctl服务中,则 通过sudo systemctl start redis 启动

在目录/usr/local/redis 输入下面命令启动redis

./bin/redis-server& ./redis.conf  ## 台进程方式
# 或者下面的语句
/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf  ## 前台启动 (如在配置文件设置了daemonize属性为yes则跟后台进程方式启动其实一样)

# 启动 Redis 服务
sudo systemctl start redis

# 重启
sudo systemctl restart redis
#查看状态
sudo systemctl status redis

# 关闭
sudo systemctl stop redis

6.关闭Redis服务

  • 方式一:杀进程 pkill redis 停止redis(表示查找所有进程名包含 "redis" 的进程,并且关闭它们)

  • 方式二: 杀进程 ( 通过 ps -ef|grep redis 查看pid)

    kill -9 PID

  • 方式三: 通过 redis-cli 客户端 shutdown

[root@lishihuan ~]# ./redis-cli       ## 没有修改ip 默认是 127.0.0.1 ,如果修改了,则无法这样登陆
127.0.0.1:6379> shutdown		## 关闭 redis服务
not connected> exit				## 退出 redis-cli 客户端
  • 方式四【如果添加到systemctl 模块,也即是 操作了上面的 设置 [redis.service](#4.1 通过systemd 来实现开机启动)】:sudo systemctl stop redis

7. 连接客户端 redis-cli

输入exit可以退出redis脚本控制台

./redis-cli /shutdown 可直接关闭redis

redis-cli是连接本地redis服务的一个命令,通过该命令后可以连接redis的脚本控制台。

redis-cli:默认连接127.0.0.1(本机)的6379端口上的redis服务。 redis-cli -p 端口号:连接127.0.0.1(本机)的指定端口上的redis服务。 redis-cli -h ip地址 -p 端口:连接指定ip主机上的指定端口的redis服务。

redis-cli -h 192.168.163.129 -p 6379 -a 123456

[root@lishihuan ~]# redis-cli       ## 没有修改ip 默认是 127.0.0.1 ,如果修改了,则无法这样登陆
127.0.0.1:6379> shutdown		## 关闭 redis服务
not connected> exit				## 退出 redis-cli 客户端
#### 对于设置了IP和端口的,直接输入  redis-cli 提示无法连接  
[root@lishihuan ~]# redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected>

## 下面是针对 修改了 IP和端口的登陆方式
### 输入 IP端口 密码登陆 客户端
[root@lishihuan ~]# redis-cli -h 192.168.163.129 -p 6379 -a 123456
192.168.163.129:6379> 

### 登陆
[root@lishihuan ~]# redis-cli -h 192.168.163.129 -p 6379
192.168.163.129:6379> config get requirepass
(error) NOAUTH Authentication required.  ## 提示需要 进行身份验证
192.168.163.129:6379> auth 123456        ## 输入密码
OK
192.168.163.129:6379>

设置密码的后登录客户端

[root@localhost bin]# ./redis-cli -a 123456  ##  这样登录会出现 下面的 这行告警,应该 
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"


## 应该用下面的方式登录
[root@localhost bin]# ./redis-cli
127.0.0.1:6379> auth 123456  ## 输入密码,
OK
127.0.0.1:6379> 

设置ip后登录失败

当出现 "not connected>" 提示时执行新的连接命令是无效的。在这种情况下,你需要首先使用 exit 命令退出当前的 redis-cli,然后再执行 ./redis-cli -h 192.168.75.130 -p 6379 -a 123456 命令重新连接到 Redis 服务器。

[root@localhost ~]# ps -ef|grep redis
root       1800      1  0 23:03 ?        00:00:00 /usr/local/redis/bin/redis-server 192.168.75.130:6379
root       1838   1818  0 23:15 pts/0    00:00:00 grep --color=auto redis
[root@localhost ~]# cd /usr/local/redis/bin
[root@localhost bin]# ls
dump.rdb  redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server
[root@localhost bin]# ./redis-cli
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> ./redis-cli -h 192.168.75.130 -p 6379 -a 123456 ## 注意 这里输入是无法登录reids-cli 客户端的,需要exit 推出后在bin目录下 执行
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> exit
[root@localhost bin]# ./redis-cli -h 192.168.75.130 -p 6379 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe. # 由于在命令行中使用明文密码的方式可能存在安全风险。建议你使用安全的方法来提供 Redis 密码
192.168.75.130:6379> 

8. 修改密码&查看密码

https://www.cnblogs.com/robinli/p/9267471.htmlopen in new window

## 找到这行,去掉注释,把foobared改为自己的密码
#requirepass foobared  

设置密码 为了安全一定要设,而且这里如果不绑定ip也不设密码的话,redis是默认保护模式,只能本虚拟机访问,不允许其他ip访问

所以,redis desktop manager 无法连接,报异常 Can’t connect to redis-server

解决:修改配置文件redis.conf ,设置 密码后 找到protected-mode 选项 把yes 改成 no,然后 重启redis服务

下面的只作为了解,设置临时密码

[root@localhost bin]# ./redis-cli	## 登录客户端
127.0.0.1:6379> config get requirepass ## 查询密码
1) "requirepass"
2) ""
127.0.0.1:6379> config set requirepass 123456 ## 临时设置密码 为 123456   注意,这样设置的密码 服务器重启就会失效
OK
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"
127.0.0.1:6379> 

级别设置

默认IP设置 bind 0.0.0.0 表示Redis 会接受任何网络接口的连接,包括本地和外部接口

  • bind设置IP
  • port 设置端口
  • daemonize: yes表示启用守护进程【后台运行】
  • requirepass: 密码设置

开通 对外端口

firewall-cmd --zone=public --add-port=6379/tcp --permanent  ## 开放6379端口
systemctl restart firewalld ## 重启防火墙以使配置即时生效
 
##看系统所有开放的端口
firewall-cmd --zone=public --list-ports
配置项名称配置项值范围说明
daemonizeyes、noyes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行
port指定 Redis 监听端口,默认端口为 6379
bind绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 。
protected-modeyes 、no保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no。
timeout300当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能
logleveldebug、verbose、notice、warning日志级别,默认为 notice
databases16设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到
rdbcompressionyes、no指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大。
dbfilenamedump.rdb指定本地数据库文件名,默认值为 dump.rdb
dir指定本地数据库存放目录
requirepass设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH <password> 命令提供密码,默认关闭
maxclients0设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息。
maxmemoryXXX <bytes>指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。配置项值范围列里XXX为数值。

这里我要将daemonize改为yes,不然我每次启动都得在redis-server命令后面加符号&,不这样操作则只要回到Linux控制台则redis服务会自动关闭,同时也将bind注释,将protected-mode设置为no。 这样启动后我就可以在外网访问了。

更改方式:

vim /usr/local/redis/redis.conf

通过 /daemonize 查找到属性,默认是no,更改为yes即可。 (通过/关键字查找出现多个结果则使用 n字符切换到下一个即可,查找到结果后输入:noh退回到正常模式)

如下图:

img
img

8. 卸载redis:


which redis-server # 查找位置 如果不行 find / -name redis-server
rm -rf /usr/local/redis # 删除安装目录
rm -rf /usr/local/bin/redis-* #删除所有redis相关命令脚本
rm -rf /root/download/redis-4.0.4 #删除redis解压文件夹

Redis 报错 及处理

未安装gcc环境

安装redis时 提示执行make命令时提示 CC adlist.o /bin/sh: cc: 未找到命令open in new window

安装redis时 提示执行make命令时提示 CC adlist.o /bin/sh: cc: 未找到命令
 
问题原因:这是由于系统没有安装gcc环境,因此在进行编译时才会出现上面提示,当安装好gcc后再进行编译时,上面错误提示将消失。
 
解决方法:
安装gcc
[ckl@localhost ~]$ yum -y install gcc automake autoconf libtool make
 
安装c编译器并编译
[root@bogon redis-3.2.0]# make
cd src && make all
make[1]: 进入目录“/usr/local/redis-3.2.0/src”
CC adlist.o
/bin/sh: cc: 未找到命令
make[1]: *** [adlist.o] 错误 127
make[1]: 离开目录“/usr/local/redis-3.2.0/src”
make: *** [all] 错误 2
 
安装c编译器并编译
[root@bogon redis-3.2.0]# yum install gcc-c++ 
[root@bogon redis-3.2.0]# make
cd src && make all
make[1]: 进入目录“/usr/local/redis-3.2.0/src”
CC adlist.o
In file included from adlist.c:34:0:
zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
#include <jemalloc/jemalloc.h>                              ^
编译中断。
make[1]: *** [adlist.o] 错误 1
make[1]: 离开目录“/usr/local/redis-3.2.0/src”
make: *** [all] 错误 2
 
解决“jemalloc/jemalloc.h:没有那个文件或目录“问题,在进行编译(因为上次编译失败,有残留的文件)
[root@bogon redis-3.2.0]# make distclean
[root@bogon redis-3.2.0]# make && make install

server.c:5171:176: 错误:‘struct redisServer’没有名为‘maxmemory’的成员

1、安装gcc套装:
    yum install cpp binutils glibc glibc-kernheaders glibc-common glibc-devel gcc make
    yum install binutils  -- 
    yum install glibc   --
    yum install glibc-kernheaders
    yum install glibc-common
    yum install glibc-devel
    yum install gcc
    yum install make
2、升级gcc
    yum -y install centos-release-scl
    yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
    scl enable devtoolset-9 bash
3、设置永久升级:
	echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
4、安装redis:

Redis Desktop Manager 客户端连接

redis-desktop-manager-0.8.8.384.exe