windows環境
1,修改redis.conf配置文件
2.1.關閉保護模式 設置protected-mode no(必須操作) ################################## NETWORK ##################################### protected-mode no #開啟了保護模式,只允許bind下的ip地址可以訪問redis 2.2.關閉bind ip地址 在bind前面加上一個#號即可(必須操作) ################################## NETWORK ##################################### # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 #注釋掉所有的 bind 2.3.修改redis默認端口 設置port 需要的端口號(不必須操作),不過這個也可以不修改,在reids容器啟動的時候可以指定對應的宿主機端口,也相當於是修改了端口 ################################## NETWORK ##################################### port 6379 2.4.開啟redis持久化 設置appendonly yes (必須操作) ################################## NETWORK ##################################### appendonly yes 2.5.設置密碼 設置 requirepass yourpassword (必須操作) ################################## SECURITY ################################### requirepass 123456 2.6.設置是否開啟守護進程模式 daemonize no (注意事項) 如果在docker run之后發現redis閃退,可能就是這個設置了為yes,docker 至少需要一個前台進程,否則認為程序已經掛了 ################################# GENERAL ##################################### daemonize no
2,命令行啟動 redis-server.exe redis.windows.conf
Linux環境
1.redis.conf完整代碼 密碼123456
################################ GENERAL ##################################### #是否在后台執行,yes:后台運行;no:不是后台運行(老版本默認) daemonize yes #3.2里的參數,是否開啟保護模式,默認開啟。要是配置里沒有指定bind和密碼。開啟該參數后,redis只會本地進行訪問,拒絕外部訪問。要是開啟了密碼 和bind,可以開啟。否 則最好關閉,設置為no。 protected-mode no #redis的進程文件 pidfile /data/redis/redis-5.0.8/bin/redis-server.pid #redis監聽的端口號。 port 6379 #此參數確定了TCP連接中已完成隊列(完成三次握手之后)的長度, 當然此值必須不大於Linux系統定義的/proc/sys/net/core/somaxconn值,默認是511,而Linux的默認參數值是128。當系統並發量大並且客戶端速度緩慢的時候,可以將這二個參數一起參考設定。該內核參數默認值一般是128,對於負載很大的服務程序來說大大的不夠。一般會將它修改為2048或者更大。在/etc/sysctl.conf中添加:net.core.somaxconn = 2048,然后在終端中執行sysctl -p。 tcp-backlog 511 #指定 redis 只接收來自於該 IP 地址的請求,如果不進行設置,那么將處理所有請求 #bind 127.0.0.1 # 此參數為設置客戶端空閑超過timeout,服務端會斷開連接,為0則服務端不會主動斷開連接,不能小於0。 timeout 0 #tcp keepalive參數。如果設置不為0,就使用配置tcp的SO_KEEPALIVE值,使用keepalive有兩個好處:檢測掛掉的對端。降低中間設備出問題而導致網絡看似連接卻已經與對端端口的問題。在Linux內核中,設置了keepalive,redis會定時給對端發送ack。檢測到對端關閉需要兩倍的設置值。 tcp-keepalive 0 #指定了服務端日志的級別。級別包括:debug(很多信息,方便開發、測試),verbose(許多有用的信息,但是沒有debug級別信息多),notice(適當的日志級別,適合生產環境),warn(只有非常重要的信息) loglevel notice #指定了記錄日志的文件。空字符串的話,日志會打印到標准輸出設備。后台運行的redis標准輸出是/dev/null。 logfile /data/redis/redis-server.log #是否打開記錄syslog功能 # syslog-enabled no #syslog的標識符。 # syslog-ident redis #日志的來源、設備 # syslog-facility local0 #數據庫的數量,默認使用的數據庫是DB 0。可以通過”SELECT “命令選擇一個db databases 16 ################################ SNAPSHOTTING ################################ # 快照配置 # 注釋掉“save”這一行配置項就可以讓保存數據庫功能失效 # 設置sedis進行數據庫鏡像的頻率。 # 900秒(15分鍾)內至少1個key值改變(則進行數據庫保存--持久化) # 300秒(5分鍾)內至少10個key值改變(則進行數據庫保存--持久化) # 60秒(1分鍾)內至少10000個key值改變(則進行數據庫保存--持久化) save 900 1 save 300 10 save 60 10000 #當RDB持久化出現錯誤后,是否依然進行繼續進行工作,yes:不能進行工作,no:可以繼續進行工作,可以通過info中的rdb_last_bgsave_status了解RDB持久化是否有錯誤 stop-writes-on-bgsave-error yes #使用壓縮rdb文件,rdb文件壓縮使用LZF壓縮算法,yes:壓縮,但是需要一些cpu的消耗。no:不壓縮,需要更多的磁盤空間 rdbcompression yes #是否校驗rdb文件。從rdb格式的第五個版本開始,在rdb文件的末尾會帶上CRC64的校驗和。這跟有利於文件的容錯性,但是在保存rdb文件的時候,會有大概10%的性能損耗,所以如果你追求高性能,可以關閉該配置。 rdbchecksum yes #rdb文件的名稱 dbfilename dump.rdb #數據目錄,數據庫的寫入會在這個目錄。rdb、aof文件也會寫在這個目錄 dir /data/redis ################################# REPLICATION ################################# #復制選項,slave復制對應的master。 # slaveof <masterip> <masterport> #如果master設置了requirepass,那么slave要連上master,需要有master的密碼才行。masterauth就是用來配置master的密碼,這樣可以在連上master后進行認證。 # masterauth <master-password> #當從庫同主機失去連接或者復制正在進行,從機庫有兩種運行方式:1) 如果slave-serve-stale-data設置為yes(默認設置),從庫會繼續響應客戶端的請求。2) 如果slave-serve-stale-data設置為no,除去INFO和SLAVOF命令之外的任何請求都會返回一個錯誤”SYNC with master in progress”。 slave-serve-stale-data yes #作為從服務器,默認情況下是只讀的(yes),可以修改成NO,用於寫(不建議)。 slave-read-only yes #是否使用socket方式復制數據。目前redis復制提供兩種方式,disk和socket。如果新的slave連上來或者重連的slave無法部分同步,就會執行全量同步,master會生成rdb文件。有2種方式:disk方式是master創建一個新的進程把rdb文件保存到磁盤,再把磁盤上的rdb文件傳遞給slave。socket是master創建一個新的進程,直接把rdb文件以socket的方式發給slave。disk方式的時候,當一個rdb保存的過程中,多個slave都能共享這個rdb文件。socket的方式就的一個個slave順序復制。在磁盤速度緩慢,網速快的情況下推薦用socket方式。 repl-diskless-sync no #diskless復制的延遲時間,防止設置為0。一旦復制開始,節點不會再接收新slave的復制請求直到下一個rdb傳輸。所以最好等待一段時間,等更多的slave連上來。 repl-diskless-sync-delay 5 #slave根據指定的時間間隔向服務器發送ping請求。時間間隔可以通過 repl_ping_slave_period 來設置,默認10秒。 # repl-ping-slave-period 10 #復制連接超時時間。master和slave都有超時時間的設置。master檢測到slave上次發送的時間超過repl-timeout,即認為slave離線,清除該slave信息。slave檢測到上次和master交互的時間超過repl-timeout,則認為master離線。需要注意的是repl-timeout需要設置一個比repl-ping-slave-period更大的值,不然會經常檢測到超時。 # repl-timeout 60 #是否禁止復制tcp鏈接的tcp nodelay參數,可傳遞yes或者no。默認是no,即使用tcp nodelay。如果master設置了yes來禁止tcp nodelay設置,在把數據復制給slave的時候,會減少包的數量和更小的網絡帶寬。但是這也可能帶來數據的延遲。默認我們推薦更小的延遲,但是在數據量傳輸很大的場景下,建議選擇yes。 repl-disable-tcp-nodelay no #復制緩沖區大小,這是一個環形復制緩沖區,用來保存最新復制的命令。這樣在slave離線的時候,不需要完全復制master的數據,如果可以執行部分同步,只需要把緩沖區的部分數據復制給slave,就能恢復正常復制狀態。緩沖區的大小越大,slave離線的時間可以更長,復制緩沖區只有在有slave連接的時候才分配內存。沒有slave的一段時間,內存會被釋放出來,默認1m。 # repl-backlog-size 5mb #master沒有slave一段時間會釋放復制緩沖區的內存,repl-backlog-ttl用來設置該時間長度。單位為秒。 # repl-backlog-ttl 3600 #當master不可用,Sentinel會根據slave的優先級選舉一個master。最低的優先級的slave,當選master。而配置成0,永遠不會被選舉。 slave-priority 100 #redis提供了可以讓master停止寫入的方式,如果配置了min-slaves-to-write,健康的slave的個數小於N,mater就禁止寫入。master最少得有多少個健康的slave存活才能執行寫命令。這個配置雖然不能保證N個slave都一定能接收到master的寫操作,但是能避免沒有足夠健康的slave的時候,master不能寫入來避免數據丟失。設置為0是關閉該功能。 # min-slaves-to-write 3 #延遲小於min-slaves-max-lag秒的slave才認為是健康的slave。 # min-slaves-max-lag 10 # 設置1或另一個設置為0禁用這個特性。 # Setting one or the other to 0 disables the feature. # By default min-slaves-to-write is set to 0 (feature disabled) and # min-slaves-max-lag is set to 10. ################################## SECURITY ################################### #requirepass配置可以讓用戶使用AUTH命令來認證密碼,才能使用其他命令。這讓redis可以使用在不受信任的網絡中。為了保持向后的兼容性,可以注釋該命令,因為大部分用戶也不需要認證。使用requirepass的時候需要注意,因為redis太快了,每秒可以認證15w次密碼,簡單的密碼很容易被攻破,所以最好使用一個更復雜的密碼。 requirepass 123456 #把危險的命令給修改成其他名稱。比如CONFIG命令可以重命名為一個很難被猜到的命令,這樣用戶不能使用,而內部工具還能接着使用。 # rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 #設置成一個空的值,可以禁止一個命令 # rename-command CONFIG "" ################################### LIMITS #################################### ############################## APPEND ONLY MODE ############################### #默認redis使用的是rdb方式持久化,這種方式在許多應用中已經足夠用了。但是redis如果中途宕機,會導致可能有幾分鍾的數據丟失,根據save來策略進行持久化,Append Only File是另一種持久化方式,可以提供更好的持久化特性。Redis會把每次寫入的數據在接收后都寫入 appendonly.aof 文件,每次啟動時Redis都會先把這個文件的數據讀入內存里,先忽略RDB文件。 appendonly no #aof文件名 appendfilename "appendonly.aof" #aof持久化策略的配置 #no表示不執行fsync,由操作系統保證數據同步到磁盤,速度最快。 #always表示每次寫入都執行fsync,以保證數據同步到磁盤。 #everysec表示每秒執行一次fsync,可能會導致丟失這1s數據。 appendfsync everysec # 在aof重寫或者寫入rdb文件的時候,會執行大量IO,此時對於everysec和always的aof模式來說,執行fsync會造成阻塞過長時間,no-appendfsync-on-rewrite字段設置為默認設置為no。如果對延遲要求很高的應用,這個字段可以設置為yes,否則還是設置為no,這樣對持久化特性來說這是更安全的選擇。設置為yes表示rewrite期間對新寫操作不fsync,暫時存在內存中,等rewrite完成后再寫入,默認為no,建議yes。Linux的默認fsync策略是30秒。可能丟失30秒數據。 no-appendfsync-on-rewrite no #aof自動重寫配置。當目前aof文件大小超過上一次重寫的aof文件大小的百分之多少進行重寫,即當aof文件增長到一定大小的時候Redis能夠調用bgrewriteaof對日志文件進行重寫。當前AOF文件大小是上次日志重寫得到AOF文件大小的二倍(設置為100)時,自動啟動新的日志重寫過程。 auto-aof-rewrite-percentage 100 #設置允許重寫的最小aof文件大小,避免了達到約定百分比但尺寸仍然很小的情況還要重寫 auto-aof-rewrite-min-size 64mb #aof文件可能在尾部是不完整的,當redis啟動的時候,aof文件的數據被載入內存。重啟可能發生在redis所在的主機操作系統宕機后,尤其在ext4文件系統沒有加上data=ordered選項(redis宕機或者異常終止不會造成尾部不完整現象。)出現這種現象,可以選擇讓redis退出,或者導入盡可能多的數據。如果選擇的是yes,當截斷的aof文件被導入的時候,會自動發布一個log給客戶端然后load。如果是no,用戶必須手動redis-check-aof修復AOF文件才可以。 aof-load-truncated yes ################################ LUA SCRIPTING ############################### # 如果達到最大時間限制(毫秒),redis會記個log,然后返回error。當一個腳本超過了最大時限。只有SCRIPT KILL和SHUTDOWN NOSAVE可以用。第一個可以殺沒有調write命令的東西。要是已經調用了write,只能用第二個命令殺。 lua-time-limit 5000 ################################ REDIS CLUSTER ############################### #集群開關,默認是不開啟集群模式。 # cluster-enabled yes #集群配置文件的名稱,每個節點都有一個集群相關的配置文件,持久化保存集群的信息。這個文件並不需要手動配置,這個配置文件有Redis生成並更新,每個Redis集群節點需要一個單獨的配置文件,請確保與實例運行的系統中配置文件名稱不沖突 # cluster-config-file nodes-6379.conf #節點互連超時的閥值。集群節點超時毫秒數 # cluster-node-timeout 15000 #在進行故障轉移的時候,全部slave都會請求申請為master,但是有些slave可能與master斷開連接一段時間了,導致數據過於陳舊,這樣的slave不應該被提升為master。該參數就是用來判斷slave節點與master斷線的時間是否過長。判斷方法是: #比較slave斷開連接的時間和(node-timeout * slave-validity-factor) + repl-ping-slave-period #如果節點超時時間為三十秒, 並且slave-validity-factor為10,假設默認的repl-ping-slave-period是10秒,即如果超過310秒slave將不會嘗試進行故障轉移 # cluster-slave-validity-factor 10 #master的slave數量大於該值,slave才能遷移到其他孤立master上,如這個參數若被設為2,那么只有當一個主節點擁有2 個可工作的從節點時,它的一個從節點會嘗試遷移。 # cluster-migration-barrier 1 #默認情況下,集群全部的slot有節點負責,集群狀態才為ok,才能提供服務。設置為no,可以在slot沒有全部分配的時候提供服務。不建議打開該配置,這樣會造成分區的時候,小分區的master一直在接受寫請求,而造成很長時間數據不一致。 # cluster-require-full-coverage yes ################################## SLOW LOG ################################### ###slog log是用來記錄redis運行中執行比較慢的命令耗時。當命令的執行超過了指定時間,就記錄在slow log中,slog log保存在內存中,所以沒有IO操作。 #執行時間比slowlog-log-slower-than大的請求記錄到slowlog里面,單位是微秒,所以1000000就是1秒。注意,負數時間會禁用慢查詢日志,而0則會強制記錄所有命令。 slowlog-log-slower-than 10000 #慢查詢日志長度。當一個新的命令被寫進日志的時候,最老的那個記錄會被刪掉。這個長度沒有限制。只要有足夠的內存就行。你可以通過 SLOWLOG RESET 來釋放內存。 slowlog-max-len 128 ################################ LATENCY MONITOR ############################## #延遲監控功能是用來監控redis中執行比較緩慢的一些操作,用LATENCY打印redis實例在跑命令時的耗時圖表。只記錄大於等於下邊設置的值的操作。0的話,就是關閉監視。默認延遲監控功能是關閉的,如果你需要打開,也可以通過CONFIG SET命令動態設置。 latency-monitor-threshold 0 ############################# EVENT NOTIFICATION ############################## notify-keyspace-events "" ############################### ADVANCED CONFIG ############################### #數據量小於等於hash-max-ziplist-entries的用ziplist,大於hash-max-ziplist-entries用hash hash-max-ziplist-entries 512 #value大小小於等於hash-max-ziplist-value的用ziplist,大於hash-max-ziplist-value用hash。 hash-max-ziplist-value 64 #數據量小於等於list-max-ziplist-entries用ziplist,大於list-max-ziplist-entries用list。 list-max-ziplist-entries 512 #value大小小於等於list-max-ziplist-value的用ziplist,大於list-max-ziplist-value用list。 list-max-ziplist-value 64 #數據量小於等於set-max-intset-entries用iniset,大於set-max-intset-entries用set。 set-max-intset-entries 512 #數據量小於等於zset-max-ziplist-entries用ziplist,大於zset-max-ziplist-entries用zset。 zset-max-ziplist-entries 128 #value大小小於等於zset-max-ziplist-value用ziplist,大於zset-max-ziplist-value用zset。 zset-max-ziplist-value 64 #value大小小於等於hll-sparse-max-bytes使用稀疏數據結構(sparse),大於hll-sparse-max-bytes使用稠密的數據結構(dense)。一個比16000大的value是幾乎沒用的,建議的value大概為3000。如果對CPU要求不高,對空間要求較高的,建議設置到10000左右。 hll-sparse-max-bytes 3000 #Redis將在每100毫秒時使用1毫秒的CPU時間來對redis的hash表進行重新hash,可以降低內存的使用。當你的使用場景中,有非常嚴格的實時性需要,不能夠接受Redis時不時的對請求有2毫秒的延遲的話,把這項配置為no。如果沒有這么嚴格的實時性要求,可以設置為yes,以便能夠盡可能快的釋放內存。 activerehashing yes ##對客戶端輸出緩沖進行限制可以強迫那些不從服務器讀取數據的客戶端斷開連接,用來強制關閉傳輸緩慢的客戶端。 #對於normal client,第一個0表示取消hard limit,第二個0和第三個0表示取消soft limit,normal client默認取消限制,因為如果沒有尋問,他們是不會接收數據的。 client-output-buffer-limit normal 0 0 0 #對於slave client和MONITER client,如果client-output-buffer一旦超過256mb,又或者超過64mb持續60秒,那么服務器就會立即斷開客戶端連接。 client-output-buffer-limit slave 256mb 64mb 60 #對於pubsub client,如果client-output-buffer一旦超過32mb,又或者超過8mb持續60秒,那么服務器就會立即斷開客戶端連接。 client-output-buffer-limit pubsub 32mb 8mb 60 #redis執行任務的頻率為1s除以hz。 hz 10 #在aof重寫的時候,如果打開了aof-rewrite-incremental-fsync開關,系統會每32MB執行一次fsync。這對於把文件寫入磁盤是有幫助的,可以避免過大的延遲峰值。 aof-rewrite-incremental-fsync yes
2.linux放行redis端口
vi /etc/sysconfig/iptables
-A INPUT -m state -state new -m tcp -p tcp --dport 6379 -j ACCEPT service iptables restart
3.啟動
cd /data/redis/redis-5.0.8 ./bin/redis-server redis.conf
4.停止
cd /data/redis/redis-5.0.8/bin ./redis-cli auth 123456 shutdown exit