Redis之基礎型別

2021-08-08 16:39:43 字數 2401 閱讀 6776

如何使用好redis,需要理解redis的單執行緒工作特性,需要學習好redis的底層資料結構,以掌握各種操作命令的時間複雜度,最有效的使用redis。

可以說string型別是我們最常用的型別

根據類容內部3種編碼

int     #c語言中long能儲存下的數字

embstr #長度<=39位元組的字串

raw #長度》39位元組的字串

#可以通過如下檢視內部編碼

172.16.0.55:6379> set redis-key values

ok172.16.0.55:6379> object encoding redis-key

"embstr"

(a)儲存單個值
這是最常見場景
(b)分布式鎖
setnx name value #如果key不存在,則執行成功

172.16.0.55:6379> setnx redis-key 1

(integer) 1 #執行成功

172.16.0.55:6379> setnx redis-key 1

(integer) 0 #執行失敗

#借助redis的單執行緒特性,可簡單的實現分布式鎖的需求

(c)計數器
可以使用incr命令來完成計數器功能,由於redis單執行緒的原理完美保證操作的執行緒安全。
(d)批量操作
mset,mget

#批量操作有效減少客戶端網路io時間,有效提高程式的處理效率

#但是批量操作也需要根據資料的大小,考慮網路傳輸壓力以及對其他命令的響應時間影響,不能不限大長度的批量操作。如果資料特別多,需要考慮分批次進行。

(a) set命令會把原來key設定的過期時間去掉,如果原來有過期時間的話
172.16.0.55:6379> set redis-key value ex 100000

ok172.16.0.55:6379> ttl redis-key

(integer) 99993

172.16.0.55:6379> set redis-key values

ok172.16.0.55:6379> ttl redis-key

(integer) -1

常用於儲存有關聯的健值對

根據類容內部2種編碼

ziplist(壓縮列表)

hashtable(雜湊表)

#以下兩個條件滿足時使用ziplist,否則使用hashtable儲存

#hash中元素個數小於hash-max-ziplist-entires(預設512個)

#hash中每個元素的值小於hash-max-ziplist-value(預設64位元組)

**這麼設計主要是為了權衡儲存空間和訪問速度**

(a)記錄滿足某種狀態的使用者id
hset key field1 value1 #可以向同乙個hash中新增使用者,o(1)

hexists key field1 #判斷某個使用者是否存在,o(1)

hdel key field1 #刪除乙個使用者,o(1)

hlen key #查詢滿足使用者的數量,o(1)

(a)o(n)命令慎用
對於時間複雜度o(n)的命令需要慎用,尤其是hgetall,hkeys,hvals這種需要返回大量資料的命令,不僅需要考慮命令的時間複雜度,還需要考慮大量資料返回對於網路的壓力。
可以方便的進行列表資料的操作

根據類容內部2種編碼

ziplist(壓縮列表)

linkedlist(鍊錶)

#以下兩個條件滿足時使用ziplist,否則使用linkedlist儲存

#hash中元素個數小於list-max-ziplist-entires(預設512個)

#hash中每個元素的值小於list-max-ziplist-value(預設64位元組)

(a)訊息佇列
#我們程式中經常會有非同步訊息佇列的場景,redis可以很好的滿足我們的需求

lpush key value #向佇列新增乙個訊息,o(1)

rpop key #移除並返回列表 key 的尾元素,o(1)

(a)佇列 or 棧
#由於list是雙向的根據redis提供的命令我們可以按業務需求來進行佇列和堆疊的使用

#佇列:lpush+rpop(rpush+lpop同樣效果)

#棧:lpush+lpop(rpush+rpop同樣效果)

(b)阻塞 or 非阻塞
#redis出佇列提供了阻塞和非阻塞版本,可以根據我們業務需要進行區分使用

#非阻塞:lpop,rpop

#阻塞:blpop,brpop

Redis之基礎型別

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

redis基礎之資料型別 雜湊型別

redis是採用字典結構以鍵值對的形式儲存資料的,而雜湊型別 hash 的鍵值也是一種字典結構,其儲存了字段和字段值的對映,但字段值只能是字串,不支援其他資料型別,也就是說,雜湊型別不能巢狀其他的資料型別。乙個雜湊型別鍵可以包含至多2 32 1個字段。除了雜湊型別,redis的其他資料型別同樣不支援...

redis基礎之資料型別 列表型別

列表型別 list 可以儲存乙個有序的字串列表,常用的操作室向列表兩端新增元素,或者獲得列表的某乙個片段。列表型別內部是使用雙向鍊錶 double linked list 實現的,所有向列表兩端新增元素時間複雜度為o 1 獲取越接近兩端的元素速度就越快。這意味著即使是乙個有幾千萬個元素的列表,獲取頭...