Redis小祕密

濤姐濤哥發表於2022-02-20

Redis小祕密

 

      臨淵羨魚,不如退而織網。

 

一、Redis基本資料型別

想必很多人都能脫口而出String、List、Hash、Sorted Set和Set五種基本資料型別。

以及五大基本資料型別簡要區別:

  • redis儲存的是:key、value格式的資料,其中key都是字串,value有5種不同的資料結構。
  • value的資料結構:
  1. 字串型別 string;
  2.  雜湊型別 hash : map格式;
  3. 列表型別 list : linkedlist格式,支援重複元素;
  4.  集合型別 set : 不允許重複元素;
  5.  有序集合型別 sortedset:不允許重複元素,且元素有順序。

還有五種基本資料型別底層對應的資料結構:

還有五種基本資料型別對應的使用場景:

String

  • 計數器
  • 分散式鎖
  • 儲存物件

List

  • 訊息佇列
  • 排行榜
  • 最新訊息

Set

  • 好友/關注/粉絲/感興趣的人集合
  • 隨機展示
  • 黑/白名單

Hash

  • 購物車
  • 儲存物件

ZSET

  • 銷量排名、積分排名、成績排名、各種排行榜
  • 延遲佇列
  • 限流

二、但是Redis還有其他的三種特殊資料型別呢?

還能脫口而出geospatial、hyperloglog和bitmap嗎。

1、地理位置-Geospatial

1 # getadd 新增地理位置
2 #規則:兩級無法直接新增,我們一般會下載城市資料,直接通過java程式一 次性匯入!
3 #有效的經度從-180度到180度。
4 #有效的緯度從-85. 05112878度到85.05112878度。
5 #當座標位置超出上述指定範圍時,該命令將會返回一個錯誤。 
6 GEOADD china:cipty  31.405 12.4894 shanghai # 新增地理位置
7 geodist china:cipty shenzhen shanghai km # 獲取兩個地理之間的距離,單位是km
8 geohash china:cipty shenzhen shanghai # 將二維的經緯度轉換為-維的字串,如果兩個字串越接近,那麼則距離越近!
9 geopos china:cipty shenzhen #獲取指定的城市的經度和緯度!

2、基數統計-Hyperloglog

說明:

  • 基數不大,資料量不大就用不上,會有點大材小用浪費空間;
  • 有侷限性,就是隻能統計基數數量,而沒辦法去知道具體的內容是什麼;
  • 和bitmap相比,屬於兩種特定統計情況,簡單來說,HyperLogLog 去重比 bitmap 方便很多;
  • 一般可以bitmap和hyperloglog配合使用,bitmap標識哪些使用者活躍,hyperloglog計數。

一般使用:

  • 統計註冊 IP 數;
  • 統計每日訪問 IP 數;
  • 統計頁面實時 UV 數;
  • 統計線上使用者數;
  • 統計使用者每天搜尋不同詞條的個數。
1 PFadd mykey aIa b C defghij #建立第一組元素mykey
2 PFCOUNT mykey # 統計mykey元素的基數數量
3 PFadd mykey2 i j z xcvbnm #建立第二組元素mykey2
4 PFMERGE mykey3 mykey mykey2 #合併兩組mykey mykey2 => mykey3 並集
5 PFCOUNT mykey3 #看並集的數量!

3、點陣圖-Bitmaps

Bitmaps可用於統計使用者資訊,活躍、不活躍,登入、未登入,打卡狀態如365打卡,兩個為打卡的場景下都可以使用Bitmaps。其底層都是操作二進位制位來進行記錄,就只有0和1兩個狀態。

1 SETBIT sig 0 1 # 設定點陣圖
2 GETBIT sig 6 # 獲取點陣圖
3 ################################
4 `使用者簽到`:模擬使用者打卡場景,0-6為一週,0為未打卡,1為打卡
5 BITCOUNT sig  # 統計使用者一週打卡天數

三、Redis自帶效能測試工具

後臺啟動Redis後即可通過命令開啟新視窗使用自帶的效能測試工具。

1  # 如只測試set,100萬個請求,1億
2    $ redis-benchmark -t set -n 1000000 -r 100000000

四、Redis可以通過value獲取key?

據說是在Redis客戶端是無法通過value獲取key的,我也不確定,但是在Java業務上是可以實現這樣的需求的。

五、Redis五種基本資料型別的效能排序? 

至今未解,有緣人求賜教。(String > ? Hash ? List ? Set ? Hash ? Sorted Set)

 

 

 

 臨淵羨魚

不如退而織網 

 

 

 

 

 

相關文章