docker 安装 redis 详解

news2025/1/23 21:17:19

        在平常的开发工作中,我们经常会用到 redis,那么 docker 下应该如何安装 redis 呢?简单来说:第一步:拉取redis镜像;第二步:设置 redis.conf 配置文件;第三步:编写 docker-compose.yml文件,启动 redis;第四步:测试 redis。

        1:拉取 redis 镜像:docker  pull  redis:版本号

        根据自己的需求,拉取合适的redis版本,如果 docker pull redis 命令,后面不写版本号,那么默认拉取最新的 redis 镜像。拉取完成后,可以使用 docker images 命令查看拉取到的镜像,redis镜像如下:

        

        注意:如果拉取镜像失败,可能是 docker 配置文件的问题。在 /etc/docker/ 目录下,修改 daemon.json 文件中的配置的镜像加速器。镜像加速器网上搜索很多,尝试修改配置,修改完后一定要重启docker服务,不然不生效。重启 docker 命令:systemctl restart docker

        2:创建挂载目录,并设置 redis.conf 文件

        1)创建挂载目录

              mkdir  -p  /docker/redis/conf/ 

              mkdir  -p  /docker/redis/data/

        2)设置 redis.conf 配置文件

              在 /docker/redis/conf/ 目录下 新建 redis.conf 文件,设置文件内容如下:

# redis 配置

# 端口
port 6379

# tcp-backlog 表示 TCP 的监听队列长度。
# 当 Redis 服务器监听客户端的连接请求时,操作系统会维护一个等待连接的队列,tcp-backlog 的值决定了这个队列的长度。
# 在上述配置中,将该队列长度设置为 511,表示 Redis 服务器在监听客户端连接时,操作系统的 TCP 连接队列最多可容纳 511 个等待处理的连接请求。
tcp-backlog 511

# 当设置为 0 时,表示 Redis 服务器不会因为客户端处于空闲状态而自动断开连接。
# 即只要客户端建立了与 Redis 服务器的连接,无论该客户端是否发送请求,服务器都不会主动关闭连接,即使该客户端长时间处于不活动状态。
timeout 0

# tcp-keepalive 表示 TCP 保活机制的时间间隔,单位是秒。
# 当 Redis 服务器与客户端建立 TCP 连接后,会在连接处于空闲状态一段时间后发送保活探测包,以确保连接的有效性。
# 在上述配置中,设置为 300 秒,表示 Redis 服务器会在客户端连接空闲 300 秒后,向客户端发送保活探测包。
tcp-keepalive 300

# 当设置为 no 时,表示 Redis 服务器不会以守护进程(daemon)的模式运行。
# 守护进程是一种在后台运行的进程,通常不与用户进行交互,并且在后台持续运行,不占用终端会话。
daemonize no

# Note that on modern Linux systems "/run/redis.pid" is more conforming
# and should be used instead.
pidfile /var/run/redis_6379.pid

# 控制 Redis 服务器的日志记录级别。
loglevel notice

# 该配置指定了 Redis 服务器将日志信息存储在 /data/redis.log 文件中。
# 当 Redis 服务器运行时,会将产生的日志信息(如错误信息、操作信息等)按照 loglevel 所设定的级别写入到 /data/redis.log 文件中。
logfile "/data/redis.log"


# 主要用于设置 Redis 服务器内部可用的数据库数量。
# Redis 支持多个数据库,这些数据库在内部以数字编号,从 0 开始。
# 该配置项表示 Redis 服务器内部将创建 16 个不同的数据库,编号为 0 到 15。
databases 16


always-show-logo no

# 主要用于控制 Redis 服务器在后台保存操作(BGSAVE)出现错误时的行为。
# 当设置为 yes 时,如果 Redis 在执行后台保存操作(BGSAVE)出现错误,Redis 服务器将停止接受写操作(如 SET, HSET, LPUSH 等)。
stop-writes-on-bgsave-error yes

