二 Redis基礎型別

2022-07-11 02:15:13 字數 3062 閱讀 9885

redis 資料結構

redis 不是乙個無格式 ( plain ) 的鍵值儲存 而是乙個支援各種不同型別值的資料結構伺服器.傳統鍵值儲存是關聯字串值到字串鍵,但是redis的值不僅僅侷限於簡單的字串,它可以持有跟複雜的資料結構.

redis 支援的所有資料結構:

二進位制安全 ( binary-safe ) 的字串

列表: 按照插入順序排序的字串元素 ( element ) 的集合 ( collection ). 通常是鍊錶

集合: 唯一的,無需的字串元素集合

有序集合: 和集合類似,但是每個字串元素關聯了乙個稱為分數 ( score ) 的浮點數.元素總是按照分數排序,所以可以檢索乙個範圍的元素.

雜湊: 由欄位 ( field ) 及其關聯的值組成的對映.欄位和值都是字串型別.這非常類似於 ruby 或 python中的雜湊 / 雜湊.

位陣列 ( 位圖 ): 使用特殊的命令,把字串當作位陣列來處理: 你可以設定或者清除單個位值,統計全部置位為1的位個數,尋找第乙個復位或者置位的位,等操作.

超重對數 ( hyperloglog ): 這是乙個用於估算集合的基數 ( cardinality, 也稱勢 ) 的概率性資料結構.

以上為redis的所有資料結構. 

redis 鍵 ( keys )

redis 鍵是二進位制安全的.這意味著你可以使用任何二進位製作為鍵,從像 "foo" 這樣的字串到乙個 jpeg 檔案的內容.空字串也是合法的鍵.

一些關於鍵的規則:

不要使用太長的鍵,如:不要使用乙個1024位元組的鍵,不僅是因為記憶體占用,而且在資料集中查詢鍵時需要多次耗時的鍵比較.即使手頭需要匹配乙個很大值的存在性,對其進行雜湊 ( 例如使用 sha1 ) 是個不錯的注意,尤其是從記憶體和貸款的角度考慮.

不要使用太短的鍵.用 "u1000flw" 取代 "user:1000:followers" 作為鍵並沒有什麼實際意義, 後者更具有可讀性,相對於鍵物件本身以及值物件來說, 增加的空間微乎其微. 然而不可否認,短的鍵會消耗少的記憶體,當然我們找到平衡點就好了.

堅持一種模式 ( schema ). 例如: "object-type:id" 就不錯, 就像 "user:1000". 點或者橫線常用來連線多單詞字段,如 "comment:1234:reply.to", 或者 "comment:1234:reply-to".

鍵的最大大小是512mb.

redis 字串 ( strings )

redis 字串是可以關聯給 redis 鍵的最簡單值型別.

由於 redis 的鍵也是字串,但我們使用字串作為值的時候,我們是將乙個字串對映給另乙個字串.字串資料型別適用與很多場景, 例如, 快取 html 片段或者頁面.

儘管字串是 redis 最基本的值型別,你人可以執行很多有趣的操作.

例如:原子性增長

incr 命令將字串值解析為整數,並增加一,最後賦值後作為新值.

當然還有一些類似的命令 incrby decr 和 decrby. 它們以略微不同的方式執行,但其內部機制相同.

incr 命令是原子的.因為即使多個客戶端對同乙個鍵傳送 incr 命令也不會造成競爭條件 ( race condition ).

在乙個命令中一次設定或者檢索多個鍵有利於減少延遲.為此有了 mset 和 mget 命令:

但使用 mget 時, redis 返回一值陣列.

改變和查詢鍵空間 ( key space )

一些命令並不在定義的特定型別上,但是對鍵空間的互動很有用,因此他們能作用在任意鍵上.

exists 和 del

例如, exists 命令 它的返回值為 1 或者 0, 來表示鍵在資料庫中是否存在. del 命令刪除鍵和其關聯的值.

type命令返回某個鍵值的型別

redis 過期 ( expires ): 有限生存時間的鍵

redis過期 是乙個與型別無關的特性. 我可以用它給鍵設定超時,也就是乙個有限的生存時間.但生存時間到了,鍵就會自動被銷毀,就像使用者呼叫 del 命令一樣.

redis過期的資訊:

過期時間可以設定為秒或者毫秒精度.

過期時間解析度總是 1 毫秒

過期資訊被複製和持久化到磁碟, 當 redis 停止時時間仍然在計算 ( 也就是說redis儲存了過期時間 ).

設定過期:

鍵在兩次 get 呼叫期間消失了,因為設定了鍵超時後的第二次呼叫推遲了5秒.

expire 命令可以設定過期 ( 也可以改變乙個鍵的過期時間 )

persisy 命令可以刪除過期時間使鍵永遠存在.

當然我們也可以使用其它 redis 命令來建立帶過期時間的鍵.

例如使用 set 選項:

上面例子中設定10秒過期的鍵,值為字串100.然後使用 ttl 命令檢查鍵的生存剩餘時間.

如果要使用毫秒來設定和檢查過期,可以檢視 pexpire 和 pttl 命令, 以及 set 命令的全部選項.

Redis之基礎型別

如何使用好redis,需要理解redis的單執行緒工作特性,需要學習好redis的底層資料結構,以掌握各種操作命令的時間複雜度,最有效的使用redis。可以說string型別是我們最常用的型別 根據類容內部3種編碼int c語言中long能儲存下的數字 embstr 長度 39位元組的字串 raw ...

Redis之基礎型別

redis一共有五種資料型別 string 字串 hash 雜湊 list 列表 set 集合 zset 有序集合 string 字串型別 是redis的基礎型別,結構為key value,是二進位制安全的,可以儲存任何型別 即,可以儲存,檔案base64轉換或物件序列化之後的字串 最大可以儲存51...

Redis 基礎(二) 之 Redis 安裝

redis server.exe redis.windows.conf如果想方便的話,可以把 redis 的路徑加到系統的環境變數裡,這樣就省得再輸路徑了,後面的那個 redis.windows.conf 可以省略,如果省略,會啟用預設的。輸入之後,會顯示如下介面 這時候另啟乙個 cmd 視窗,原來...