Redis 講解系列之 Redis的五大數據類型和配置文件解讀

string(字符串)

Redis String Concept

  • string是redis最基本的類型,你可以理解成與Memcached一模一樣的類型,一個key對應一個value。
  • string類型是二進制安全的。意思是redis的string可以包含任何數據。比如jpg圖片或者序列化的對象 。
  • string類型是Redis最基本的數據類型,一個redis中字符串value最多可以是512M

  • Redis 講解系列之 Redis的五大數據類型和配置文件解讀

    Redis String Single Value

    • set/get/del/append/strlen str
    • Incr/decr/incrby/decrby str,一定要是數字才能進行加減

    Redis String Examples

    • getrange/setrange str
    • getrange:獲取指定區間範圍內的值,類似between……and的關係
    • 從零到負一表示全部
    • setrange設置指定區間範圍內的值,格式是setrange key值 具體值

    setex(set with expire)鍵秒值/setnx(set if not exist)

    • setex:設置帶過期時間的key,動態設置。
    • setex 鍵 秒值 真實值
    • setnx:只有在 key 不存在時設置 key 的值。

    mset/mget/msetnx

    • mset:同時設置一個或多個 key-value 對。
    • mget:獲取所有(一個或多個)給定 key 的值。
    • msetnx:同時設置一個或多個 key-value 對,當且僅當所有給定 key 都不存在。

    getset(先get再set)

    getset:將給定 key 的值設為 value ,並返回 key 的舊值(old value)。

    hash(哈希,類似java裡的Map)

    Redis Hash Concept

    • Redis hash 是一個鍵值對集合。
    • Redis hash是一個string類型的field和value的映射表,hash特別適合用於存儲對象。
    • 類似Java裡面的Map

    Redis Hash Single Value

    KV模式不變,但V是一個鍵值對

    Redis Hash Examlple

    • hset/hget/hmset/hmget/hgetall/hdel
    • hlen
    • hexists key 在key裡面的某個值的key
    • hkeys/hvals
    • hincrby/hincrbyfloat
    • hsetnx(不存在賦值,存在了無效。)

    list(列表)

    Redis list Concept

    Redis 列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素導列表的頭部(左邊)或者尾部(右邊)。它的底層實際是個鏈表。

    Redis list Single Value

    單值多value

    Redis list Examples

    lpush/rpush/lrange

    lpop/rpop

    lindex,按照索引下標獲得元素(從上到下)

    通過索引獲取列表中的元素 lindex key index

    llen

    lrem key 刪N個value

    從left往right刪除2個值等於v1的元素,返回的值為實際刪除的數量

    LREM list3 0 值,表示刪除全部給定的值。零個就是全部值

    ltrim key 開始index 結束index,截取指定範圍的值後再賦值給key

    ltrim:截取指定索引區間的元素,格式是ltrim list的key 起始索引 結束索引

    rpoplpush 源列表 目的列表

    移除列表的最後一個元素,並將該元素添加到另一個列表並返回

    lset key index value

    linsert key before/after 值1 值2

    在list某個已有值的前後再添加具體值

    性能總結

    • 它是一個字符串鏈表,left、right都可以插入添加;
    • 如果鍵不存在,創建新的鏈表;
    • 如果鍵已存在,新增內容;
    • 如果值全移除,對應的鍵也就消失了。
    • 鏈表的操作無論是頭和尾效率都極高,但假如是對中間元素進行操作,效率就很慘淡了。

    set(集合)

    Redis set Concept

    Redis的Set是string類型的無序集合。它是通過HashTable實現實現的,

    Redis set Single Value

    單值多value

    Redis set Examples

    sadd/smembers/sismember

    scard,獲取集合裡面的元素個數

    獲取集合裡面的元素個數

    srem key value 刪除集合中元素

    srandmember key 某個整數(隨機出幾個數)

    從set集合裡面隨機取出2個

    如果超過最大數量就全部取出

    如果寫的值是負數,比如-3 ,表示需要取出3個,但是可能會有重複值。

    spop key 隨機出棧

    smove key1 key2 在key1裡某個值 作用是將key1裡的某個值賦給key2

    數學集合類

    • 差集:sdiff
    • 交集:sinter
    • 並集:sunion

    zset(sorted set:有序集合)

    Redis Zset Concept

    Redis zset 和 set 一樣也是string類型元素的集合,且不允許重複的成員。

    不同的是每個元素都會關聯一個double類型的分數。

    redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重複。

    Redis Zset Single Value

    在set基礎上,加一個score值。之前set是k1 v1 v2 v3,現在zset是k1 score1 v1 score2 v2

    Redis Zset Examples

    zadd/zrange(withscores)

    zrangebyscore key 開始score 結束score

    zrem key 某score下對應的value值,作用是刪除元素

    刪除元素,格式是zrem zset的key 項的值,項的值可以是多個

    zrem key score某個對應值,可以是多個值

    zcard/zcount key score區間/zrank key values值,作用是獲得下標值/zscore key 對應值,獲得分數

    zcard :獲取集合中元素個數

    zcount :獲取分數區間內元素個數,zcount key 開始分數區間 結束分數區間

    zrank: 獲取value在zset中的下標位置

    zscore:按照值獲得對應的分數

    zrevrank key values值,作用是逆序獲得下標值

    • zrevrange

    zrevrangebyscore key 結束score 開始score

    zrevrangebyscore zset1 90 60 withscores 分數是反著來的



    Redis配置文件解讀

    基於對技術學習的技巧和一些經驗累計個人覺得要想快速深入地瞭解一個Dev Tool 首先要去閱讀她的官方文檔,其次詳閱她的配置文件,這樣我們就能從她的Designer(設計師)的角度去總結她的設計架構、使用場景和使命以及她的一些優缺點

    • 它在哪

    一般在Redis 包下的 *.conf,在使用Redis時我們直接運行她即可。(Designer的思路),由於 .conf文件註釋較多,這裡就不貼出來了,有興趣去看源生 *.conf

    • 配置文件解讀
    • units單位

    配置大小單位,開頭定義了一些基本的度量單位,只支持bytes,不支持bit

    對大小寫不敏感

    • INCLUDES包含

    和我們的Struts2配置文件類似,可以通過includes包含,redis.conf可以作為總閘,包含其他

    同時我們可以使用其他路徑的redis.conf來啟動Redis 服務。

    include .\\path\\to\\local.conf (使用自身redis.conf啟動)

    include c:\\path\\to\\other.conf(使用其他redis.conf來啟動)

    • GENERAL通用

    daemonize

    daemonize是用來指定redis是否要用守護線程的方式啟動。默認是NO。官方文檔給出解釋標明redis.conf的daemonize在Windows OS Env. 下是不支持的。

    yes:redis採用的是單進程多線程的模式。當redis.conf中選項daemonize設置成yes時,代表開啟守護進程模式。在該模式下,redis會在後臺運行,並將進程pid號寫入至redis.conf選項pidfile設置的文件中,此時redis將一直運行,除非手動kill該進程。

    no: 當daemonize選項設置成no時,當前界面將進入redis的命令行界面,exit強制退出或者關閉連接工具(putty,xshell等)都會導致redis進程退出。

    pidfile

    配置pid文件路徑。當redis以守護模式啟動時,如果沒有配置pidfile,pidfile默認值是/var/run/redis.pid。官方文檔給出解釋標明redis.conf的pidfile在Windows OS Env. 下是不支持的。

    port

    默認端口為6379

    tcp-backlog

    設置tcp的backlog,backlog其實是一個連接隊列,backlog隊列總和=未完成三次握手隊列 + 已經完成三次握手隊列。在高併發環境下你需要一個高backlog值來避免慢客戶端連接問題。注意Linux內核會將這個值減小到/proc/sys/net/core/somaxconn的值,所以需要確認增大somaxconn和tcp_max_syn_backlog兩個值。來達到想要的效果。

    bind

    綁定的主機地址,不啟用是默認綁定本機,若啟用需指定主機IP,同時也支持綁定多個主機IP,當綁定多的主機IP時,Redis 選擇宿主時將按照從上至下的順序優先綁定。

    tcp-keepalive

    指定TCP連接是否為長連接,”偵探”信號由server端維護,長連接將會額外的增加server端的開支

    默認為0.表示禁用,非0值表示開啟”長連接” ;”偵探”信號的發送間隔將有linux系統決定

    在多次”偵探”後,如果對等端仍不回覆,將會關閉連接,否則連接將會被保持開啟.

    client端socket也可以通過配置keepalive選項,開啟”長連接”.

    loglevel

    Redis的log Level將按照一下順序逐級升高。

    debug:Pro Env. and Uat Env.都會打印Log. Debug Level 優先級最低因而Log Infomation將會很多,應用場景:Dev.

    verbose:較少使用,優先級高於Debug,Log Info. 少於 Debug。

    notice:適度的Log Info.常用於Pro Env.

    warning:只打印一些重要或者敏感的Log Info.

    logfile

    指定Redis日誌記錄方式,默認值為stdout。當然你也可以將Log Info.輸出到指定的文件中。

    timeout

    Redis設置在N 秒內Redis server為響應時將自動關閉Redis 的Connention。

    syslog-enabled

    是否把日誌輸出到syslog中

    syslog-ident

    指定syslog裡的日誌標誌

    syslog-facility

    指定syslog設備,值可以是USER或LOCAL0-LOCAL7

    databases

    Redis 的default database 為16個。默認使用Database0。

    SNAPSHOTTING快照

    Save

    Redis 持久化數據的方式之一,當運行save/bgsave時將觸發RDB將內存中的數據保存至磁盤中。

    一下為Save的幾種方式。選用觸發機制有助於提高Redis的效率,但通常而言我們不會至單獨使用Save(此處可以理解為RDB)的方式來做數據持久化的處理。

    save 900 1

    900s 內 寫了一次立即執行數據持久化

    save 300 10

    300s 內寫了10次 立即執行數據持久化

    save 60 10000

    60s 內寫了10000次 立即執行數據持久化

    stop-writes-on-bgsave-error

    rdbcompression

    在Redis使用RDB做數據持久化處理時,Redis會將內存中的數據按照一定的規則或者算法進行壓縮。

    yes:默認啟用。至於是什麼算法請去官方查閱。有利於節省磁盤空間。建議

    no:不啟用。不利於節省磁盤空間。不建議

    rdbchecksum

    在Redis進行RDB數據持久化處理並對數據壓縮形成 .rdb文件時,Redis將會再一次對 .rdb進行CRC64校驗。這樣有助於形成正確的數據。

    yes:默認啟用。建議

    no :不啟用。不建議

    dbfilename

    指定rdb文件的名稱,默認為dump.rdb

    dir

    指定本地數據庫存放目錄

    REPLICATION複製

    Redis提供的主從複製機制。雖然做為一個使用場景為數據緩存處理的Nosql,redis在數據同步上設計的也是嚴格按照現有的例如Orcale,Mysql等一些主流的RDBMS那樣有主從複製讀寫分離的高效設定。關於Redis的主從複製,讀寫分離我們將在後面的章節中詳細講解,這裡暫時先把這個核心的功能點拋出來。

    • slaveof:slaveof 192.168.100.15 6379 此命令標識先啟用的Redis server將作為主機192.168.100.15 的一個附從DB,連接端口為6379。slave將共享Master的所有數據,一般都會將Slave Level的Redis DB 賦值只讀權限。
    • masterauth:

    當A Redis server slaveof B 的Redis server時,如果B的Server 有權限認證(直白的理解為設置了密碼)時,A需要進行權限認證以獲得B的連接權限。

    slave-serve-stale-data:當Redis的主從關係產生之後,當S意外與M disconnected時(此時我們只考慮M alive,S outline時的情形。關於更多的情況我們將在後面的章節詳細講解)。

    yes:A redis仍會繼續響應客戶端的讀寫請求。此時的A 將會接觸與B的主從關係,晉升為自己的M,也就是還原A的身份,此時A將作為一個獨立的Server處理請求並保留斷開連接前B的所有數據(待驗)。

    No:redis會對客戶端的請求返回“SYNC with master in progress”,。當然也有例外,當客戶端發來INFO請求和SLAVEOF請求,從redis還是會進行處理。

    • slave-read-only

    設置附從Redis的只讀屬性,

    yes:附從Redis只有讀的權限。建議。

    no:附從Redis沒有讀的權限。此時的設置無意義提現。不建議。

    repl-diskless-sync

    主從同步支持兩種策略,即disk和socket方式(socket方式尚不完善,還處於實驗階段)。

    新的slave端和重連的salve端不允許去繼續同步進程,這被稱之為“完全同步”。

    一個RDB文件從master端傳到slave端分為兩種情況:

    repl-diskless-sync no:支持disk,master端將RDB file寫到disk,稍後再傳送到slave端

    repl-diskless-sync yes:無磁盤diskless:master端直接將RDB file傳到slave socket,不需要與disk進行交互。當磁盤讀寫慢網速較好時建議此類配置。

    repl-diskless-sync-delay

    repl-diskless-sync-delay 主從複製延時為5s。

    repl-ping-slave-period

    附從Redis將定時端的向Master發送 online 握手。repl-ping-slave-period 10 表示附從Redis每隔10s就發送一次online 握手。若N 秒後無法收到任何來自Mater的信息則S將視為與M斷開連接(有可能M宕掉了,也有可能網絡原因)。

    repl-timeout

    repl-timeout 60 表示S向M發送online 握手且60s內無法獲得任何M的信息反饋,S將自動的斷開與M的連接並解除S-M關係。

    repl-disable-tcp-nodelay

    在主從數據同步時使用的Socket方式,repl-disable-tcp-nodelay 則表示是否容忍tcp數據傳輸延時。一般設置為no也就是此種情況下我們能容忍tcp delay。

    repl-disable-tcp-nodelay no:容忍

    repl-disable-tcp-nodelay yes:不容忍。有可能會導致數據同步失敗。

    slave-priority

    附從Redis的預設優先級。要理解Redis 的slave-priority,我們需要預設一個場景。假如一個Master A現已連接多個S(B,C,D…..),意外地A outline 此時所有S都將無所屬的M,那麼這些S該怎麼辦?Redis針對這樣的從場景做出了一個非常人性的處理方式。在所有的S的*.conf中預設一個priority值當M outline時,所有的S將重新”投票”並”選出”它們其中的一個作為M,然後維持整個S-M Relication以持續服務。上述所說的那個“投票”的票數就是 slave-priority 的值。現假設B的priority 為 10,C的priority 為25,D的priority 為8,那麼通過”選舉”D將成為新的M。這就是Redis 在S-M Replication中設計地非常人性化的”哨兵模式”。

    slave-priority設定的值必須為Number型,並且數值越小優先級越高。

    ……

    SECURITY安全

    Redis require pass

    在使用Redis 的Client時出於對數據安全的考慮我們應該做權限限制,即需要Auth. password

    requirepass redis

    將Redis的 Client Auth.設置為redis,即每一次我們訪問數據時都需要認證我們的redis(password)身份。

    LIMITS限制

    maxclients

    設置redis同時可以與多少個客戶端進行連接。默認情況下為10000個客戶端。當你

    無法設置進程文件句柄限制時,redis會設置為當前的文件句柄限制值減去32,因為redis會為自

    身內部處理邏輯留一些句柄出來。如果達到了此限制,redis則會拒絕新的連接請求,並且向這

    些連接請求方發出“max number of clients reached”以作回應。

    maxmemory 2147483648

    將Redis能使用的最大內存為2147483648 bite,一般建議將maxmemory 設置為主機內存的3/4即可。

    maxmemory-policy

    volatile-lru:使用LRU算法移除key,只對設置了過期時間的鍵

    allkeys-lru:使用LRU算法移除key

    volatile-random:在過期集合中移除隨機的key,只對設置了過期時間的鍵

    allkeys-random:移除隨機的key

    volatile-ttl:移除那些TTL值最小的key,即那些最近要過期的key

    noeviction:不進行移除。針對寫操作,只是返回錯誤信息

    maxmemory-samples

    設置樣本數量,LRU算法和最小TTL算法都並非是精確的算法,而是估算值,所以你可以設置樣本的大小,redis默認會檢查這麼多個key並選擇其中LRU的那個。

    APPEND ONLY MODE追加

    AOF作為Redis最為核心的功能之一,是一個數據持久化的機制和實現,即如何將內存中的數據寫進磁盤中,重啟Redis之後數據備份與重置的實現。

    appendonly

    yes:啟用AOF

    no:不啟用AOF

    appendfilename

    appendfilename “appendonly.aof” 表示將AOF後的文件命名為appendonly.aof 此處你還可以自定義文件名。

    appendfsync

    always

    同步持久化 每次發生數據變更會被立即記錄到磁盤 性能較差但數據完整性比較好

    everysec

    出廠默認推薦,異步操作,每秒記錄 如果一秒內宕機,有數據丟失

    no

    從不同步

    no-appendfsync-on-rewrite

    重寫時是否可以運用Appendfsync,用默認no即可,保證數據安全性。當主進程在進行向磁盤的寫操作時,將會阻止其它的fsync調用。

    auto-aof-rewrite-percentage

    設置重寫的基準值

    auto-aof-rewrite-min-size 64MB

    aof文件觸發自動rewrite的最小文件size(64MB)即當 *.ao文件大小超過64MB時觸發aof重寫機制。

    auto-aof-rewrite-percentage 100

    aof文件觸發自動rewrite的百分比,值為0則表示禁用自動rewrite。

    aof-load-truncated

    aof-load-truncated yes:允許加載不完整的aof文件來進行啟動

    LUA SCRIPTING LUA腳本

    lua-time-limit 5000

    設置lua腳本的最大運行時間,單位為毫秒

    SLOW LOG慢日誌

    redis的slow log是一個系統OS進行的記錄查詢,它是超過了指定的執行時間的。執行時間不包括類似與client進行交互或發送回覆等I/O操作,它只是實際執行指令的時間。

    slowlog-log-slower-than 10000

    告訴redis執行時間,這個時間是微秒級的(1秒=1000000微秒),這是為了不遺漏命令。

    slowlog-max-len 128

    設置slowlog的長度,當一個新的命令被記錄時,最舊的命令將會從命令記錄隊列中移除。

    LATENCY MONITOR潛在管理器

    latency-monitor-threshold 0 延遲監控,用於記錄等於或超過了指定時間的操作,默認是關閉狀態,即值為0。

    Event notification事件通知

    notify-keyspace-events “” 事件通知,默認不啟用,具體參數查看配置文件

    ADVANCED CONFIG高級配置

    Hash Setting

    當條目數量較少且最大不會超過給定閥值時,哈希編碼將使用一個很高效的內存數據結構,閥值由以下參數來進行配置。

    hash-max-ziplist-entries 512

    hash-max-ziplist-value 64

    List Setting

    與哈希類似,少量的lists也會通過一個指定的方式去編碼從而節省更多的空間,它的閥值通過以下參數來進行配置。

    list-max-ziplist-entries 512

    list-max-ziplist-value 64

    Set Setting

    集合sets在一種特殊的情況時有指定的編碼方式,這種情況是集合由一組10進制的64位有符號整數範圍內的數字組成的情況。以下選項可以設置集合使用這種特殊編碼方式的size限制。

    set-max-intset-entries 512

    Zset Setitng

    與哈希和列表類似,有序集合也會使用一種特殊的編碼方式來節省空間,這種特殊的編碼方式只用於這個有序集合的長度和元素均低於以下參數設置的值時。

    zset-max-ziplist-entries 128

    zset-max-ziplist-value 64

    hll-sparse-max-bytes 3000

    設置HyeperLogLog的字節數限制,這個值通常在0~15000之間,默認為3000,基本不超過16000

    activerehashing yes

    redis將會在每秒中抽出10毫秒來對主字典進行重新散列化處理,這有助於儘可能的釋放內存。因為某些原因,client不能足夠快的從server讀取數據,那client的輸出緩存限制可能會使client失連,這個限制可用於3種不同的client種類,分別是:normal、slave和pubsub。

    aof-rewrite-incremental-fsync yes

    當一個子進程要改寫AOF文件,如果以下選項啟用,那文件將會在每產生32MB數據時進行同步,這樣提交增量文件到磁盤時可以避免出現比較大的延遲。

    REDIS CLUSTER Redis集群

    以後補充。

    常見配置redis.conf介紹

    參數說明

    redis.conf 配置項說明如下:

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

    daemonize no

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

    pidfile /var/run/redis.pid

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

    port 6379

    4. 綁定的主機地址

    bind 127.0.0.1

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

    timeout 300

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

    loglevel verbose

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

    logfile stdout

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

    databases 16

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

    save <seconds> <changes>/<seconds>

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

    save 900 1

    save 300 10

    save 60 10000

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

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

    rdbcompression yes

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

    dbfilename dump.rdb

    12. 指定本地數據庫存放目錄

    dir ./

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

    slaveof <masterip> <masterport>/<masterip>

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

    masterauth <master-password>

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

    requirepass foobared

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

    maxclients 128

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

    maxmemory <bytes>

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

    appendonly no

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

    appendfilename appendonly.aof

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

    no:表示等操作系統進行數據緩存同步到磁盤(快)

    always:表示每次更新操作後手動調用fsync()將數據寫到磁盤(慢,安全)

    everysec:表示每秒同步一次(折衷,默認值)

    appendfsync everysec

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

    vm-enabled no

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

    vm-swap-file /tmp/redis.swap

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

    vm-max-memory 0

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

    vm-page-size 32

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

    vm-pages 134217728

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

    vm-max-threads 4

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

    glueoutputbuf yes

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

    hash-max-zipmap-entries 64

    hash-max-zipmap-value 512

    29. 指定是否激活重置哈希,默認為開啟(後面在介紹Redis的哈希算法時具體介紹)

    activerehashing yes

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

    include /path/to/local.conf



    分享到:


    相關文章: