2.0.0版本以上時間複雜度:O(1)。平攤時間複雜度爲O(1),假設附加的值很小,而且已經存在的現值是任意大小的,因爲Redis使用的動態字符串庫將使每次從新分配時可用的空閒空間增長一倍。web
若是鍵已經存在而且是一個字符串,這個命令將在字符串的末尾追加值,若是鍵不存在,它將被建立並設置爲空字符串,所以APPEND
將相似於在這個特殊狀況下SET
。redis
響應爲整數:附加操做以後的字符串長度緩存
redis> EXISTS mykey (integer) 0 redis> APPEND mykey "Hello" (integer) 5 redis> APPEND mykey " World" (integer) 11 redis> GET mykey "Hello World" redis>
APPEND
命令可用於建立一個很是緊湊的固定大小樣本列表的表示形式,一般稱爲時間序列。每次新的樣本到達時,咱們均可以使用該命令存儲它:性能
APPEND timeseries "fixed-size sample"
在時間序列中訪問單個元素並不困難:code
這種模式的侷限性是,咱們被迫進入僅附加的操做模式,因爲Redis目前缺乏一個可以修飾字符串對象的命令,因此沒法輕易地將時間序列縮減到給定的大小。然而,以這種方式存儲的時間序列的空間效率是顯著的。對象
提示:能夠根據當前Unix時間切換到另外一個鍵,經過這種方式,每一個鍵可能只有相對少許的樣本,爲了不處理很是大的鍵,並使這個模式更友好地分佈在許多Redis實例中。blog
使用固定大小的字符串溫度傳感器的示例(在實際實現中使用二進制格式更好)索引
redis> APPEND ts "0043" (integer) 4 redis> APPEND ts "0035" (integer) 8 redis> GETRANGE ts 0 3 "0043" redis> GETRANGE ts 4 7 "0035" redis>
2.6.0版本以上
時間複雜度:O(N)
計算字符串中設置的bits數(整體計數)。字符串
默認狀況下,將檢查字符串中包含的全部字節,能夠只在經過附加參數開始和結束的間隔中指定計數操做。get
與GETRANGE命令同樣,開始和結束能夠包含負值,以便從字符串的末尾開始索引字節,-1是最後一個字節,-2是倒數第二個字節,以此類推。
不存在的鍵被視爲空字符串,所以命令將返回0。
響應爲整數:bits數被設置爲1。
例如
redis> SET mykey "foobar" "OK" redis> BITCOUNT mykey (integer) 26 redis> BITCOUNT mykey 0 0 (integer) 4 redis> BITCOUNT mykey 1 1 (integer) 6 redis>
位圖是對某些信息的一種很是節省空間的表示,例如須要用戶訪問歷史記錄的Web應用程序,這能夠肯定哪些用戶是beta特性的良好目標。
使用SETBIT命令完成這個任務很是簡單,天天都用一個小的遞增整數進行標識,例如第0天是應用程序上線的第一天,第1天是次日,以此類推。
每次用戶執行頁面視圖時,應用程序均可以使用SETBIT命令設置與當前日期對應的位,在用戶訪問web站點的當天註冊該頁面。
稍後,只需根據位圖調用BITCOUNT
命令,就能夠知道用戶訪問web站點的天數,這是很簡單的。
使用用戶id而不是天數的相似模式在文章中被描述爲「使用Redis位圖的快速簡單實時度量」
在上面的計很多天示例中,即便10年以後,咱們的應用程序仍然是在線的,每一個用戶只有365*10字節的數據,每一個用戶只有456字節,有了這些數據BITCOUNT
,仍然和其餘O(1) Redis命令(如GET
或INCR
)同樣快。
當位圖較大時,有兩種選擇:
BITCOUNT
start和end可選參數遞增地運行位圖,在客戶端積累結果,並可選地將結果緩存到一個鍵中。