Redis初步了解
阿新 • • 發佈:2018-03-22
Redis基本了解 Redis配置介紹 Redis持久性理解 一、Redis
1、介紹
- REmote DIctionary Server:數據結構服務器,k/v,數據結構;
- Redis 是一個開源(BSD許可)的,內存存儲、數據結構存儲系統,它可以用作數據庫、緩存和消息中間件(消息隊列)。
- 它支持的數據結構:字符串、列表(數組)、hashes(關聯數組)、集合、有序集合、bitmaps、hyperloglogs、空間索引;
- 內建的復制功能、Lua scripting(著名的腳本編程語言,容易內嵌入其他語言)、LRU、事務、持久存儲、高可用(Sentinel,Redis Cluster)
2、redis程序
- 最新版程序,可以選擇官網下載,編譯安裝。
- 也可以使用yum epel倉庫,
yum install redis
- 配置文件:/etc/redis.conf
- 服務端-主程序:/usr/bin/redis-server 默認端口 TCP:6379
- 客戶端:/usr/bin/redis-cli
- Unit File:/usr/lib/systemd/system/redis.service
- 數據目錄:/var/lib/redis
- Redis性能測試工具:redis-benchmark
- AOF文件修復工具:redis-check-aof
- RDB文件檢查工具:redis-check-rdb
- Sentinel服務器:redis-sentinel
3、配置
- Redis.conf 配置文件分為:通用基本配置項、網絡配置項、持久化相關配置、復制相關的配置、安全相關配置、Limit相關的配置、SlowLog相關的配置、INCLUDES、Advanced配置
-
通用配置
- daemonize yes 啟用後臺守護進程運行模式
- pidfile /PATH/redis.pid redis啟動後的進程ID保存文件
- loglevel notice 指定記錄服務器信息等級
- logfile “” 指定日誌文件,默認是使用系統的標準輸出
- databases 16 設置數據庫的數量,默認啟動時使用0 號數據庫
-
網絡配置
- port 指定使用端口號,默認6379
- bind 0.0.0.0 監聽指定IP地址 默認本地回環地址
- timeout N 客戶端空閑N秒後斷開連接,參數0表示不啟用
- tcp-backlog 511 後援隊列,達到最大並發連接數後,服務器還要留住多少訪問請求
- protected-mode yes 保護模式,默認啟用。指定了bind,就可以關閉保護模式。如果關閉bind,就必須啟用保護模式,不然沒法登陸redis。
- tcp-keepalive 300 tcp保持連接300秒
-
安全配置
- requirepass PASSWORD
- rename-command <COMMAND> <NEW_CMND_NAME> 命令重命名,在AOF或Replication環境中,不推薦使用;
-
Limits
- maxmemory <bytes> 設置給redis使用的最大內存,單位為字節
- maxmemory-policy noeviction 選擇淘汰策略
- 如果內存使用量耗盡,淘汰策略:
volatile-lru # 對設置了過期時間的keys,使用 LRU最近最少使用算法去淘汰。 allkeys-lru # 所有keys,使用LRU最近最少使用算法去淘汰。 volatile-random # 對設置了過期時間的keys,隨機淘汰。 allkeys-random # 所有keys中,退機淘汰 volatile-ttl # 對過期時間中剩余時間多少,淘汰快到期的。 noeviction # 默認策略,不淘汰,如果內存已滿,添加數據是報錯。
- maxmemory-samples 5 淘汰算法運行時的采樣樣本數
-
SlowLog相關配置
- slowlog-log-slower-than 10000 單位微秒=0.01秒
- sowlog-max-len 128 最終只保存128條日誌;
- ADVANCED配置
- hash-max-ziplist-entries 512 哈希編碼最大鍵值對 512個鍵值對
- hash-max-ziplist-value 64 這些鍵值對裏的值,最大長度64字節。
- client-output-buffer-limit <class><hard limit><soft limit><soft seconds>
- class:客戶端種類,normal本機客戶端,slave從節點客戶端,pubsub消息隊列客戶端。
- hard limit 硬限制,最大多少空間。
- soft limit 軟限制,可以在短時間內超過。
- soft seconds 超出軟限制時,超出的那部分可使用時長。
client-output-buffer-limit normal 0 0 0 client-output-buffer-limit slave 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60
二、Redis命令
1、分組命令
-
@strings 只處理值為字符串的命令組
- SET:設置一個key的value值
- GET:返回key的value值,key不存在則返回nil(空);
- EXISTS:查詢key是否存在;返回1 key存在,0 key不存在
- INCR:對key中的數值執行加1操作。
- DECR:返回一個數字,減少之後的value值
- SETNX:當key不存在是,設置一個鍵的值,當key存在時,則不做動作。
- SETEX:設置 key 對應的 value 的過期時間
- INCRBYFLOAT:指定key為浮點數值,並增長浮點數值
- MGET:獲取多個key的值
- MSET:設置多個key的值
-
@lists 處理列表的命令組
- LPUSH:從列表左邊開始插入元素
- RPUSH:從列表右邊開始插入元素
- LPOP:從左邊彈出元素
- RPOP:從右邊彈出元素
- LPUSHX:判斷列表是否存在,存在則從左邊插入元素
- RPUSHX:判斷列表是否存在,存在則從右邊插入元素
- LRANGE:返回指定下標的key的值
- LINDEX:返回數組列表中,指定的下標的元素值。0為第一個元素
- LSET:設置列表裏一個元素的值
- Server相關命令
- CLIENT GETNAME:獲取客戶端連接的名字
- CLIENT SETNAME:設置客戶端連接的名字
- CLIENT LIST:列出所有客戶端連接
- CLIENT KILL:關閉指定連接,根據這些條件關閉;[ip:port] [ID client-id] [TYPE normal|master|slave|pubsub] [ADDR ip:port] [SKIPME yes/no]
- CLIENT PAUSE:暫停某個客戶端連接,也可以設著暫停時間
- SHUTDOWN NOSAVE強制關閉,類似直接關電源;SAVE內存數據同步到磁盤上,安全關閉
- INFO:服務器狀態信息查看;分為多個secion;
- 在程序中修改參數
- CONFIG GET 查看指定配置項的參數
- CONFIG RESETSTAT INFO中的計數器全部重置,重新開始計數
- CONFIG REWRITE 重寫配置文件,保存在配置文件中
- CONFIG SET 修改配置項參數;重啟redis,不保存
更多命令組,命令介紹可到官網查詢Redis官網
2、redis-cli命令
- Usage: redis-cli [OPTIONS] [cmd [arg [arg ...]]]
-h HOST, 127.0.0.1
-p PORT, 6379/tcp
-a PASSWORD
-n DBID 0-15 - 與Connection相關命令:
help @connection
AUTH <password>
ECHO <message>
PING
QUIT
SELECT dbid - 清空數據庫:
FLUSHDB:Remove all keys from the current database 清空當前數據庫;
FLUSHALL:Remove all keys from all databases 清空所有數據庫;
三、Redis持久化
-
RDB
- snapshotting, 二進制格式;按事先定制的策略,周期性地將數據從內存同步至磁盤;數據文件默認為dump.rdb;
- 客戶端顯式使用SAVE或BGSAVE命令來手動啟動快照保存機制;
- SAVE:同步,即在主線程中保存快照,此時會阻塞所有客戶端請求;
- BGSAVE:異步;backgroud
- RDB相關的snapshotting配置:
*save <seconds> <changes>
save 900 1
save 300 10
save 60 10000
save 5 200000 - 表示:三個策略滿足其中任意一個均會觸發SNAPSHOTTING操作;
- 900s內至少有一個key有變化
- 300s內至少有10個key有變化
- 60s內至少有1W個key發生變化
- 5s內至少變化20W個key發生變化
- stop-writes-on-bgsave-error yes
- dump快照操作出現錯誤時,是否禁止新的寫入操作請求;
- rdbcompression yes 是否對快照進行壓縮,只要服務器有閑余性能,就可以壓縮,節省磁盤空間
- rdbchecksum yes 壓縮完是否校驗,檢查文件是否完整;占用CPU
- dbfilename dump.rdb:指定rdb文件名
- *dir /var/lib/redis:rdb文件的存儲路徑
-
AOF:Append Only File, fsync
- 記錄每次寫操作至指定的文件尾部實現的持久化;當redis重啟時,可通過重新執行文件中的命令在內存中重建出數據庫;
- BGREWRITEAOF:AOF文件重寫;
- 不會讀取正在使用AOF文件,而是通過將內存中的數據以命令的方式保存至臨時文件中,完成之後替換原來的AOF文件;
-
AOF相關的配置
- *appendonly no:默認不啟用AOF的
- appendfilename "appendonly.aof" :文件名
- *appendfsync:追加同步的三種模式
- no:redis不執行主動同步操作,而是OS進行;
- everysec:每秒一次;
- always:每語句一次;
- no-appendfsync-on-rewrite no
- 是否在後臺執行aof重寫期間不調用fsync,默認為no,表示調用;
- auto-aof-rewrite-percentage 100:變化的內容所占空間的增長量超過100%
- auto-aof-rewrite-min-size 64mb 增長量不能超過64mb
- 上述兩個條件同時滿足時,方會觸發重寫AOF;與上次aof文件大小相比,其增長量超過100%,且大小不少於64MB;
- aof-load-truncated yes:修剪文件,Redis啟動加載aof文件,如果發現末尾命令不完整則自動截掉,成功加載前面正確的數據。如果設置為no,遇到此類情況,Redis啟動失敗,用redis-check-aof 工具手工修復。
- 註意:持久機制本身不能取代備份;應該制訂備份策略,對redis庫定期備份;
- RDB與AOF同時啟用:
(1) BGSAVE和BGREWRITEAOF不會同時進行;
(2) Redis服務器啟動時用持久化的數據文件恢復數據,會優先使用AOF;
Redis初步了解