# 主要用于控制 Redis 的 RDB 文件的压缩功能。
# 当设置为 yes 时,Redis 在生成 RDB 文件(Redis 数据库的快照文件,用于数据持久化)时,会对文件进行压缩。
rdbcompression yes

# 主要用于控制 Redis 在生成和加载 RDB 文件时是否包含校验和信息。
# 当设置为 yes 时,Redis 在生成 RDB 文件(用于持久化存储 Redis 数据库状态的文件)时,会在文件末尾添加一个校验和。
rdbchecksum yes

# 主要用于指定 Redis 进行 RDB 持久化时生成的文件名称。
# 当 Redis 进行 RDB 持久化操作(例如使用 SAVE 或 BGSAVE 命令)时,会将当前 Redis 数据库的状态存储在一个文件中。
# 该配置项指定这个文件的名称为 dump.rdb。
dbfilename dump.rdb

# Redis 在某些同步操作时对 RDB 文件的处理方式。
# 当设置为 no 时,Redis 在执行某些同步操作(如 RDB 文件的复制、同步等)时,不会主动删除同步过的 RDB 文件。
rdb-del-sync-files no

dir /data

# 当该配置设置为 yes 时,表示副本服务器(replica)在某些情况下会继续为客户端提供陈旧的数据服务。
# 具体来说,当副本服务器与主服务器的同步出现问题(如网络故障、主服务器宕机、复制链路中断等),导致副本服务器无法从主服务器更新最新的数据时,
# 它不会拒绝客户端的读请求,而是继续使用它最后一次同步得到的数据为客户端提供服务。
replica-serve-stale-data yes

# 当设置为 yes 时,表示 Redis 副本服务器只能处理读操作,而不允许执行写操作。
# 例如,用户试图在副本服务器上执行写操作,如 SET key value、HSET hash_key field value 等命令时,
# Redis 副本服务器会拒绝执行这些命令并返回错误信息。
replica-read-only yes

# 该配置项位于 Redis 的配置文件中,用于控制 Redis 在主从复制时的同步方式
# 当设置为 no(默认状态)时,Redis 主服务器在进行复制操作时,会先将数据存储在磁盘上的 RDB 文件中,然后将该文件传输给副本服务器
# 在这种模式下,主服务器不会将 RDB 文件存储在磁盘上,而是直接通过网络将内存中的数据快照发送给副本服务器。
# 这样可以减少磁盘 I/O,提高复制的速度,尤其适用于主服务器磁盘 I/O 是性能瓶颈的场景。
repl-diskless-sync no

# repl-diskless-sync 被设置为 yes 时,主服务器会采用无盘复制的方式将数据同步到副本服务器。
# repl-diskless-sync-delay 则表示在开始无盘同步操作之前,主服务器会等待的时间(单位:秒)。在上述示例中,主服务器会等待 5 秒钟。
repl-diskless-sync-delay 5

# 主要用于控制 Redis 副本服务器在进行无盘复制时的加载方式。
# 当设置为 disabled 时,表示 Redis 副本服务器在进行无盘复制(即从主服务器接收内存快照而非从磁盘加载 RDB 文件)时,使用默认的加载方式。
repl-diskless-load disabled

# 主要用于控制 Redis 主从复制过程中的 TCP 数据传输方式。
# 当设置为 no 时,表示 Redis 在主从复制过程中,不会禁用 TCP_NODELAY 选项。
repl-disable-tcp-nodelay no

# 主要用于确定 Redis 副本服务器在主从复制架构中的优先级。
# 该配置项的值表示 Redis 副本服务器的优先级
replica-priority 100

# 主要用于控制 Redis 的 ACL(访问控制列表)日志的最大长度。
acllog-max-len 128

# 设置密码
requirepass your_password

# 主要涉及 Redis 的键删除操作和复制操作的行为,用于控制 Redis 在执行某些关键操作时是否采用阻塞式或非阻塞式(懒删除)的处理方式。
# 这些配置项都设置为 no 时,Redis 在执行相应操作(内存驱逐、删除过期键、执行会替换旧键的操作以及副本服务器全量同步时的数据库清空操作)时,
# 会采用阻塞式的删除方式,可能会导致服务器在处理一些耗时较长的删除操作时出现性能下降,因为会暂停对其他命令的处理。
# 而将这些配置项设置为 yes 则可以将这些操作改为非阻塞式(如使用 UNLINK 命令),使 Redis 可以在后台渐进式地处理删除操作,提高性能,
# 但会增加后台资源的消耗,并且可能会在一定程度上影响数据一致性,需要根据具体的性能需求和数据一致性要求来合理配置。
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

# 主要用于控制 Redis 在执行用户删除操作时是否使用惰性删除。
# 当设置为 no 时,表示 Redis 在执行用户发起的删除操作(例如 DEL 命令)时,会同步删除相关数据,即立即释放内存。
lazyfree-lazy-user-del no

# 该配置项用于调整 Redis 进程的 oom_score_adj 值,该值决定了在系统内存不足(OOM,Out of Memory)时,
# Redis 进程被 Linux 系统的 OOM Killer 选中终止的可能性。
oom-score-adj no

# 主要与 Redis 进程在不同状态下的 oom_score_adj 值有关,该值影响 Linux 系统在内存不足(OOM,Out of Memory)时选择哪些进程终止以释放内存。
# 第一个值(这里是 0)通常表示 Redis 进程在正常状态下的 oom_score_adj 值。
# 第二个值(这里是 200)表示 Redis 进程在某种特定状态下(例如处于高负载、高内存使用或其他预定义的状态)的 oom_score_adj 值。
# 第三个值(这里是 800)表示 Redis 进程在另一种更严重的状态下(例如处于严重内存压力或其他临界状态)的 oom_score_adj 值。
oom-score-adj-values 0 200 800

# disable-thp no

# 主要用于开启 Redis 的 AOF(Append Only File)持久化模式。
# 当设置为 yes 时,表示 Redis 会使用 AOF 持久化机制将写操作追加到文件末尾,以实现数据的持久化存储
appendonly yes

# The name of the append only file (default: "appendonly.aof")

appendfilename "appendonly.aof"

# appendfsync always
appendfsync everysec
# appendfsync no

# 主要用于控制 Redis 在进行 AOF 文件重写时的同步行为
# 当设置为 no 时,表示 Redis 在进行 AOF 文件重写(bgrewriteaof)时,会继续将新的写操作同步到 AOF 文件中
no-appendfsync-on-rewrite no

# 该配置项表示 AOF 文件大小的增长百分比。
# 当 AOF 文件的大小相对于上一次重写后的大小增长了 100% 时,Redis 会触发 AOF 文件的自动重写操作。
auto-aof-rewrite-percentage 100

# 该配置项设定了 AOF 文件触发自动重写的最小文件大小。
# 即使 auto-aof-rewrite-percentage 条件满足,但如果 AOF 文件的大小未达到 64mb,Redis 也不会触发自动重写操作。
auto-aof-rewrite-min-size 64mb

# 主要用于控制 Redis 在加载 AOF(Append Only File)文件时,遇到截断(truncated)情况的处理方式
# 当设置为 yes 时,表示 Redis 在加载 AOF 文件时,如果发现文件被截断(可能是由于系统崩溃、磁盘故障等导致文件不完整),
# 会尝试继续加载文件的剩余部分,并向用户发出日志信息和警告,而不是直接拒绝加载
aof-load-truncated yes

# 主要用于控制 Redis 的 AOF(Append Only File)文件的存储格式
# 当设置为 yes 时,表示 Redis 的 AOF 文件将使用 RDB 前置格式
aof-use-rdb-preamble yes

# 主要用于控制 Redis 中 Lua 脚本的执行时间限制
# 该配置项指定了 Redis 中 Lua 脚本的最大执行时间,单位为毫秒
lua-time-limit 5000

# cluster-enabled yes

# cluster-config-file nodes-6379.conf

# cluster-node-timeout 15000

# 主要用于控制 Redis 服务器对慢查询的记录阈值
# 当 Redis 执行一个命令的时间超过该阈值时,这个命令会被记录到慢日志(slow log)中
slowlog-log-slower-than 10000

# 主要用于控制 Redis 服务器的慢日志(Slow Log)的最大长度
slowlog-max-len 128

# 主要用于控制 Redis 的延迟监控功能的启用阈值
# 
latency-monitor-threshold 0

notify-keyspace-events ""

# 该配置项指定了使用 ziplist 存储哈希表时,哈希表元素的最大条目数
hash-max-ziplist-entries 512
# 该配置项指定了使用 ziplist 存储哈希表时,哈希表元素的最大字节大小
hash-max-ziplist-value 64

# 该配置项用于指定 Redis 列表使用 ziplist 存储时的大小限制
# 当设置为 -2 时,表示 Redis 会根据列表的长度来决定 ziplist 的大小限制
list-max-ziplist-size -2

# 该配置项指定了 Redis 列表的压缩深度
list-compress-depth 0

# 该配置项指定了 Redis 集合在使用整数集合(intset)存储结构时的最大元素数量
set-max-intset-entries 512

# 该配置项指定了 Redis 有序集合在使用 ziplist 存储结构时的最大元素数
zset-max-ziplist-entries 128
# 该配置项指定了 Redis 有序集合在使用 ziplist 存储结构时,元素的最大字节大小
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

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

activerehashing yes

# 控制 Redis 服务器为不同类型客户端分配的输出缓冲区的大小限制及相关处理策略
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60


hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

# Enabled active defragmentation
# activedefrag no

# Minimum amount of fragmentation waste to start active defrag
# active-defrag-ignore-bytes 100mb

# Minimum percentage of fragmentation to start active defrag
# active-defrag-threshold-lower 10

# Maximum percentage of fragmentation at which we use maximum effort
# active-defrag-threshold-upper 100

# Minimal effort for defrag in CPU percentage, to be used when the lower
# threshold is reached
# active-defrag-cycle-min 1

# Maximal effort for defrag in CPU percentage, to be used when the upper
# threshold is reached
# active-defrag-cycle-max 25

# Maximum number of set/hash/zset/list fields that will be processed from
# the main dictionary scan
# active-defrag-max-scan-fields 1000

# Jemalloc background thread for purging will be enabled by default
jemalloc-bg-thread yes

# Ending
        3:启动 redis,docker compose up -d  redis

        新建docker-compose.yml 文件,设置内容如下:

version: '3'
services:
  redis:
    image: redis:6.2.6
    container_name: redis6.2.6
    ## 设置持久化,允许远程访问,密码等
    command: redis-server --appendonly yes --bind 0.0.0.0 --requirepass your_password
    ports:
      - 6379:6379
    volumes:
      # - ./data/:/data
      - /docker/redis/conf/redis.conf:/etc/redis/redis.conf 
      - /docker/redis/data:/data
    environment:
      - TZ=Asia/Shanghai
    restart: always

    # 获取宿主机 root 权限
    privileged: true
    # # 设置容器网络为本机网络
    network_mode: "host"

        使用 docker compose up -d  redis 命令启动redis,启动完成后,可以使用 docker  ps 查看启动状态。如果启动失败,可以通过 docker  logs  容器id 或者  docker logs  容器名称 查看redis日志。启动完成后,查看如下:

        注意:如果修改了 redis.conf 配置文件,则需要先停止redis容器,再删除redis容器,然后重新启动redis,主要命令如下:

        a:停止 nginx 容器:docker  stop  nginx 容器id /  容器名称

        b:删除 nginx 容器:docker rm  容器id /  容器名称

        c:启动 nginx 容器:docker compose up -d  nginx

        4:测试 redis

        使用客户端连接工具,进行连接,测试如下:

        

        以上为 docker 下安装 redis 的基本步骤,一定要 注意 redis.conf 配置文件的挂载目录。我们只有不断地学习,才能遇见更好的自己。加油!美好的风景一直在路上!

      

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2281090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能之深度学习_[4]-神经网络入门

