docker 安装 redis 详解

        在平常的开发工作中,我们经常会用到 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 配置文件的挂载目录。我们只有不断地学习,才能遇见更好的自己。加油!美好的风景一直在路上!

      

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

困境如雾路难寻,心若清明步自轻---2024年创作回顾

文章目录 前言博客创作回顾第一次被催更第一次获得证书周榜几篇博客互动最多的最满意的引发思考的 写博契机 碎碎念时也运也部分经验 尾 前言 今年三月份,我已写下一篇《近一年多个人总结》,当时还没开始写博客。四月份写博后,就顺手将那篇总…

综合与时序分析的设计约束(1)——静态时序分析简介

目录 1.绪论2.静态时序分析与动态时序分析3.时序约束在静态时序分析中的作用3.1.约束作为声明3.2. 约束作为断言3.3.约束作为指令3.4.约束作为异常3.5.约束的角色变化 4.STA需要正确约束5.时序路径起点和终点6.建立与保持6.1 建立时间6.2 保持时间6.3 裕度 7.SDC主要类型7.1 时…

【算法日记】从零开始认识动态规划(一)

挫折会来也会过去, 热泪会流下也会收起, 没有什么可以让我气馁的, 因为,我有着长长的一生。 --- 席慕蓉 《写给幸福》--- 从零开始认识动态规划 1 动态规划问题1.1 什么是动态规划算法1.2 动态规划算法如何Debug1.3 动态规划…

八股学习 微服务篇

微服务篇 常见面试内容Spring Cloud 常见组件注册中心Ribbon负载均衡策略服务雪崩 常见面试内容 Spring Cloud 常见组件 Spring Cloud有5个常见组件: Eureka/Nacos:注册中心;Ribbon:负载均衡;Feign:远程调用;Hystrix/Sentinel:服…

【矢量数据】2024年最新中国省市县乡四级矢量地图数据 [推广有奖]

中国四级矢量地图数据是当前地理信息系统(GIS)中广泛应用的重要资源,涉及国家级、省级、市级、县级及乡级行政区的空间信息。这些数据可应用于地图绘制、城市规划、政府决策及各类地理分析等领域 一、中国四级矢量地图数据的介绍 本分享数据…

力扣707题(2)——设计链表

#题目 #3,5和6的代码 今天看剩下几个题的代码,1,2,4的代码已经在上篇博客写过了想看的小伙伴移步到: 力扣707题——设计链表-CSDN博客 //第3题头插法 void addAtHead(int val){ //记录头结点ListNode nhead; //新节点的创建,并让它指向原本头结点的后…

JavaWeb 学习笔记 XML 和 Json 篇 | 020

今日推荐语 愿你遇见好天气,愿你的征途铺满了星星——圣埃克苏佩里 日期 学习内容 打卡编号2025年01月23日JavaWeb笔记 XML 和 Json 篇020 前言 哈喽,我是菜鸟阿康。 以下是我的学习笔记,既做打卡也做分享,希望对你也有所帮助…

c#实现当捕获异常时自动重启程序

首先,需要说明这并不是一个推荐的做法,只有在你确实有这样的需求时才考虑这么做。 以下是AI的回答,为什么不推荐这么做,供参考。 在C#中,如果你在catch语句中尝试重启程序自身,可能会遇到以下几个问题&…

Spring WebSocket 与 STOMP 协议结合实现私聊私信功能

目录 后端pom.xmlConfig配置类Controller类DTO 前端安装相关依赖websocketService.js接口javascripthtmlCSS 效果展示简单测试连接: 报错解决方法1、vue3 使用SockJS报错 ReferenceError: global is not defined 功能补充拓展1. 安全性和身份验证2. 异常处理3. 消息…

uniapp+Vue3(<script setup lang=“ts“>)模拟12306城市左右切换动画效果

