P5基础篇-04.初识Redis-安装Redis+三种方式启动以及Docker容器启动Redis

Redis安装说明

大多数企业都是基于Linux服务器来部署项目,而且Redis官方也没有提供Windows版本的安装包。因此课程中我们会基于Linux系统来安装Redis。

此处选择CentOS7。

Redis官方网站地址:https://redis.io/

1. 单机安装Redis

1.1 安装Redis依赖

Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖:

yum install -y gcc tcl
-y, --assumeyes    #对所有交互提问都回答 yes

1.2 上传安装包并解压

  1. 将redis-xxx.tar.gz上传到/usr/local/src/目录下,这个文件夹一般放安装文件。
cd /usr/local/src && rz
  1. 解压
tar -zxvf redis-xxx.tar.gz
  1. 进入redis目录
cd redis
  1. 运行编译命令
make && make install

如果没有报错,就安装成功了。


默认的安装路径是/usr/local/bin目录下:

root@f8b87544796a:/usr/local/bin# ls -l
total 31960
-rwxrwxr-x 1 root root      661 Sep 22 17:47 docker-entrypoint.sh
-rwxr-xr-x 1 root root  2228224 Dec  7  2021 gosu
-rwxr-xr-x 1 root root  7733232 Sep 22 17:47 redis-benchmark
lrwxrwxrwx 1 root root       12 Sep 22 17:47 redis-check-aof -> redis-server
lrwxrwxrwx 1 root root       12 Sep 22 17:47 redis-check-rdb -> redis-server
-rwxr-xr-x 1 root root  7603336 Sep 22 17:47 redis-cli
lrwxrwxrwx 1 root root       12 Sep 22 17:47 redis-sentinel -> redis-server
-rwxr-xr-x 1 root root 15154128 Sep 22 17:47 redis-server

该目录已经默认配置到环境变量,因此可以在任意目录下运行这些命令。其中:

  • redis-cli:是redis提供的命令行客户端
  • redis-server:是redis的服务端启动脚本
  • redis-sentinel:是redis的哨兵启动脚本

1.3 启动

redis的启动方式有很多种,例如:

  • 默认启动
  • 指定配置启动
  • 开机启动

1.3.1 默认启动

安装完成后,在任意目录输入redis- server命令即可启动Redis:

redis-server
1:C 16 Jan 2023 13:42:01.932 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 16 Jan 2023 13:42:01.932 # Redis version=7.0.5, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 16 Jan 2023 13:42:01.932 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 16 Jan 2023 13:42:01.932 * monotonic clock: POSIX clock_gettime
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 7.0.5 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                  
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 1
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           https://redis.io       
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

1:M 16 Jan 2023 13:42:01.935 # Server initialized
1:M 16 Jan 2023 13:42:01.937 * Ready to accept connections

这种启动属于前台启动,会阻塞整个会话窗口,窗口关闭或按下CTRL-c,则Redis服务停止。不推荐使用。

1.3.2 指定配置启动

如果要让Redis以后台方式启动,则必须修改Redis配置文件,就在我们之前解压的redis安装包下/usr/local/src/redis-6.2.6,名字叫做redis.conf

我们先将这个文件备份一份:

cp redis.conf redis.conf.bck

然后修改redis.conf文件中的一些配置:

# 监听的地址 默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问,生产环境不要设置为0.0.0.0
bind 0.0.0.0
# 守护进程,修改为yes后即可后台运行
daemonize yes
# 密码,设置后访问Redis必须输入密码
requirepass 123321

Redis的其他常见配置:

# 监听的端口
port 6379
# 工作目录,默认是当前目录,也就是运行redis-server时的命令,日志、持久化等文件会保存在这个目录
dir .
# 数据库设置,设置为1,代表只使用1个库,默认有16个库,编号为0~15
databases 1
# 设置redis能够使用的最大内存
maxmemory 512mb
# 日志文件,默认为空,不记录日志,可以指定日志文件名,只指定文件名,不用指定路径,存放在工作目录中
logfile "redis.log"

启动Redis:

# 进入redis安装目录
cd /usr/local/src/redis
# 后台启动,没有日志输出
redis-server redis.conf

可以通过grep命令查看redis是否启动成功

ps -ef | grep redis

停止服务:

# 利用redis-cli来执行shutdown命令,即可停止Redis服务
# 因为之前配置了密码,因此需要 -u 来指定密码
redis-cli -u 123321 shutdown 

1.3.3 开机自启

我们也可以通过配置来实现开机自启。

首先,新建一个系统服务文件:

vim /etc/systemd/system/redis.service

内容如下:

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

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

然后重载系统服务:

systemctl daemon-reload

现在,我们可以用下面这组命令来操作redis了:

# 启动
systemctl start redis
# 停止
systemctl stop redis
# 重启
systemctl restart redis
# 查看状态
systemctl status redis

执行下面的命令,可以让redis开机自启:

systemctl enable redis

2. 使用Docker安装Redis

2.1 Docker搜索redis镜像

