redis的使用及應用場景

1.redis的特徵

內存級別高速緩存。

k -v 鍵值對存儲。

單線程 串行化(worker)。

io模型 epoll。

二進制安全的存儲,字節的存儲(客戶端需要確定統一編碼)。

value有類型,每個類型具有本地方法。

底層是使用C寫的,實際數據的存儲結構都可以從C文件看到。

2.redis的5種常見的數據結構

這幾種數據的存儲結構,數據庫底層對於value的存儲是基於數據結構的,可以參考redis源碼進行了解(涉及到C語言)
5種常用value類型應用場景。

String 、list、hash、set、sorted set zset

在這裏插入圖片描述

3.redis的使用場景

redis

value有類型,每個類型具有本地方法

當redis中的value是數組list時,我們可以通過本地方法獲取redis中數組中下標爲x的值。

String:存儲字符串、數值、bitmap

字符串場景:session共享、uuid、VFS in mem ( 內存虛擬文件存儲系統 小文件)

數值場景:限流器、點擊率,瀏覽量統計。

bitmap場景:二進制操作。

二進制操作涉及到: AND(與)、 OR(或)、 NOT(非)、 XOR(異或)

按位與運算符(&)
參加運算的兩個數據,按二進制位進行“與”運算。
運算規則:0&0=0;  0&1=0;   1&0=0;    1&1=1;
    即:兩位同時爲“1”,結果才爲“1”,否則爲0
      
按位或運算符(|)
參加運算的兩個對象,按二進制位進行“或”運算。
運算規則:0|0=0;  0|1=1;  1|0=1;   1|1=1;
    即 :參加運算的兩個對象只要有一個爲1,其值爲1。
    
非運算(~)
參加運算的一個數據,按二進制位進行取反
運算規則:1取0,0取1 ~1 = 0, ~0 = 1 ~(10001) = 01110

異或運算符(^)
參加運算的兩個數據,按二進制位進行“異或”運算。
運算規則:0^0=0;  0^1=1;  1^0=1;   1^1=0;
即:參加運算的兩個對象,如果兩個相應位爲“異”(值不同),則該位結果爲1,否則爲0。

用戶統計:

  1. 任意時間窗 統計用戶的登錄。

    00000000000100 ,登錄爲1,未登錄爲0

    通過setbit設置是0-365天否登錄,通過bitcount可以統計一個時間段內的登記次數(一天只記錄一次)。
    在這裏插入圖片描述

  2. 計算活躍用戶,某年,某月,某天。

    日活量

    周活躍量bitop 做或運算 ,將週一至周天的活躍數據做或運算得到一個周活量的bit。

在這裏插入圖片描述

  1. 類似12306 搶票,進行矩陣運算

    假設一輛高鐵從武漢到北京,途經上海、廣州。

    當一個人去買票時,說出自己的出發點,和目的地,然後再問有無座次時。這在搶票時是一個高頻操作。如何用最快的方式計算出來,這個就需要用到二進制的一些算法,可以快速運算結果,比如or或運算就可以算出剩餘坐票。

在這裏插入圖片描述
4. 權限 777 rwx 421 000 = 0 111=7

linux服務的權限 777 rwx 就是由12 個二進制位表示

list 數組

存入:有序

同向存取:棧

異向:隊列

數組 :index

LTRIM: 保留熱數據

場景:

評論 : 分頁,利用棧後進先出的特性,最新的評論最在上面。

在這裏插入圖片描述

hash

存儲map<k,v>類型的數據。

set

無序不重複的集合,可用於去重。

sorted set(zset)

可排序的集合,可用於排名、分頁等。

4.根據key查詢redis值的真實存儲結構

前面講了5種redis的值類型存儲,實際底層的存儲又基於數據結構實現了這五種類型的存儲。

可以通過以下命令查看值存儲的實際數據編碼結構。

object encoding key
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章