效果图&#xff1a; 代码&#xff1a; <template><view class"container"><view class"left" :class"{ sliding: isSliding }" animationend"resetSliding">{{ placeA }}</view><view class"center…

缓存之美:万文详解 Caffeine 实现原理(下)

上篇文章&#xff1a;缓存之美&#xff1a;万文详解 Caffeine 实现原理&#xff08;上&#xff09; getIfPresent 现在我们对 put 方法有了基本了解&#xff0c;现在我们继续深入 getIfPresent 方法&#xff1a; public class TestReadSourceCode {Testpublic void doRead() …

Spring Security(maven项目) 3.0.2.6版本—总

通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往复以至无穷&#xf…

C++函数——fill

在C中&#xff0c;std::fill 是标准库提供的一个算法适用于几乎所有类型的容器&#xff0c;只要这些容器支持迭代器操作。具体来说&#xff0c;std::fill 的适用性取决于容器是否提供了满足其要求的迭代器类型&#xff0c;用于将指定范围内的所有元素设置为某个特定值。它是一个…

jmeter中对接口进行循环请求后获取相应数据

1、工作中遇到一个场景就是对某个单一接口进行循环请求&#xff0c;并需要获取每次请求后返回的相应数据&#xff1b; 2、首先就在jmeter对接口相关组件进行配置&#xff0c;需要组件有&#xff1a;循环控制器、CSV数据文件设置、计数器、访问接口、HTTP信息头管理器、正则表达…

豆包MarsCode 蛇年编程大作战 | 高效开发“蛇年运势预测系统”

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 总有人间一两风&#xff0c;填我十万八千梦。 &#x1f680; 路漫漫其修远兮&#xff0c;吾将上下而求索。 豆包MarsCode 蛇年编程大作战 | &#x1f40d; 蛇年运势预测 在线体验地址&#xff1a;蛇年…

【豆包MarsCode蛇年编程大作战】花样贪吃蛇

目录 引言 展示效果 prompt提示信息 第一次提示&#xff08;实现基本功能&#xff09; 初次实现效果 第二次提示&#xff08;美化UI&#xff09; 第一次美化后的效果 第二次美化后的效果 代码展示 实现在线体验链接 码上掘金使用教程 体验地址&#xff1a; 花样贪吃蛇…

github汉化

本文主要讲述了github如何汉化的方法。 目录 问题描述汉化步骤1.打开github&#xff0c;搜索github-chinese2.打开项目&#xff0c;打开README.md3.下载安装脚本管理器3.1 在README.md中往下滑动&#xff0c;找到浏览器与脚本管理器3.2 选择浏览器对应的脚本管理器3.2.1 点击去…

K8S 启动探测、就绪探测、存活探测

先来思考一个问题&#xff1a; 在 Deployment 执行滚动更新 web 应用的时候&#xff0c;总会出现一段时间&#xff0c;Pod 对外提供网络访问&#xff0c;但是页面访问却发生404&#xff0c;这个问题要如何解决呢&#xff1f;学完今天的内容&#xff0c;相信你会有自己的答案。 …

如何使用CRM数据分析优化销售和客户关系?

嘿&#xff0c;大家好&#xff01;你有没有想过为什么有些公司在市场上如鱼得水&#xff0c;而另一些却在苦苦挣扎&#xff1f;答案可能就藏在他们的销售策略和客户关系管理&#xff08;CRM&#xff09;系统里。今天我们要聊的就是如何通过有效的 CRM 数据分析来提升你的销售额…

语音转文字的先驱-认识Buzz的前世今生

Buzz 是一款基于 OpenAI Whisper 模型开发的开源语音转文字工具&#xff0c;其历史可以追溯到 Whisper 模型的推出&#xff0c;并在之后逐渐发展为一个功能强大且广泛使用的工具。以下是关于 Buzz 的详细历史介绍&#xff1a; 1. Whisper 模型的背景 Buzz 的核心是 OpenAI 开…