?截止目前,Redis 的最新穩(wěn)定版本是 6.2.6。這個(gè)版本在可讀性、性能和穩(wěn)定性方面進(jìn)行了改進(jìn),并增加了一些新的命令和功能。
一、安裝redis
1.1? 拉去鏡像
docker pull redis:6.2.6
執(zhí)行過程?
1-拉去鏡像
[root@iZuf6hxabqikytnrumsi4gZ logs]# docker pull redis:6.2.6
2- 查看拉去的鏡像
[root@iZuf6hxabqikytnrumsi4gZ logs]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 6.2.6 7614ae9453d1 23 months ago 113MB
mysql 5.7 c20987f18b13 23 months ago 448MB
?1.2 創(chuàng)建reids配置文件
? ? ? 新建文件夾
1-新建文件夾
[root@syf/]# mkdir -p /data/dockerData/redis/conf
[root@syf/]# cd /data/dockerData/redis/conf
2-創(chuàng)建文件
[root@syf conf]# touch redis.config
[root@syf conf]# ls
my.config
3-編寫文件內(nèi)容 (進(jìn)入后 i 子母鍵插入,黏貼下面配置,:wq! 保存并退出)
[root@syf conf]# vim my.config
?本次使用的配置文件(注意看我注釋):
# Redis服務(wù)器配置
# 綁定IP地址
#解除本地限制 注釋bind 127.0.0.1
#bind 127.0.0.1
# 服務(wù)器端口號
port 6379
#配置密碼,不要可以刪掉
requirepass syf133618
#這個(gè)配置不要會和docker -d 命令 沖突
# 服務(wù)器運(yùn)行模式,Redis以守護(hù)進(jìn)程方式運(yùn)行,默認(rèn)為no,改為yes意為以守護(hù)進(jìn)程方式啟動,可后臺運(yùn)行,除非kill進(jìn)程,改為yes會使配置文件方式啟動redis失敗,如果后面redis啟動失敗,就將這個(gè)注釋掉
daemonize no
#當(dāng)Redis以守護(hù)進(jìn)程方式運(yùn)行時(shí),Redis默認(rèn)會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定(自定義)
#pidfile /data/dockerData/redis/run/redis6379.pid
#默認(rèn)為no,redis持久化,可以改為yes
appendonly yes
#當(dāng)客戶端閑置多長時(shí)間后關(guān)閉連接,如果指定為0,表示關(guān)閉該功能
timeout 60
# 服務(wù)器系統(tǒng)默認(rèn)配置參數(shù)影響 Redis 的應(yīng)用
maxclients 10000
tcp-keepalive 300
#指定在多長時(shí)間內(nèi),有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件,可以多個(gè)條件配合(分別表示900秒(15分鐘)內(nèi)有1個(gè)更改,300秒(5分鐘)內(nèi)有10個(gè)更改以及60秒內(nèi)有10000個(gè)更改)
save 900 1
save 300 10
save 60 10000
# 按需求調(diào)整 Redis 線程數(shù)
tcp-backlog 511
# 設(shè)置數(shù)據(jù)庫數(shù)量,這里設(shè)置為16個(gè)數(shù)據(jù)庫
databases 16
# 啟用 AOF, AOF常規(guī)配置
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
# 慢查詢閾值
slowlog-log-slower-than 10000
slowlog-max-len 128
# 是否記錄系統(tǒng)日志,默認(rèn)為yes
syslog-enabled yes
#指定日志記錄級別,Redis總共支持四個(gè)級別:debug、verbose、notice、warning,默認(rèn)為verbose
loglevel notice
# 日志輸出文件,默認(rèn)為stdout,也可以指定文件路徑
logfile stdout
# 日志文件
#logfile /var/log/redis/redis-server.log
# 系統(tǒng)內(nèi)存調(diào)優(yōu)參數(shù)
# 按需求設(shè)置
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
下面是關(guān)于配置文件詳解,自己參考的使用:
daemonize no
默認(rèn)情況下,redis不是在后臺運(yùn)行的。如果需要在后臺運(yùn)行,把該項(xiàng)的值更改為yes。
pidfile /var/run/redis.pid
當(dāng)redis在后臺運(yùn)行的時(shí)候,redis默認(rèn)會把pid文件放在/var/run/redis.pid,你可以配置到其他位置。當(dāng)運(yùn)行多個(gè)redis服務(wù)時(shí),需要指定不同的pid文件和端口。
port 6379
指定redis運(yùn)行的端口,默認(rèn)是6379。
bind 127.0.0.1
指定redis只接收來自于該IP地址的請求看,如果不進(jìn)行設(shè)置,那么將處理所有請求。在生產(chǎn)環(huán)境中最好設(shè)置該項(xiàng)。
loglevel debug
指定日志記錄級別,其中redis總共支持四個(gè)級別:debug、verbose、notice、warning,默認(rèn)為verbose。
1 . debug表示記錄很多信息,用于開發(fā)和測試
2.verbose表示記錄有用的信息, 但不像debug會記錄那么多
3.notice表示普通的verbose,常用于生產(chǎn)環(huán)境
4.warning 表示只有非常重要或者嚴(yán)重的信息會記錄到日志
logfile /var/log/redis/redis.log
配置log文件地址,默認(rèn)值為stdout。若后臺模式會輸出到/dev/null。
databases 16
可用數(shù)據(jù)庫數(shù),默認(rèn)值為16,默認(rèn)數(shù)據(jù)庫為0,數(shù)據(jù)庫范圍在0~15之間切換,彼此隔離。
save
保存數(shù)據(jù)到磁盤,格式為save,指出在多長時(shí)間內(nèi),有多少次更新操作,就將數(shù)據(jù)同步到數(shù)據(jù)文件rdb。相當(dāng)于條件觸發(fā)抓取快照,這個(gè)可以多個(gè)條件配合。
save 9001就表示900秒內(nèi)至少有1個(gè)key被改變就保存數(shù)據(jù)到磁盤。
rdbcompression yes
存儲至本地?cái)?shù)據(jù)庫時(shí)(持久化到rdb文件)是否壓縮數(shù)據(jù),默認(rèn)為yes。
dbfilename dump.rdb
本地持久化數(shù)據(jù)庫文件名,默認(rèn)值為dump.rdb。
dir ./
工作目錄,數(shù)據(jù)庫鏡像備份的文件放置的路徑。這里的路徑跟文件名要分開配置是因?yàn)閞edis在進(jìn)行備份時(shí),先會將當(dāng)前數(shù)據(jù)庫的狀態(tài)寫入到一個(gè)臨時(shí)文件中,等備份完成時(shí),再把該臨時(shí)文件替換為上面所指定的文件。 而這里的臨時(shí)文件和上面所配置的備份文件都會放在這個(gè)指定的路徑當(dāng)中,AOF文件也會存放在這個(gè)目錄下面。 注意這里必須指定一個(gè)目錄而不是文件。
slaveof
主從復(fù)制,設(shè)置該數(shù)據(jù)庫為其他數(shù)據(jù)庫的從數(shù)據(jù)庫。設(shè)置當(dāng)本機(jī)為slave服務(wù)時(shí),設(shè)置master服務(wù)的IP地址及端口。 在redis啟動時(shí),它會自動從master進(jìn)行數(shù)據(jù)同步。
masterauth
?當(dāng)master服務(wù)設(shè)置了密碼保護(hù)時(shí)(用requirepass制定的密碼)slave服務(wù)連接master的密碼。
slave-serve-stale-data yes
當(dāng)從庫同主機(jī)失去連接或者復(fù)制正在進(jìn)行,從機(jī)庫有兩種運(yùn)行方式:
如果slave-serve-stale-data設(shè)置為 yes(默認(rèn)設(shè)置),從庫會繼續(xù)相應(yīng)客戶端的請求。
如果slave-serve-stale-data是指為no,除去INFO和SLAVOF命令之外的任何請求都會返回一個(gè)錯(cuò)誤"SYNC with master in progress"。
repl-ping-slave-period 10
從庫會按照一個(gè)時(shí)間間隔向主庫發(fā)送PING,可以通過repl-ping-slave-period設(shè)置這個(gè)時(shí)間間隔,默認(rèn)是10秒。
repl-timeout 60
設(shè)置主庫批量數(shù)據(jù)傳輸時(shí)間或者ping回復(fù)時(shí)間間隔,默認(rèn)值是60秒,一定要確保repl-timeout大于repl-ping-slave-period。
requirepass foobared
設(shè)置客戶端連接后進(jìn)行任何其他指定前需要使用的密碼。因?yàn)閞edis速度相當(dāng)快,所以在一臺比較好的服務(wù)器平臺下, 一個(gè)外部的用戶可以在一秒鐘進(jìn)行150K次的密碼嘗試,這意味著你需要指定非常強(qiáng)大的密碼來防止暴力破解。
rename?command CONFIG “”
命令重命名,在一個(gè)共享環(huán)境下可以重命名相對危險(xiǎn)的命令,比如把CONFIG重名為一個(gè)不容易猜測的字符:
rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52
如果想刪除一個(gè)命令,直接把它重命名為一個(gè)空字符""即可:rename-command CONFIG “”。
maxclients 128
設(shè)置同一時(shí)間最大客戶端連接數(shù),默認(rèn)無限制。redis可以同時(shí)打開的客戶端連接數(shù)為redis進(jìn)程可以打開的最大文件描述符數(shù)。
如果設(shè)置 maxclients 0,表示不作限制。當(dāng)客戶端連接數(shù)到達(dá)限制時(shí),redis會關(guān)閉新的連接并向客戶端返回max number of clients reached錯(cuò)誤信息。
maxmemory
指定redis最大內(nèi)存限制。redis在啟動時(shí)會把數(shù)據(jù)加載到內(nèi)存中,達(dá)到最大內(nèi)存后,redis會先嘗試清除已到期或即將到期的key,redis同時(shí)也會移除空的list對象。當(dāng)此方法處理后,仍然到達(dá)最大內(nèi)存設(shè)置,將無法再進(jìn)行寫入操作,但仍然可以進(jìn)行讀取操作。
注意:redis新的vm機(jī)制,會把key存放內(nèi)存,value會存放在swap區(qū)。
maxmemory-policy volatile-lru
當(dāng)內(nèi)存達(dá)到最大值的時(shí)候redis會選擇刪除哪些數(shù)據(jù)呢?有五種方式可供選擇:
1.volatile-lru代表利用LRU算法移除設(shè)置過期時(shí)間的key(LRU:最近使用LeastRecentlyUsed)
2.a(chǎn)llkeys-lru代表利用LRU算法移除任何key
3.volatile-random代表移除設(shè)置過過期時(shí)間的隨機(jī)key
4.a(chǎn)llkeys_random代表移除一個(gè)隨機(jī)的key
5. volatile-ttl代表移除即將過期的key(minor TTL)
6. noeviction代表不移除任何key,只是返回一個(gè)寫錯(cuò)誤
注意:對于上面的策略,如果沒有合適的key可以移除,寫的時(shí)候redis會返回一個(gè)錯(cuò)誤。
appendonly no
默認(rèn)情況下,redis會在后臺異步的把數(shù)據(jù)庫鏡像備份到磁盤,但是該備份是非常耗時(shí)的,而且備份也不能很頻繁。 如果發(fā)生諸如拉閘限電、拔插頭等狀況,那么將造成比較大范圍的數(shù)據(jù)丟失,所以redis提供了另外一種更加高效的數(shù)據(jù)庫備份及災(zāi)難恢復(fù)方式。
開啟append only模式之后,redis會把所接收到的每一次寫操作請求都追加到appendonly. aof文件中。當(dāng)redis重新啟動時(shí),會從該文件恢復(fù)出之前的狀態(tài),但是這樣會造成appendonly. aof文件過大,所以redis還支持BGREWRITEAOF指令對appendonly.aof。
appendfilename appendonly.aof
AOF文件名稱,默認(rèn)為"appendonly.aof"。
appendfsync everysec
redis支持三種同步AOF文件的策略:
1.no代表不進(jìn)行同步,系統(tǒng)去操作
2.a(chǎn)lways代表每次有寫操作都進(jìn)行同步
3.everysec代表對寫操作進(jìn)行累積,每秒同步一次,默認(rèn)是"everysec",按照速度和安全折中這是最好的
slowlog-log-slower-than 10000
記錄超過特定執(zhí)行時(shí)間的命令。執(zhí)行時(shí)間不包括I/O計(jì)算,比如連接客戶端,返回結(jié)果等。只是命令執(zhí)行時(shí)間,可以通過兩個(gè)參數(shù)設(shè)置slow log:一個(gè)是告訴Redis執(zhí)行超過多少時(shí)間被記錄的參數(shù)slowlog-log-slower-than(微妙),另一個(gè)是slow log 的長度。
當(dāng)一個(gè)新命令被記錄的時(shí)候最早的命令將被從隊(duì)列中移除,下面的時(shí)間以微妙微單位,因此1000000代表一分鐘。注意制定一個(gè)負(fù)數(shù)將關(guān)閉慢日志,而設(shè)置為0將強(qiáng)制每個(gè)命令都會記錄。
hash-max-zipmap-entries 512 && hash-maxz-ipmap-value 64
當(dāng)hash中包含超過指定元素個(gè)數(shù)并且最大的元素沒有超過臨界時(shí),hash將以一種特殊的編碼方式(大大減少內(nèi)存使用)來存儲,這里可以設(shè)置這兩個(gè)臨界值。Redis Hash對應(yīng)Value內(nèi)部實(shí)際就是一個(gè)HashMap,實(shí)際這里會有2種不同實(shí)現(xiàn)。這個(gè)Hash的成員比較少時(shí)redis為了節(jié)省內(nèi)存會采用類似一維數(shù)組的方式來緊湊存儲,而不會采用真正的HashMap結(jié)構(gòu),對應(yīng)的value redisObject的encoding為zipmap。當(dāng)成員數(shù)量增大時(shí)會自動轉(zhuǎn)成真正的HashMap,此時(shí)encoding為ht。
hash-max-zipmap-entries 512 512
list數(shù)據(jù)類型多少節(jié)點(diǎn)以下會采用去指針的緊湊存儲格式。
list-max-ziplist-value 64
數(shù)據(jù)類型節(jié)點(diǎn)值大小小于多少字節(jié)會采用緊湊存儲格式。
setmaxintsetentries 512
set數(shù)據(jù)類型內(nèi)部數(shù)據(jù)如果全部是數(shù)值型,且包含多少節(jié)點(diǎn)以下會采用緊湊格式存儲。
zsetmaxziplistentries 128
zsort數(shù)據(jù)類型多少節(jié)點(diǎn)以下會采用去指針的緊湊存儲格式。
zsetmaxziplistvalue 64
zsort數(shù)據(jù)類型節(jié)點(diǎn)值大小小于多少字節(jié)會采用緊湊存儲格式。
activerehashing yes
redis將在每100毫秒時(shí)使用1毫秒的CPU時(shí)間來對redis的hash表進(jìn)行重新hash,可以降低內(nèi)存的使用。
當(dāng)你的使用場景中,有非常嚴(yán)格的實(shí)時(shí)性需要,不能夠接受redis時(shí)不時(shí)的對請求有2毫秒的延遲的話,把這項(xiàng)配置為no。如果沒有這么嚴(yán)格的實(shí)時(shí)性要求,可以設(shè)置為yes,以便能夠盡可能快的釋放內(nèi)存。
?三、運(yùn)行容器,使用上面配置文件啟動
docker run -p 6379:6379 --name redis6.2.6 -v /data/dockerData/redis/conf/redis.config:/etc/redis/redis.config -v /data/dockerData/redis/data:/var/lib/redis -v /data/dockerData/redis/logs:/logs -d redis:6.2.6 redis-server /etc/redis/redis.config
上面命令參數(shù)解釋
–privileged=true :容器內(nèi)的root擁有真正root權(quán)限,否則容器內(nèi)root只是外部普通用戶權(quán)限
-p:端口映射,此處映射 主機(jī)6379端口 到 容器的6379端口
-v:主機(jī)和容器的目錄映射關(guān)系,":"前為主機(jī)目錄,之后為容器目錄新建配置文件書卷:? -v /data/dockerData/redis/conf/redis.config:/etc/redis/redis.config
redis數(shù)據(jù)保存數(shù)據(jù)卷? -v /data/dockerData/redis/data:/var/lib/redis
reids日志文數(shù)據(jù)卷? -v /data/dockerData/redis/logs:/logs
-d : 表示使得容器后臺一直運(yùn)行
redis-server /etc/redis/redis.conf:指定配置文件啟動redis-server進(jìn)程
–appendonly yes:開啟數(shù)據(jù)持久化
–requirepass 123456 :設(shè)置你的密碼,設(shè)置密碼比較安全
?
運(yùn)行步驟:
1-查看鏡像
[root@iZuf6hxabqikytnrumsi4gZ conf]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 6.2.6 7614ae9453d1 23 months ago 113MB
mysql 5.7 c20987f18b13 23 months ago 448MB
2-查看容器
[root@iZuf6hxabqikytnrumsi4gZ conf]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2a384f369e0b mysql:5.7 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql5.7
3-以配置文件方式啟動redis
[root@iZuf6hxabqikytnrumsi4gZ conf]# docker run -p 6379:6379 --name redis6.2.6 -v /data/dockerData/redis/conf/redis.config:/etc/redis/redis.config -v /data/dockerData/redis/data:/var/lib/redis -v /data/dockerData/redis/logs:/logs -d redis:6.2.6 /etc/redis/redis.config
4-查看啟動的容器
[root@iZuf6hxabqikytnrumsi4gZ conf]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a34aff536643 redis:6.2.6 "docker-entrypoint.s…" 59 seconds ago Up 58 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp redis6.2.6
2a384f369e0b mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql5.7
?四、測試
1-進(jìn)入redis容器
[root@iZuf6hxabqikytnrumsi4gZ logs]# docker exec -it a34aff536643 bash
2-連接redis
root@a34aff536643:/data# redis-cli
3-輸入密碼
127.0.0.1:6379> auth 1234
OK
最后一定要開放防火墻
- 輸入指令:
firewall-cmd --zone=public --add-port=6379/tcp --permanent
,開放防火墻指定端口。- 輸入指令:
firewall-cmd --reload
,重新加載防火墻。
設(shè)置開機(jī)啟動文章來源:http://www.zghlxwxcb.cn/news/detail-811884.html
開機(jī)啟動
docker update --restart=always 容器ID
?
取消
docker update --restart=no 容器ID?文章來源地址http://www.zghlxwxcb.cn/news/detail-811884.html
到了這里,關(guān)于docker 安裝Redis (全網(wǎng)最詳細(xì):附帶配置文件)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!