您好,登錄后才能下訂單哦!
HashMap加雙向鏈表構建IM系統會話列表內存模型的示例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
IM系統都有一個會話列表頁,當某個會話收到或者發送消息后,該會話會排到會話頂部。由于支持消息漫游,服務器端需要保存每個用戶客戶端的會話順序。如何才能在海量消息收發的場景下,準確記錄各個客戶端的會話順序呢?
可以采用一個類似LRU內存淘汰的算法來解決這個問題。采用HashMap與LinkList(鏈表)組合的方式(如下圖)。
圖中左邊是一個Map結構,可以通過sessionid快速索引到具體session(會話)數據,session數據以鏈表形式存儲(圖中右邊部分)。
當這個會話收到或者發送消息時,通過Map在O(1)的時間定位到具體會話數據,然后修改會話數據的鏈表指針,將此會話數據放到鏈表頭部(top)。完成整個操作時間復雜度是常量,可視為O(1)級別。效率很高。
當其他設備拉取會話列表時,按照鏈表順序,分批返回會話列表即可。
實際研發層面,考慮到數據持久化以及研發效率,可選用Redis的SortedSet結構,時間復雜度為O(lg N),N為會話數量。適當控制保存會話的數量,這個復雜度完全可以接受。
關于HashMap加雙向鏈表構建IM系統會話列表內存模型的示例分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。