20200325繼續redis學習

redis五種結構:
String:普通存儲,key,value(字符串),也可以存json字符串。場景:計數器,緩存,共享session
list:key,value(無序集合列表)場景:存一些列表數據,如粉絲列表,文章列表。做分頁(有索引),可以先預加載一部分,剩下的下拉再加載
hash:存一個單獨的對象,且對象裏不能包含另一個對象
set:無序去重集合。場景:可以求交集、並集等。
sortSet:有序去重集合。場景:可以用作熱點數據排行展示。

如何控制redis高併發帶來的問題呢?
使用分佈式鎖(zookeeper),當某一時刻,多個用戶去同時更新某個key時,先加鎖,確保當前時刻只有一個用戶在操作該數據。
寫數據時也一樣,需要在數據庫設置一個時間戳,查詢數據的時候帶上這個時間戳,緩存中也要加時間戳,用這兩個時間戳做對比,看哪個新就用新得去覆蓋舊的數據。

緩存數據庫讀寫問題:
讀數據時,先讀緩存,如果沒有,都數據庫,然後更新緩存。
更新數據時,先更新數據庫,然後刪除緩存,用到緩存時再更新緩存。這樣減少了緩存的計算,使得資源利用的更合理。

redis與memcachaed比較:
redis有更豐富的數據結構和對數據的操作。
redis時單核,所以存儲時比memcached性能更高,但數據在100k以上時,memcached性能更好。
redis支持原生集羣處理。

redis 的線程模型瞭解麼?
Redis 內部使用文件事件處理器 file event handler,這個文件事件處理器是單線程的,所以 Redis 才叫做單線程的模型。它採用 IO 多路複用機制同時監聽多個 Socket,根據 Socket 上的事件來選擇對應的事件處理器進行處理。
文件事件處理器的結構包含 4 個部分:
多個 Socket
IO 多路複用程序
文件事件分派器
事件處理器(連接應答處理器、命令請求處理器、命令回覆處理器)
多個 Socket 可能會併發產生不同的操作,每個操作對應不同的文件事件,但是 IO 多路複用程序會監聽多個 Socket,會將 Socket 產生的事件放入隊列中排隊,事件分派器每次從隊列中取出一個事件,把該事件交給對應的事件處理器進行處理。

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