網(wǎng)站首頁 編程語言 正文
前言
在使用docker部署redis的時(shí)候,遇到很多坑,在此記錄下遇到的問題
一、安裝docker和docker-compose
### 安裝docker curl -sSL https://get.daocloud.io/docker | sh ### 啟動(dòng)docker systemctl start docker ### 安裝docker-compose curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose ### 將可執(zhí)行權(quán)限應(yīng)用于二進(jìn)制文件 chmod +x /usr/local/bin/docker-compose
二、下載redis版本,本文中選擇的是6.2.6版本
下載網(wǎng)址:download.redis.io/releases/
三、解壓并復(fù)制redis.conf配置文件到服務(wù)器上,本文是放在/etc/redis/redis.conf
四、修改redis.conf配置文件
### 指定redis綁定的主機(jī)地址,注釋掉這部分,使redis可以外部訪問 # bind 127.0.0.1 -::1 ### 指定訪問redis服務(wù)端的端口 port 6379 ### 指定客戶端連接redis服務(wù)器時(shí),當(dāng)閑置的時(shí)間為多少(如300)秒時(shí)關(guān)閉連接(0表示禁用) timeout 0 ### 默認(rèn)情況下,Redis不作為守護(hù)進(jìn)程運(yùn)行。如果需要,請使用“yes” daemonize no ### 給redis設(shè)置密碼,不需要密碼的話則注釋 # requirepass foobared ### 開啟redis持久化,默認(rèn)為no appendonly yes ### 防止出現(xiàn)遠(yuǎn)程主機(jī)強(qiáng)迫關(guān)閉了一個(gè)現(xiàn)有的連接的錯(cuò)誤 默認(rèn)是300 tcp-keepalive 300 ### 指定redis數(shù)據(jù)庫的日志級(jí)別,常用的日志級(jí)別有debug、verbose、notice、warning,不進(jìn)行修改的情況下默認(rèn)的是notice loglevel notice ### 指定redis數(shù)據(jù)庫多長時(shí)間內(nèi)(s)有多少次(c)更新操作時(shí)就把緩存中的數(shù)據(jù)同步到本地庫,比如:save 600 2,指的是10分鐘內(nèi)有2次更新操作,就同步到本地庫 save### 指定redis的最大內(nèi)存。由于Redis 在啟動(dòng)時(shí)會(huì)把數(shù)據(jù)加載到內(nèi)存中,當(dāng)數(shù)據(jù)達(dá)到最大內(nèi)存時(shí),redis會(huì)自動(dòng)把已經(jīng)到期和即將到期的key值。所以可以根據(jù)需求調(diào)整自己的所需的最大內(nèi)存 maxmemory 500mb ### 設(shè)置了maxmemory的選項(xiàng),redis內(nèi)存使用達(dá)到上限。可以通過設(shè)置LRU算法來刪除部分key,釋放空間。默認(rèn)是按照過期時(shí)間的,如果set時(shí)候沒有加上過期時(shí)間就會(huì)導(dǎo)致數(shù)據(jù)寫滿maxmemory maxmemory-policy volatile-lru ### 設(shè)置外部網(wǎng)絡(luò)連接redis服務(wù),開啟需配置bind ip或者設(shè)置訪問密碼,關(guān)閉此時(shí)外部網(wǎng)絡(luò)可以直接訪問 # protected-mode yes
五、配置docker-compose.yml
my_redis: image: redis:6.2.6-alpine # 指定服務(wù)鏡像,最好是與之前下載的redis配置文件保持一致 container_name: my_redis # 容器名稱 restart: on-failure # 重啟方式 environment: - TZ=Asia/Shanghai # 設(shè)置時(shí)區(qū) volumes: # 配置數(shù)據(jù)卷 - /root/redis/data:/data - /etc/redis/redis.conf:/etc/redis/redis.conf ports: # 映射端口 - "6380:6379" sysctls: # 設(shè)置容器中的內(nèi)核參數(shù) - net.core.somaxconn=1024 # - vm.overcommit_memory=1 command: /bin/sh -c "echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf && redis-server /etc/redis/redis.conf --appendonly yes" # 指定配置文件并開啟持久化 privileged: true # 使用該參數(shù),container內(nèi)的root擁有真正的root權(quán)限。否則,container內(nèi)的root只是外部的一個(gè)普通用戶權(quán)限 復(fù)制代碼
六、啟動(dòng)容器
### 啟動(dòng)容器 docker-compose up -d ### 進(jìn)入容器 docker exec -it my_redis /bin/sh ### 進(jìn)入客戶端 redis-cli ### 如果設(shè)置了密碼,需要輸入auth 密碼 auth 你的密碼 ### 查看已存儲(chǔ)的key keys * ### 查看redis信息 info
七、redis啟動(dòng)后遇到的問題
- Warning: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128
意思:無法強(qiáng)制執(zhí)行TCP backlog設(shè)置511,因?yàn)?proc/sys/net/core/somaxconn被設(shè)置為較低的值128
echo "net.core.somaxconn=551" > /etc/sysctl.conf sysctl net.core.somaxconn=551
- Warning:overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect
意思: overcommit_memory的值設(shè)置為0! 在內(nèi)存不足的情況下,后臺(tái)保存可能會(huì)失敗。 要解決此問題,請將“vm.overcommit_memory = 1”添加到/etc/sysctl.conf,然后重新啟動(dòng)或運(yùn)行命令“sysctl vm.overcommit_memory = 1”以使其生效
echo 1 > /proc/sys/vm/overcommit_memory echo "vm.overcommit_memory=1" >> /etc/sysctl.conf sysctl vm.overcommit_memory=1
- redis報(bào)錯(cuò):RDB: 0 MB of memory used by copy-on-write
由于我redis.conf配置文件,配置了save,將緩存中的數(shù)據(jù)同步到本地庫,所以我暫時(shí)的解決方法是取消保存,設(shè)置save ""
八、分享個(gè)redis可視化工具
redis-insight下載鏈接:https://redis.com/redis-enterprise/redis-insight/
原文鏈接:https://juejin.cn/post/7081931407630532616
相關(guān)推薦
- 2023-07-05 settings delete global hidden_api_policy_pre_p_app
- 2023-01-20 Python-with?open()?as?f的用法及說明_python
- 2022-05-12 Android Studio 崩潰一閃而過抓不到日志
- 2022-06-10 C語言?模擬實(shí)現(xiàn)strlen函數(shù)詳解_C 語言
- 2022-12-23 C語言中scanf的用法舉例_C 語言
- 2024-03-23 如何保證Redis和數(shù)據(jù)庫數(shù)據(jù)一致性
- 2022-09-20 Tomcat服務(wù)器配置https認(rèn)證(使用keytool生成證書)_Tomcat
- 2022-04-09 一起來了解python的if流程控制_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支