探索密碼學的奇妙之旅。介紹CTR、混合密碼系統、RSA-OAEP相關理論。並基於AES、RSA標準,使用golang crypto包實現了簡單混合加密系統。 ...
1. 用過Redis嗎,它使用在哪些地方(使用場景)?
Redis是一種記憶體型資料庫,用作資料庫,緩存和消息代理。數據結構簡單,讀寫速度快(毫秒級),原子操作。
適用於: 數據高併發讀寫、海量數據讀寫、對擴展性要求高的數據 的場景。
解決應用伺服器的CPU和記憶體壓力;
減少IO的讀操作,減輕IO的壓力;
關係型資料庫的擴展性不強,難以改變表結構。
常見應用場景:
-
緩存: 熱點數據(讀多寫少),減輕資料庫壓力。
-
數據共用: 分散式會話session
-
排行榜: 誰得分高誰排名往上。命令:ZADD(有續集,sorted set)
-
限時業務: 秒殺 存儲登錄者用戶信息 存儲簡訊驗證碼
-
分散式鎖: 單獨的服務,原子性(單線程)
參考 java分散式鎖終極解決方案之 redisson -
最新列表
List結構,LPUSH可以在列表頭部插入一個內容ID作為關鍵字,LTRIM可用來限制列表的數量,這樣列表永遠為N個ID,無需查詢最新的列表,直接根據ID去到對應的內容頁即可。Redis查詢不到key,再MySQL查詢 -
隊列(消息隊列)
消息隊列是大型網站必用中間件,主要用於業務解耦、流量削峰及非同步處理實時性低的業務。Redis提供了發佈/訂閱及阻塞隊列功能,能實現一個簡單的消息隊列系統。如果對於數據一致性要求高的話還是用RocketMQ等專業系統。由於redis把數據添加到隊列是返回添加元素在隊列的第幾位,所以可以做判斷用戶是第幾個訪問這種業務;隊列不僅可以把併發請求變成串列,並且還可以做隊列或者棧使用。
-
計數器: 統計點擊數等 int類型,incrby(incr)命令,利用原子性(單線程,可以避免併發問題),性能好100%毫秒級
瀏覽量(電商)、點贊數、收藏數、播放量、簽到打卡、 -
限流: int類型,incrby(incr)命令
以訪問者的ip和其他信息作為key,訪問一次增加一次計數,超過次數則返回false -
時間軸(Timeline): 與最新列表場景類似
-
位統計(大數據處理): String類型的bitcount(1.6.6的bitmap數據結構介紹)
字元是以8位二進位存儲的
set k1 a
setbit k1 6 1
setbit k1 7 0
get k1
/**
6 7 代表的a的二進位位的修改
a 對應的ASCII碼是97,轉換為二進位數據是01100001
b 對應的ASCII碼是98,轉換為二進位數據是01100010
因為bit非常節省空間(1 MB=8388608 bit),可以用來做大數據量的統計。
*/
參考
使用Redis的bitmaps統計用戶留存率、活躍用戶
用戶日活月活怎麼統計 - Redis HyperLogLog 詳解
其他場景參考:
redis安裝及應用場景
Redis的8大應用場景
Redis 16 個常見使用場景