1. 程式人生 > >redis安全及必備知識

redis安全及必備知識

可能 sync sim write 很好 wrap 內存數據 man 配置

redis安全及必備知識

一.redis安全

為redis設置密碼命令行的模式(重啟後失效):
查看密碼:

CONFIG GET requirepass

密碼認證:

AUTH password

設置密碼:

CONFIG SET requirepass "password"

127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) ""
127.0.0.1:6379> CONFIG SET requirepass "abc123"
OK
127.0.0.1:6379> CONFIG GET requirepass
(error) NOAUTH Authentication required.
127.0.0.1:6379> AUTH "abc123"
OK
127.0.0.1:6379> CONFIG GET requirepass
1) "requirepass"
2) "abc123"

在redis配置文件中設置密碼,在requirepass後面直接加密碼即可:

requirepass abc123456

在配置文件中指定不能使用的命令:

rename-command FLUSHALL ""
rename-command FLUSHDB ""
rename-command SHUTDOWN ""
rename-command KEYS ""
rename-command MONITOR ""

二.redis性能測試

所謂性能測試就是在大並發下看redis的響應速度。可以通過redis-benchmark

這個redis自帶的測試命令來測試。

# redis-benchmark -n 100000 -q
PING_INLINE: 62111.80 requests per second
PING_BULK: 50100.20 requests per second
SET: 68823.12 requests per second
GET: 69348.12 requests per second
INCR: 69979.01 requests per second
LPUSH: 67842.61 requests per second
RPUSH: 68965.52 requests per second
LPOP: 69589.42 requests per second
RPOP: 66889.63 requests per second
SADD: 65061.81 requests per second
HSET: 52938.06 requests per second
SPOP: 56401.58 requests per second
LPUSH (needed to benchmark LRANGE): 45167.12 requests per second
LRANGE_100 (first 100 elements): 63451.78 requests per second
LRANGE_300 (first 300 elements): 47938.64 requests per second
LRANGE_500 (first 450 elements): 67796.61 requests per second
LRANGE_600 (first 600 elements): 68352.70 requests per second
MSET (10 keys): 63131.31 requests per second
-h指定主機名
-p指定端口
-c指定並發數
-n指定請求數
-q強制退出 redis。僅顯示 query/sec 值
-l生產循環,永久執行測試

三. 持久化機制

redis是一個支持持久化的內存數據庫,也就是redis需要經常將內存中的數據庫同步到硬盤來保證持久化。
redis支持兩種持久化方式:

RDB(snapshotting快照的方式(默認))
AOF(append-only file)的方式

RDB方式:
RDB是默認的持久化方式,這種方式是將內存中的數據以快照的方式寫入二進制文件中(dump.rdb)。
配置方式:

save 900 1 #900秒內如果超過1個key被修改,則發起快照保存
save 300 10 #300秒內如果超過10個key被修改,則發起快照保存
save 60 10000 #60秒內如果超過10000個key被修改,則發起快照保存

aof方式:
快照是按照一定時間間隔或者規則來進行的,但是如果redis意外down掉,就會丟失最後一次快照的修改的數據。aof的方式具有更好的持久化性能。在使用aof時,redis會將每個收到的寫命令都通過write函數追加到文件中,當redis重啟時會通過重新執行文件中保存的寫命令來內存中重建整個數據庫的內容。當然由於os會在內核中緩存write做的修改,所以可能不是立即寫入磁盤上,這樣aof方式的持久化也還是有可能會丟失部分修改。可以通過配置文件告訴redis我們想要通過fsync函數強制os寫入到磁盤的時機。
配置方式:

appendonly yes  # 啟動aof持久化方式
appendfilename "appendonly.aof"  #指定aof文件名稱
# appendfsync always  # 收到寫命令就立即寫入磁盤最慢,但是保證完全的持久化
appendfsync everysec  # 每秒鐘寫入磁盤一次,在性能和持久化方面做了很好的折中處理
# appendfsync no  # 完全依賴os,性能最好持久化沒保證

四. redis事務

redis事務可以一次執行多個命令。
一個事務從開始到執行會經歷以下三個階段:

  • 開始事務(MULTI)

  • 命令入隊

  • 執行事務(EXEC)

    127.0.0.1:6379> MULTI
    OK
    127.0.0.1:6379> SET name "jack"
    QUEUED
    127.0.0.1:6379> GET name
    QUEUED
    127.0.0.1:6379> SADD tag "C++" "python" "java" "c#"
    QUEUED
    127.0.0.1:6379> SMEMBERS tag 
    QUEUED
    127.0.0.1:6379> EXEC
    1) OK
    2) "jack"
    3) (integer) 4
    4) 1) "java"
       2) "C++"
       3) "c#"
       4) "python"
DISCARD取消事務,放棄執行事務內的所有命令
EXEC執行所有事務塊的命令
MULTI標記一個事務塊的開始
UNWATCH取消WACTCH命令對所有key的監控
WATCH key [key ...]監視一個(或多個) key ,如果在事務執行之前這個(或這些) key 被其他命令所改動,那麽事務將被打斷。


redis安全及必備知識