ivan@ivandeMBP ~ %docker search redis
NAME                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis                               Redis is an open source key-value store that…   11765     [OK]       
bitnami/redis                       Bitnami Redis Docker Image                      236                  [OK]
redislabs/redisinsight              RedisInsight - The GUI for Redis                79                   
redislabs/redisearch                Redis With the RedisSearch module pre-loaded…   56                   
redislabs/rejson                    RedisJSON - Enhanced JSON data type processi…   52                   
redislabs/redis                     Clustered in-memory database engine compatib…   36                   
redis/redis-stack                   redis-stack installs a Redis server with add…   33                   
redislabs/redismod                  An automated build of redismod - latest Redi…   32                   [OK]
redislabs/redisgraph                A graph database module for Redis               25                   [OK]
redislabs/rebloom                   A probablistic datatypes module for Redis       22                   [OK]
redis/redis-stack-server            redis-stack-server installs a Redis server w…   16                   
redislabs/redistimeseries           A time series database module for Redis         12                   
redislabs/operator                                                                  7                    
redislabs/redis-py                                                                  5                    
redislabs/redisai                                                                   4                    
redislabs/redisgears                An automated build of RedisGears                4                    
redislabs/redisml                   A Redis module that implements several machi…   3                    [OK]
redislabs/redis-webcli              A tiny Flask app to provide access to Redis …   3                    [OK]
redislabs/k8s-controller                                                            2                    
redislabs/operator-internal         This repository contains pre-released versio…   1                    
redislabs/memtier_benchmark         Docker image to run memtier_benchmark           0                    
redislabs/ng-redis-raft             Redis with redis raft module                    0                    
redislabs/olmtest                   Test artefact for OLM CSV                       0                    
redislabs/olm-bundle                                                                0                    
redislabs/k8s-controller-internal                                                   0   

2.2 Docker拉取镜像

命令:docker pull <镜像名称>:<版本号>

docker pull redis

这里没有指定版本,默认下载的是最新的版本:redis latest。

2.3 Docker挂载配置文件

接下来就是要将redis的配置文件进行挂载,以配置文件方式启动redis容器。

挂载:即将宿主机的文件和容器内部目录相关联,相互绑定,在宿主机内修改文件的话也随之修改容器内部文件

2.3.1 挂载redis的配置文件

可以在Redis官网内找到redis的标准配置文件,然后放到宿主机上例如/home/redis/myredis/redis.conf

2.3.2 挂载redis的持久化文件(为了数据的持久化)

可以在宿主机上创建一个data文件夹来持久化数据

mkdir -p /home/redis/myredis 

2.4启动redis容器

docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf -v /home/redis/myredis/data:/data -d redis redis-server /etc/redis/redis.conf  --appendonly yes  --requirepass 123321
# 总是开机启动
--restart=always
# 容器日志文件上限大小
--log-opt max-size=100m
# 容器日志文件上限个数
--log-opt max-file=2
# 端口映射,第一个是hostPort,即宿主机端口,第二个是containerPort,即容器端口
-p 6379:6379
# 容器名称myredis
--name myredis
# 将宿主机的myredis.conf文件挂载到容器的redis.conf文件
-v /home/redis/myredis/myredis.conf:/etc/redis/redis.conf
# 将宿主机的/home/redis/myredis/data目录,挂载到容器的/data目录
-v /home/redis/myredis/data:/data
# 表示后台启动redis
-d redis
# 表示以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/etc/redis/redis.conf 也就是宿主机下的/home/redis/myredis/myredis.conf
redis-server /etc/redis/redis.conf
# 开启redis持久化
–appendonly yes
# 设置密码(如果是通过docker容器内部连接的话,可设可不设,如果想对外开放的话,一定要设置)
–requirepass 123321

2.5 测试

2.5.1 通过docker ps指令查看启动状态

# 通过docker ps命令查看启动状态,是否成功
docker ps -a | grep myredis

2.5.2 查看容器运行日志

命令: docker logs --since 30m <容器名/容器ID>

ivan@ivandeMBP ~ %docker logs --since 30m myredis
1:C 16 Jan 2023 13:42:01.932 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:C 16 Jan 2023 13:42:01.932 # Redis version=7.0.5, bits=64, commit=00000000, modified=0, pid=1, just started
1:C 16 Jan 2023 13:42:01.932 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
1:M 16 Jan 2023 13:42:01.932 * monotonic clock: POSIX clock_gettime
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 7.0.5 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                  
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 1
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           https://redis.io       
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

1:M 16 Jan 2023 13:42:01.935 # Server initialized
1:M 16 Jan 2023 13:42:01.937 * Ready to accept connections

2.5.3 容器内部连接进行测试

进入容器

命令: docker exec -it <容器名/容器ID> /bin/bash

此处跟着的redis-cli是直接将命令输入在上面了。

docker exec -it myredis redis-cli

进入之后,直接输入查看命令

127.0.0.1:6379> get a
(error) NOAUTH Authentication required.

会报错没有权限,需验证密码:

127.0.0.1:6379> get a
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth 123321
OK
127.0.0.1:6379> get a
(nil)

查看当前redis有没有设置密码:

127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123321"

2.6 配置文件

# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#bind 127.0.0.1

protected-mode no

port 6379

tcp-backlog 511

requirepass 000415

timeout 0

tcp-keepalive 300

daemonize no

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

databases 30

always-show-logo yes

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-disable-tcp-nodelay no

replica-priority 100

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

appendonly yes

appendfilename "appendonly.aof"

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

lua-time-limit 5000

slowlog-max-len 128

notify-keyspace-events ""

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096
stream-node-max-entries 100

activerehashing yes

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

2.7 Docker删除Redis

  1. 查看所有正在运行的容器:

命令: docker ps -a

ivan@ivandeMBP ~ %docker ps -a | grep redis
084f04be2fef redis "docker-entrypoint.s…" 6 minutes ago Up 6 minutes   0.0.0.0:6381->6379/tcp    myredis
  1. 停止运行的Redis

命令: docker stop <容器名/容器ID>

# myredis 是启动的redis的容器名
docker stop myredis
  1. 删除redis容器:

命令: docker rm <容器名/容器ID>

docker rm myredis
  1. 删除了容器,再删除镜像
# 列出镜像
docker images
# 删除镜像
docker rmi <镜像ID>
posted @   iiiiiiiivan  阅读(258)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示