1.多個系統同時併發競爭乙個key
zookeeper分布式鎖+儲存到mysql的時候帶有時間戳(這樣redis裡面存的也有時間戳了)
2. redis執行緒模型
核心操作模組(如網路請求模組)由單執行緒完成,當然另外還有一些 輔助線程 從旁協助,比如 lru 的淘汰過程。
為什麼之前網路請求模組為什麼沒用多執行緒:
根據以往的場景,普通 kv 儲存 瓶頸壓根不在 cpu,而往往可能受到 記憶體 和 網路i/o 的制約
redis 中有各種型別的資料操作,甚至包括一些事務處理,如果採用多執行緒,則會被多執行緒產生的切換問題而困擾,也可能因為加鎖導致系統架構變的異常複雜,更有可能會因為加鎖解鎖甚至死鎖造成的效能損耗。
redis6.0之後:redis使用多執行緒並非是完全摒棄單執行緒,redis還是使用單執行緒模型來處理客戶端的請求,只是使用多執行緒來處理資料的讀寫和協議解析,執行命令還是使用單執行緒。這樣做的目的是因為redis的效能瓶頸在於網路io而非cpu,使用多執行緒能提公升io讀寫的效率,從而整體提高redis的效能。
3. 快取與資料庫雙寫如何儲存一致性
如果要保證快取和資料庫強一致性的話,讀請求和寫請求應該序列化。
不要求強一致性,cache aside pattern 最經典的快取+資料庫讀寫的模式,
2.1 讀的時候,先讀快取,快取沒有的話,就讀資料庫,然後取出資料後放入快取,同時返回響應。
2.2 更新的時候,先更新資料庫,然後再刪除快取。為什麼刪除快取:1) 很多時候,在複雜點的快取場景,快取不單單是資料庫中直接取出來的值。比如可能更新了某個表的乙個字段,然後其對應的快取,是需要查詢另外兩個表的資料並進行運算,才能計算出快取最新的值的。2) 如果你頻繁修改乙個快取涉及的多個表,快取也頻繁更新。但是問題在於,這個快取可能並不會被頻繁訪問到。
4. redis常見資料結構與使用場景
實現常用資料結構:
stack=lpush+lpop -> fifo
queue=lpush+rpop
blocking mq=lpush+brpop
dedecms一些常見問題
1 list和arclist的區別 首頁的列表呼叫,以及其它內頁的側邊欄,這些地方都可以使用arclist標籤,並且還可以根據typeid id 來指定呼叫哪個欄目下的列表 list 標籤還有乙個不同處就是分頁,我們知道在 製作中分頁功能是 欄目列表頁必不可少的乙個功能,而這個功能用arclist標...
事務及一些常見問題
兩個事務都同時更新一行資料,乙個事務對資料的更新把另乙個事務對資料的更新覆蓋了。這是因為系統沒有執行任何的鎖操作,因此併發事務並沒有被隔離開來。乙個事務讀取到了另乙個事務未提交的資料操作結果。這是相當危險的,因為很可能所有的操作都被 回滾。不可重複讀 non repeatable reads 乙個事...
ubuntu的一些常見問題
但是我操作上出現問題,執行命令cp libflashplayer.so usr bin forefox,結果就悲劇了,firefox啟動不了。解決方式 適用了下把firefox的檔案copy到usr bin目錄下,但是不成功,所以就解除安裝了firefox,又裝了一遍。sudo apt get re...