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-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安全及必備知識