文章目录 神经网络基础1 神经网络1.1 神经网络概念1.1.1 什么是神经网络1.1.2 如何构建神经网络1.1.3 神经网络内部状态值和激活值 1.2 激活函数1.2.1 网络非线性因素理解1.2.2 常见激活函数1.2.2.1 Sigmoid 激活函数1.2.2.2 Tanh 激活函数1.2.2.3 ReLU 激活函数1.2.2.4 SoftMa…

FPGA中场战事

2023年10月3日,英特尔宣布由桑德拉里维拉(Sandra Rivera)担任“分拆”后独立运营的可编程事业部首席执行官。 从数据中心和人工智能(DCAI)部门总经理,转身为执掌该业务的CEO,对她取得像AMD掌门人苏姿丰博士类似的成功,无疑抱以厚望。 十年前,英特尔花费167亿美元真金白银…

李沐vscode配置+github管理+FFmpeg视频搬运+百度API添加翻译字幕

终端输入nvidia-smi查看cuda版本 我的是12.5,在网上没有找到12.5的torch,就安装12.1的。torch,torchvision,torchaudio版本以及python版本要对应 参考:https://blog.csdn.net/FengHanI/article/details/135116114 创…

Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普

引言: 今天我们聊聊Android生态中最“硬核”的话题:通用内核镜像(GKI)与内核模块接口(KMI)。这是内核碎片化终结者的秘密武器,解决了内核和供应商模块之间无尽的兼容性问题。为什么重要&#x…

K8S如何让worker使用kubectl命令(RBAC方法)

背景 目前集群规划如下 kubeadm安装集群master节点默认能使用kubectl命令,worker则不能使用。这是因为worker节点没授权。当然,你可以通过以下方式授权 mkdir .kube scp master1:/root/.kube/config .kube/但这样无疑给了worker节点非常大的权限&#…

【Excel】【VBA】Reaction超限点筛选与散点图可视化

【Excel】【VBA】Reaction超限点筛选与散点图可视化 功能概述 这段代码实现了以下功能: 从SAFE输出的结果worksheet通过datalink获取更新数据从指定工作表中读取数据检测超过阈值的数据点生成结果表格并添加格式化创建可视化散点图显示执行时间 流程图 #mermaid-…

[Computer Vision]实验三:图像拼接

目录 一、实验内容 二、实验过程及结果 2.1 单应性变换 2.2 RANSAC算法 三、实验小结 一、实验内容 理解单应性变换中各种变换的原理(自由度),并实现图像平移、旋转、仿射变换等操作,输出对应的单应性矩阵。利用RANSAC算法优…

微信小程序使用picker根据接口给的省市区的数据实现省市区三级联动或者省市区街道等多级联动

接口数据如上图 省市区多级联动&#xff0c;都是使用的一个接口通过传参父类的code。返回我们想要的数据 比如获取省就直接不要参数。市就把省得code传给接口&#xff0c;区就把市的code作为参数。 <picker mode"multiSelector" :range"mulSelect1" …

自动化01

测试用例的万能公式&#xff1a;功能测试界面测试性能测试易用性测试安全性测试兼容性测试 自动化的主要目的就是用来进行回归测试 新产品--第一个版本 (具备丰富的功能)&#xff0c;将产品的整体进行测试&#xff0c;人工创造一个自动化测试用例&#xff0c;在n个版本的时候…

JS宏进阶:正则表达式的使用

正则表达式&#xff0c;对于任何一门编程语言来说&#xff0c;都是一种非常强大的工具&#xff0c;主要用于搜索、编辑或操作文本和数据。因此&#xff0c;在JS中&#xff0c;也存在相应的对象new RegExp( )&#xff0c;在本章中&#xff0c;将详细介绍正则表达式在JS宏中的运用…

深度学习笔记——循环神经网络RNN

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细介绍面试过程中可能遇到的循环神经网络RNN知识点。 文章目录 文本特征提取的方法1. 基础方法1.1 词袋模型&#xff08;Bag of Words, BOW&#xff09;工作原…

