docker安裝redis的完整步驟詳解
在平常的開發(fā)工作中,我們經(jīng)常會用到 redis,那么 docker 下應(yīng)該如何安裝 redis 呢?簡單來說:第一步:拉取redis鏡像;第二步:設(shè)置 redis.conf 配置文件;第三步:編寫 docker-compose.yml文件,啟動 redis;第四步:測試 redis。
1:拉取 redis 鏡像:docker pull redis:版本號
根據(jù)自己的需求,拉取合適的redis版本,如果 docker pull redis 命令,后面不寫版本號,那么默認(rèn)拉取最新的 redis 鏡像。拉取完成后,可以使用 docker images 命令查看拉取到的鏡像,redis鏡像如下:
注意:如果拉取鏡像失敗,可能是 docker 配置文件的問題。在 /etc/docker/ 目錄下,修改 daemon.json 文件中的配置的鏡像加速器。鏡像加速器網(wǎng)上搜索很多,嘗試修改配置,修改完后一定要重啟docker服務(wù),不然不生效。重啟 docker 命令:systemctl restart docker
2:創(chuàng)建掛載目錄,并設(shè)置 redis.conf 文件
1)創(chuàng)建掛載目錄
mkdir -p /docker/redis/conf/ mkdir -p /docker/redis/data/
2)設(shè)置 redis.conf 配置文件
在 /docker/redis/conf/ 目錄下 新建 redis.conf 文件,設(shè)置文件內(nèi)容如下:
# redis 配置 # 端口 port 6379 # tcp-backlog 表示 TCP 的監(jiān)聽隊列長度。 # 當(dāng) Redis 服務(wù)器監(jiān)聽客戶端的連接請求時,操作系統(tǒng)會維護(hù)一個等待連接的隊列,tcp-backlog 的值決定了這個隊列的長度。 # 在上述配置中,將該隊列長度設(shè)置為 511,表示 Redis 服務(wù)器在監(jiān)聽客戶端連接時,操作系統(tǒng)的 TCP 連接隊列最多可容納 511 個等待處理的連接請求。 tcp-backlog 511 # 當(dāng)設(shè)置為 0 時,表示 Redis 服務(wù)器不會因為客戶端處于空閑狀態(tài)而自動斷開連接。 # 即只要客戶端建立了與 Redis 服務(wù)器的連接,無論該客戶端是否發(fā)送請求,服務(wù)器都不會主動關(guān)閉連接,即使該客戶端長時間處于不活動狀態(tài)。 timeout 0 # tcp-keepalive 表示 TCP ?;顧C(jī)制的時間間隔,單位是秒。 # 當(dāng) Redis 服務(wù)器與客戶端建立 TCP 連接后,會在連接處于空閑狀態(tài)一段時間后發(fā)送保活探測包,以確保連接的有效性。 # 在上述配置中,設(shè)置為 300 秒,表示 Redis 服務(wù)器會在客戶端連接空閑 300 秒后,向客戶端發(fā)送?;钐綔y包。 tcp-keepalive 300 # 當(dāng)設(shè)置為 no 時,表示 Redis 服務(wù)器不會以守護(hù)進(jìn)程(daemon)的模式運行。 # 守護(hù)進(jìn)程是一種在后臺運行的進(jìn)程,通常不與用戶進(jìn)行交互,并且在后臺持續(xù)運行,不占用終端會話。 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 服務(wù)器的日志記錄級別。 loglevel notice # 該配置指定了 Redis 服務(wù)器將日志信息存儲在 /data/redis.log 文件中。 # 當(dāng) Redis 服務(wù)器運行時,會將產(chǎn)生的日志信息(如錯誤信息、操作信息等)按照 loglevel 所設(shè)定的級別寫入到 /data/redis.log 文件中。 logfile "/data/redis.log" # 主要用于設(shè)置 Redis 服務(wù)器內(nèi)部可用的數(shù)據(jù)庫數(shù)量。 # Redis 支持多個數(shù)據(jù)庫,這些數(shù)據(jù)庫在內(nèi)部以數(shù)字編號,從 0 開始。 # 該配置項表示 Redis 服務(wù)器內(nèi)部將創(chuàng)建 16 個不同的數(shù)據(jù)庫,編號為 0 到 15。 databases 16 always-show-logo no # 主要用于控制 Redis 服務(wù)器在后臺保存操作(BGSAVE)出現(xiàn)錯誤時的行為。 # 當(dāng)設(shè)置為 yes 時,如果 Redis 在執(zhí)行后臺保存操作(BGSAVE)出現(xiàn)錯誤,Redis 服務(wù)器將停止接受寫操作(如 SET, HSET, LPUSH 等)。 stop-writes-on-bgsave-error yes # 主要用于控制 Redis 的 RDB 文件的壓縮功能。 # 當(dāng)設(shè)置為 yes 時,Redis 在生成 RDB 文件(Redis 數(shù)據(jù)庫的快照文件,用于數(shù)據(jù)持久化)時,會對文件進(jìn)行壓縮。 rdbcompression yes # 主要用于控制 Redis 在生成和加載 RDB 文件時是否包含校驗和信息。 # 當(dāng)設(shè)置為 yes 時,Redis 在生成 RDB 文件(用于持久化存儲 Redis 數(shù)據(jù)庫狀態(tài)的文件)時,會在文件末尾添加一個校驗和。 rdbchecksum yes # 主要用于指定 Redis 進(jìn)行 RDB 持久化時生成的文件名稱。 # 當(dāng) Redis 進(jìn)行 RDB 持久化操作(例如使用 SAVE 或 BGSAVE 命令)時,會將當(dāng)前 Redis 數(shù)據(jù)庫的狀態(tài)存儲在一個文件中。 # 該配置項指定這個文件的名稱為 dump.rdb。 dbfilename dump.rdb # Redis 在某些同步操作時對 RDB 文件的處理方式。 # 當(dāng)設(shè)置為 no 時,Redis 在執(zhí)行某些同步操作(如 RDB 文件的復(fù)制、同步等)時,不會主動刪除同步過的 RDB 文件。 rdb-del-sync-files no dir /data # 當(dāng)該配置設(shè)置為 yes 時,表示副本服務(wù)器(replica)在某些情況下會繼續(xù)為客戶端提供陳舊的數(shù)據(jù)服務(wù)。 # 具體來說,當(dāng)副本服務(wù)器與主服務(wù)器的同步出現(xiàn)問題(如網(wǎng)絡(luò)故障、主服務(wù)器宕機(jī)、復(fù)制鏈路中斷等),導(dǎo)致副本服務(wù)器無法從主服務(wù)器更新最新的數(shù)據(jù)時, # 它不會拒絕客戶端的讀請求,而是繼續(xù)使用它最后一次同步得到的數(shù)據(jù)為客戶端提供服務(wù)。 replica-serve-stale-data yes # 當(dāng)設(shè)置為 yes 時,表示 Redis 副本服務(wù)器只能處理讀操作,而不允許執(zhí)行寫操作。 # 例如,用戶試圖在副本服務(wù)器上執(zhí)行寫操作,如 SET key value、HSET hash_key field value 等命令時, # Redis 副本服務(wù)器會拒絕執(zhí)行這些命令并返回錯誤信息。 replica-read-only yes # 該配置項位于 Redis 的配置文件中,用于控制 Redis 在主從復(fù)制時的同步方式 # 當(dāng)設(shè)置為 no(默認(rèn)狀態(tài))時,Redis 主服務(wù)器在進(jìn)行復(fù)制操作時,會先將數(shù)據(jù)存儲在磁盤上的 RDB 文件中,然后將該文件傳輸給副本服務(wù)器 # 在這種模式下,主服務(wù)器不會將 RDB 文件存儲在磁盤上,而是直接通過網(wǎng)絡(luò)將內(nèi)存中的數(shù)據(jù)快照發(fā)送給副本服務(wù)器。 # 這樣可以減少磁盤 I/O,提高復(fù)制的速度,尤其適用于主服務(wù)器磁盤 I/O 是性能瓶頸的場景。 repl-diskless-sync no # repl-diskless-sync 被設(shè)置為 yes 時,主服務(wù)器會采用無盤復(fù)制的方式將數(shù)據(jù)同步到副本服務(wù)器。 # repl-diskless-sync-delay 則表示在開始無盤同步操作之前,主服務(wù)器會等待的時間(單位:秒)。在上述示例中,主服務(wù)器會等待 5 秒鐘。 repl-diskless-sync-delay 5 # 主要用于控制 Redis 副本服務(wù)器在進(jìn)行無盤復(fù)制時的加載方式。 # 當(dāng)設(shè)置為 disabled 時,表示 Redis 副本服務(wù)器在進(jìn)行無盤復(fù)制(即從主服務(wù)器接收內(nèi)存快照而非從磁盤加載 RDB 文件)時,使用默認(rèn)的加載方式。 repl-diskless-load disabled # 主要用于控制 Redis 主從復(fù)制過程中的 TCP 數(shù)據(jù)傳輸方式。 # 當(dāng)設(shè)置為 no 時,表示 Redis 在主從復(fù)制過程中,不會禁用 TCP_NODELAY 選項。 repl-disable-tcp-nodelay no # 主要用于確定 Redis 副本服務(wù)器在主從復(fù)制架構(gòu)中的優(yōu)先級。 # 該配置項的值表示 Redis 副本服務(wù)器的優(yōu)先級 replica-priority 100 # 主要用于控制 Redis 的 ACL(訪問控制列表)日志的最大長度。 acllog-max-len 128 # 設(shè)置密碼 requirepass your_password # 主要涉及 Redis 的鍵刪除操作和復(fù)制操作的行為,用于控制 Redis 在執(zhí)行某些關(guān)鍵操作時是否采用阻塞式或非阻塞式(懶刪除)的處理方式。 # 這些配置項都設(shè)置為 no 時,Redis 在執(zhí)行相應(yīng)操作(內(nèi)存驅(qū)逐、刪除過期鍵、執(zhí)行會替換舊鍵的操作以及副本服務(wù)器全量同步時的數(shù)據(jù)庫清空操作)時, # 會采用阻塞式的刪除方式,可能會導(dǎo)致服務(wù)器在處理一些耗時較長的刪除操作時出現(xiàn)性能下降,因為會暫停對其他命令的處理。 # 而將這些配置項設(shè)置為 yes 則可以將這些操作改為非阻塞式(如使用 UNLINK 命令),使 Redis 可以在后臺漸進(jìn)式地處理刪除操作,提高性能, # 但會增加后臺資源的消耗,并且可能會在一定程度上影響數(shù)據(jù)一致性,需要根據(jù)具體的性能需求和數(shù)據(jù)一致性要求來合理配置。 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no # 主要用于控制 Redis 在執(zhí)行用戶刪除操作時是否使用惰性刪除。 # 當(dāng)設(shè)置為 no 時,表示 Redis 在執(zhí)行用戶發(fā)起的刪除操作(例如 DEL 命令)時,會同步刪除相關(guān)數(shù)據(jù),即立即釋放內(nèi)存。 lazyfree-lazy-user-del no # 該配置項用于調(diào)整 Redis 進(jìn)程的 oom_score_adj 值,該值決定了在系統(tǒng)內(nèi)存不足(OOM,Out of Memory)時, # Redis 進(jìn)程被 Linux 系統(tǒng)的 OOM Killer 選中終止的可能性。 oom-score-adj no # 主要與 Redis 進(jìn)程在不同狀態(tài)下的 oom_score_adj 值有關(guān),該值影響 Linux 系統(tǒng)在內(nèi)存不足(OOM,Out of Memory)時選擇哪些進(jìn)程終止以釋放內(nèi)存。 # 第一個值(這里是 0)通常表示 Redis 進(jìn)程在正常狀態(tài)下的 oom_score_adj 值。 # 第二個值(這里是 200)表示 Redis 進(jìn)程在某種特定狀態(tài)下(例如處于高負(fù)載、高內(nèi)存使用或其他預(yù)定義的狀態(tài))的 oom_score_adj 值。 # 第三個值(這里是 800)表示 Redis 進(jìn)程在另一種更嚴(yán)重的狀態(tài)下(例如處于嚴(yán)重內(nèi)存壓力或其他臨界狀態(tài))的 oom_score_adj 值。 oom-score-adj-values 0 200 800 # disable-thp no # 主要用于開啟 Redis 的 AOF(Append Only File)持久化模式。 # 當(dāng)設(shè)置為 yes 時,表示 Redis 會使用 AOF 持久化機(jī)制將寫操作追加到文件末尾,以實現(xiàn)數(shù)據(jù)的持久化存儲 appendonly yes # The name of the append only file (default: "appendonly.aof") appendfilename "appendonly.aof" # appendfsync always appendfsync everysec # appendfsync no # 主要用于控制 Redis 在進(jìn)行 AOF 文件重寫時的同步行為 # 當(dāng)設(shè)置為 no 時,表示 Redis 在進(jìn)行 AOF 文件重寫(bgrewriteaof)時,會繼續(xù)將新的寫操作同步到 AOF 文件中 no-appendfsync-on-rewrite no # 該配置項表示 AOF 文件大小的增長百分比。 # 當(dāng) AOF 文件的大小相對于上一次重寫后的大小增長了 100% 時,Redis 會觸發(fā) AOF 文件的自動重寫操作。 auto-aof-rewrite-percentage 100 # 該配置項設(shè)定了 AOF 文件觸發(fā)自動重寫的最小文件大小。 # 即使 auto-aof-rewrite-percentage 條件滿足,但如果 AOF 文件的大小未達(dá)到 64mb,Redis 也不會觸發(fā)自動重寫操作。 auto-aof-rewrite-min-size 64mb # 主要用于控制 Redis 在加載 AOF(Append Only File)文件時,遇到截斷(truncated)情況的處理方式 # 當(dāng)設(shè)置為 yes 時,表示 Redis 在加載 AOF 文件時,如果發(fā)現(xiàn)文件被截斷(可能是由于系統(tǒng)崩潰、磁盤故障等導(dǎo)致文件不完整), # 會嘗試?yán)^續(xù)加載文件的剩余部分,并向用戶發(fā)出日志信息和警告,而不是直接拒絕加載 aof-load-truncated yes # 主要用于控制 Redis 的 AOF(Append Only File)文件的存儲格式 # 當(dāng)設(shè)置為 yes 時,表示 Redis 的 AOF 文件將使用 RDB 前置格式 aof-use-rdb-preamble yes # 主要用于控制 Redis 中 Lua 腳本的執(zhí)行時間限制 # 該配置項指定了 Redis 中 Lua 腳本的最大執(zhí)行時間,單位為毫秒 lua-time-limit 5000 # cluster-enabled yes # cluster-config-file nodes-6379.conf # cluster-node-timeout 15000 # 主要用于控制 Redis 服務(wù)器對慢查詢的記錄閾值 # 當(dāng) Redis 執(zhí)行一個命令的時間超過該閾值時,這個命令會被記錄到慢日志(slow log)中 slowlog-log-slower-than 10000 # 主要用于控制 Redis 服務(wù)器的慢日志(Slow Log)的最大長度 slowlog-max-len 128 # 主要用于控制 Redis 的延遲監(jiān)控功能的啟用閾值 # latency-monitor-threshold 0 notify-keyspace-events "" # 該配置項指定了使用 ziplist 存儲哈希表時,哈希表元素的最大條目數(shù) hash-max-ziplist-entries 512 # 該配置項指定了使用 ziplist 存儲哈希表時,哈希表元素的最大字節(jié)大小 hash-max-ziplist-value 64 # 該配置項用于指定 Redis 列表使用 ziplist 存儲時的大小限制 # 當(dāng)設(shè)置為 -2 時,表示 Redis 會根據(jù)列表的長度來決定 ziplist 的大小限制 list-max-ziplist-size -2 # 該配置項指定了 Redis 列表的壓縮深度 list-compress-depth 0 # 該配置項指定了 Redis 集合在使用整數(shù)集合(intset)存儲結(jié)構(gòu)時的最大元素數(shù)量 set-max-intset-entries 512 # 該配置項指定了 Redis 有序集合在使用 ziplist 存儲結(jié)構(gòu)時的最大元素數(shù) zset-max-ziplist-entries 128 # 該配置項指定了 Redis 有序集合在使用 ziplist 存儲結(jié)構(gòu)時,元素的最大字節(jié)大小 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes # 控制 Redis 服務(wù)器為不同類型客戶端分配的輸出緩沖區(qū)的大小限制及相關(guān)處理策略 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 文件,設(shè)置內(nèi)容如下:
version: '3' services: redis: image: redis:6.2.6 container_name: redis6.2.6 ## 設(shè)置持久化,允許遠(yuǎn)程訪問,密碼等 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 # 獲取宿主機(jī) root 權(quán)限 privileged: true # # 設(shè)置容器網(wǎng)絡(luò)為本機(jī)網(wǎng)絡(luò) network_mode: "host"
使用 docker compose up -d redis 命令啟動redis,啟動完成后,可以使用 docker ps 查看啟動狀態(tài)。如果啟動失敗,可以通過 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
使用客戶端連接工具,進(jìn)行連接,測試如下:
以上為 docker 下安裝 redis 的基本步驟,一定要 注意 redis.conf 配置文件的掛載目錄。
到此這篇關(guān)于docker安裝redis的文章就介紹到這了,更多相關(guān)docker安裝redis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis數(shù)據(jù)類型之散列類型hash命令學(xué)習(xí)
這篇文章主要為大家介紹了Redis數(shù)據(jù)類型之散列類型hash命令學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Redis+IDEA實現(xiàn)單機(jī)鎖和分布式鎖的過程
這篇文章主要介紹了Redis+IDEA實現(xiàn)單機(jī)鎖和分布式鎖的過程,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-07-07