91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

HashMap加雙向鏈表構建IM系統會話列表內存模型的示例分析

發布時間:2021-12-08 15:21:26 來源:億速云 閱讀:217 作者:柒染 欄目:大數據

HashMap加雙向鏈表構建IM系統會話列表內存模型的示例分析,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

IM系統都有一個會話列表頁,當某個會話收到或者發送消息后,該會話會排到會話頂部。由于支持消息漫游,服務器端需要保存每個用戶客戶端的會話順序。如何才能在海量消息收發的場景下,準確記錄各個客戶端的會話順序呢?

可以采用一個類似LRU內存淘汰的算法來解決這個問題。采用HashMap與LinkList(鏈表)組合的方式(如下圖)。

HashMap加雙向鏈表構建IM系統會話列表內存模型的示例分析

圖中左邊是一個Map結構,可以通過sessionid快速索引到具體session(會話)數據,session數據以鏈表形式存儲(圖中右邊部分)。

當這個會話收到或者發送消息時,通過Map在O(1)的時間定位到具體會話數據,然后修改會話數據的鏈表指針,將此會話數據放到鏈表頭部(top)。完成整個操作時間復雜度是常量,可視為O(1)級別。效率很高。

當其他設備拉取會話列表時,按照鏈表順序,分批返回會話列表即可。

實際研發層面,考慮到數據持久化以及研發效率,可選用Redis的SortedSet結構,時間復雜度為O(lg N),N為會話數量。適當控制保存會話的數量,這個復雜度完全可以接受。

關于HashMap加雙向鏈表構建IM系統會話列表內存模型的示例分析問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德阳市| 萨迦县| 交城县| 株洲县| 通道| 定州市| 海兴县| 乐至县| 岑巩县| 洪江市| 南靖县| 游戏| 汝州市| 信丰县| 华亭县| 湘乡市| 清远市| 和田市| 神池县| 仁化县| 泾川县| 西吉县| 晋城| 黎城县| 平湖市| 南昌县| 湖口县| 古田县| 靖江市| 吉水县| 安徽省| 台安县| 阿拉善右旗| 玉门市| 务川| 嵩明县| 北海市| 宁武县| 共和县| 和平县| 南郑县|