Git进阶笔记系列(01)Git核心架构原理 | 常用命令实战集合

读书笔记&#xff1a;卓越强迫症强大恐惧症&#xff0c;在亲子家庭、职场关系里尤其是纵向关系模型里&#xff0c;这两种状态很容易无缝衔接。尤其父母对子女、领导对下属&#xff0c;都有望子成龙、强将无弱兵的期望&#xff0c;然而在你的面前&#xff0c;他们才是永远强大的…

SpringBoot读取yml配置文件一组对象数据初始化

1. yml的短横杠语法2. yml数组元素读取并初始化3. 测试结果 1. yml的短横杠语法 - 短横杠加空格&#xff0c;可以表示数组元素&#xff0c;如下配置 表示有名为apps的一组数据&#xff0c;数组的元素对象包含有corpId、corpSecret、appCode三个字段像server.port没有 - 表示的…

基于JAVA的校园二手商品交易平台的设计与开发

摘 要&#xff1a;政府政策引导与社会观念的转变使得国内大学生的创业意识逐渐提高&#xff0c;很多高校大学生开始自主创业。目前我国各大高校暂且还没有较为成型的针对校内学生创业者的校园网络服务平台。本文首先主要是介绍了关于java语言以及web开发的相关技术&#xff0c;…

深度学习核函数

一、核函数的基本概念 核函数在机器学习中具有重要应用价值&#xff0c;常用于支持向量机&#xff08;SVM&#xff09;等算法中。 核函数是面试中经常被考到的知识点&#xff0c;对于找工作和实际数据转换都有重要作用。 二、数据建模与核函数的作用 数据越多&#xff0c;可…

数据结构(三) 排序/并查集/图

目录 1. 排序 2.并查集 3.图 1.排序: 1.1 概念: 排序就是将数据按照某种规则进行排列, 具有某种顺序. 分为内排序和外排序. 内排序就是: 将数据放在内存中的排序; 外排序是: 数据太多无法在内存中排序的. 1.2 插入排序: 插入排序包含: 直接插入排序和希尔排序. (1) 直接插入…

ECCV 2024,全新激活函数!

激活函数对深度神经网络的成功可太重要了&#xff0c;它可以提升学习复杂关系的能力&#xff0c;减少过拟合&#xff0c;增强模型性能&#xff0c;与它相关的研究一直是重中之重。最近&#xff0c;这方向有了不少新突破。 ECCV 2024上的这篇&#xff0c;提出了一种可训练的高表…

小米Vela操作系统开源:AIoT时代的全新引擎

小米近日正式开源了其物联网嵌入式软件平台——Vela操作系统&#xff0c;并将其命名为OpenVela。这一举动在AIoT&#xff08;人工智能物联网&#xff09;领域掀起了不小的波澜&#xff0c;也为开发者们提供了一个强大的AI代码生成器和开发平台。OpenVela项目源代码已托管至GitH…

ComfyUI实现老照片修复——AI修复老照片(ComfyUI-ReActor / ReSwapper)尚待完善

AI修复老照片&#xff0c;试试吧&#xff0c;不一定好~~哈哈 2023年4月曾用过ComfyUI&#xff0c;当时就感慨这个工具和虚幻的蓝图很像&#xff0c;以后肯定是专业人玩的。 2024年我写代码去了&#xff0c;AI做图没太关注&#xff0c;没想到&#xff0c;现在ComfyUI真的变成了工…

YOLOv5训练自己的数据及rknn部署

YOLOv5训练自己的数据及rknn部署 一、下载源码二、准备自己的数据集2.1 标注图像2.2 数据集结构 三、配置YOLOv5训练3.1 修改配置文件3.2 模型选择 四、训练五、测试六、部署6.1 pt转onnx6.2 onnx转rknn 七、常见错误7.1 训练过程中的错误7.1.1 cuda: out of memory7.1.2 train…