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 上传安装包并解压
- 将redis-xxx.tar.gz上传到
/usr/local/src/
目录下,这个文件夹一般放安装文件。
cd /usr/local/src && rz
- 解压
tar -zxvf redis-xxx.tar.gz
- 进入redis目录
cd redis
- 运行编译命令
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
- 查看所有正在运行的容器:
命令: 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
- 停止运行的Redis
命令: docker stop <容器名/容器ID>
# myredis 是启动的redis的容器名
docker stop myredis
- 删除redis容器:
命令: docker rm <容器名/容器ID>
docker rm myredis
- 删除了容器,再删除镜像
# 列出镜像
docker images
# 删除镜像
docker rmi <镜像ID>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!