1. 程式人生 > >Redis初步了解

Redis初步了解

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初步了解