1. 程式人生 > >Redis配置與開啟認證

Redis配置與開啟認證

ice 客戶 rbo 多個 連接 pub dir 進行 setup

獲取配置

Redis 的配置文件位於 Redis 安裝目錄下,文件名為 redis.conf。

你可以通過 CONFIG 命令查看或設置配置項。

語法

Redis CONFIG 命令格式如下:redis 127.0.0.1:6379> CONFIG GET CONFIG_SETTING_NAME

實例

redis 127.0.0.1:6379> CONFIG GET loglevel

1) "loglevel"
2) "notice"

使用 ***** 號獲取所有配置項:

實例

redis 127.0.0.1:6379> CONFIG GET *

  1) "dbfilename"
  2) "dump.rdb"
  3) "requirepass"
  4) ""
  5) "masterauth"
  ...

編輯配置

你可以通過修改 redis.conf 文件或使用 CONFIG set 命令來修改配置。

語法

CONFIG SET 命令基本語法:

redis 127.0.0.1:6379> CONFIG SET CONFIG_SETTING_NAME NEW_CONFIG_VALUE

實例

redis 127.0.0.1:6379> CONFIG SET loglevel "notice"
OK
redis 127.0.0.1:6379> CONFIG GET loglevel

1) "loglevel"
2) "notice"

參數說明

進程參數

daemonize no

Redis默認不是以守護進程的方式運行,可以通過該配置項修改,使用yes啟用守護進程


pidfile /var/run/redis.pid

當Redis以守護進程方式運行時,Redis默認會把pid寫入/var/run/redis.pid文件,可以通過pidfile指定


port 6379

指定Redis監聽端口,默認端口為6379,作者在自己的一篇博文中解釋了為什麽選用6379作為默認端口,因為6379在手機按鍵上MERZ對應的號碼,而MERZ取自意大利歌女Alessia Merz的名字


bind 127.0.0.1

綁定的主機地址


timeout 300

當客戶端閑置多長時間後關閉連接,如果指定為0,表示關閉該功能


日誌參數

loglevel verbose

指定日誌記錄級別,Redis總共支持四個級別:debug、verbose、notice、warning,默認為verbose


logfile stdout

日誌記錄方式,默認為標準輸出,如果配置Redis為守護進程方式運行,而這裏又配置為日誌記錄方式為標準輸出,則日誌將會發送給/dev/null


appendonly no

指定是否在每次更新操作後進行日誌記錄,Redis在默認情況下是異步的把數據寫入磁盤,如果不開啟,可能會在斷電時導致一段時間內的數據丟失。因為 redis本身同步數據文件是按上面save條件來同步的,所以有的數據會在一段時間內只存在於內存中。默認為no


appendfilename appendonly.aof

指定更新日誌文件名,默認為appendonly.aof


no:         表示等操作系統進行數據緩存同步到磁盤(快) 
always:     表示每次更新操作後手動調用fsync()將數據寫到磁盤(慢,安全) 
everysec:   表示每秒同步一次(折衷,默認值)

appendfsync everysec

指定更新日誌條件,共有3個可選值


vm-enabled no

指定是否啟用虛擬內存機制,默認值為no,簡單的介紹一下,VM機制將數據分頁存放,由Redis將訪問量較少的頁即冷數據swap到磁盤上,訪問多的頁面由磁盤自動換出到內存中


vm-swap-file /tmp/redis.swap

虛擬內存文件路徑,默認值為/tmp/redis.swap,不可多個Redis實例共享


vm-max-memory 0

將所有大於vm-max-memory的數據存入虛擬內存,無論vm-max-memory設置多小,所有索引數據都是內存存儲的(Redis的索引數據 就是keys),也就是說,當vm-max-memory設置為0的時候,其實是所有value都存在於磁盤。默認值為0


vm-page-size 32

Redis swap文件分成了很多的page,一個對象可以保存在多個page上面,但一個page上不能被多個對象共享,vm-page-size是要根據存儲的 數據大小來設定的,作者建議如果存儲很多小對象,page大小最好設置為32或者64bytes;如果存儲很大大對象,則可以使用更大的page,如果不 確定,就使用默認值


vm-pages 134217728

設置swap文件中的page數量,由於頁表(一種表示頁面空閑或使用的bitmap)是在放在內存中的,,在磁盤上每8個pages將消耗1byte的內存。


vm-max-threads 4

設置訪問swap文件的線程數,最好不要超過機器的核數,如果設置為0,那麽所有對swap文件的操作都是串行的,可能會造成比較長時間的延遲。默認值為4

數據參數

databases 16

設置數據庫的數量,默認數據庫為 0 ,可以使用 SELECT <dbid> 命令在連接上指定數據庫 id


save <seconds> <changes>

指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合

Redis默認配置文件中提供了三個條件:

save    900     1
save    300     10
save    60      10000

分別表示900秒(15分鐘)內有1個更改,300秒(5分鐘)內有10個更改以及60秒內有10000個更改。


rdbcompression yes

指定存儲至本地數據庫時是否壓縮數據,默認為yes,Redis采用LZF壓縮,如果為了節省CPU時間,可以關閉該選項,但會導致數據庫文件變的巨大


dbfilename dump.rdb

指定本地數據庫文件名,默認值為dump.rdb


dir ./

指定本地數據庫存放目錄


集群參數

slaveof <masterip> <masterport>

設置當本機為slav服務時,設置master服務的IP地址及端口,在Redis啟動時,它會自動從master進行數據同步


masterauth <master-password>

當master服務設置了密碼保護時,slav服務連接master的密碼


安全參數

requirepass foobared

設置Redis連接密碼,如果配置了連接密碼,客戶端在連接Redis時需要通過 AUTH <password> 命令提供密碼,默認關閉


內存參數

maxclients 128

設置同一時間最大客戶端連接數,默認無限制,Redis可以同時打開的客戶端連接數為Redis進程可以打開的最大文件描述符數,如果設置 maxclients 0,表示不作限制。當客戶端連接數到達限制時,Redis會關閉新的連接並向客戶端返回max number of clients reached錯誤信息


maxmemory <bytes>

指定Redis最大內存限制,Redis在啟動時會把數據加載到內存中,達到最大內存後,Redis會先嘗試清除已到期或即將到期的Key,當此方法處理 後,仍然到達最大內存設置,將無法再進行寫入操作,但仍然可以進行讀取操作。Redis新的vm機制,會把Key存放內存,Value會存放在swap區


其他參數

glueoutputbuf yes

設置在向客戶端應答時,是否把較小的包合並為一個包發送,默認為開啟


hash-max-zipmap-entries 64
hash-max-zipmap-value 512

指定在超過一定的數量或者最大的元素超過某一臨界值時,采用一種特殊的哈希算法


activerehashing yes

指定是否激活重置哈希,默認為開啟


include /path/to/local.conf

指定包含其它的配置文件,可以在同一主機上多個Redis實例之間使用同一份配置文件,而同時各個實例又擁有自己的特定配置文件

Redis 命令

Redis 命令用於在 redis 服務上執行操作。

要在 redis 服務上執行命令需要一個 redis 客戶端。Redis 客戶端在我們之前下載的的 redis 的安裝包中。

語法

Redis 客戶端的基本語法為:

$ redis-cli

實例

以下實例講解了如何啟動 redis 客戶端:

啟動 redis 客戶端,打開終端並輸入命令 redis-cli。該命令會連接本地的 redis 服務。

$redis-cli
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING

PONG

在以上實例中我們連接到本地的 redis 服務並執行 PING 命令,該命令用於檢測 redis 服務是否啟動。


在遠程服務上執行命令

如果需要在遠程 redis 服務上執行命令,同樣我們使用的也是 redis-cli 命令。

語法

$ redis-cli -h host -p port -a password

實例

以下實例演示了如何連接到主機為 127.0.0.1,端口為 6379 ,密碼為 mypass 的 redis 服務上。

$redis-cli -h 127.0.0.1 -p 6379 -a "mypass"
redis 127.0.0.1:6379>
redis 127.0.0.1:6379> PING

PONG

開啟認證

修改配置文件

將要求認證的參數註釋取消

 requirepass foobared

foobared 為密碼,自定義即可

註釋以下參數

bind 127.0.0.1

重啟redis與開放6379端口

$ sudo systemctl enable redis-server [systemctl daemon-reload]
Synchronizing state of redis-server.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable redis-server                                 

$ sudo iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 27017 -j ACCEPT

$ sudo service redis-server start
$ ps -ef | grep redis
redis     9352     1  0 08:48 ?        00:00:00 /usr/bin/redis-server 127.0.0.1:6379
whoami    9395  5561  0 08:48 pts/8    00:00:00 grep --color=auto redis

在Windows Client連接

這個時候嘗試登錄redis,發現可以登上,但是執行具體命令是提示操作不允許

D:\Dev\Cmder
λ net start redis
請求的服務已經啟動。

請鍵入 NET HELPMSG 2182 以獲得更多的幫助。

D:\Dev\Cmder
λ redis-cli -h 192.168.56.102 -p 6379
192.168.56.102:6379> keys *
(error) NOAUTH Authentication required.

使用以下方式進行認證

D:\Dev\Cmder                                     
λ redis-cli -h 192.168.56.102 -p 6379 -a foobared
192.168.56.102:6379> keys *                      
1) "mylist"                                      
2) "list1"                                       
3) "myhash"                                      
192.168.56.102:6379> CONFIG GET requirepass
1) "requirepass"
2) "foobared"
192.168.56.102:6379>                         

當然也可以在登錄後修改認證密碼,不過這只在當前會話中有效,想要永遠保持還是得修改配置文件。

除了在登錄時通過 -a 參數制定密碼外,還可以登錄時不指定密碼,而在執行操作前進行認證。

D:\Dev\Cmder                         
λ redis-cli -h 192.168.56.102 -p 6379
192.168.56.102:6379> auth foobared   
OK                                   
192.168.56.102:6379> keys *          
1) "mylist"                          
2) "list1"                           
3) "myhash"                          
192.168.56.102:6379>                 

master 密碼

若master配置了密碼則slave也要配置相應的密碼參數否則無法進行正常復制的。
slave中配置文件內找到如下行,移除註釋,修改密碼即可

#masterauth  mstpassword 

套路都是一樣的。

Redis Manager Desktop

技術分享圖片

技術分享圖片

註意

在redis3.2之後,redis增加了protected-mode,在這個模式下,即使註釋掉了bind 127.0.0.1,再訪問redisd時候還是報錯,如下

(error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.

Redis配置與開啟認證