OpenFire原始碼學習之十九:在openfire中使用redis外掛(上)

莫然發表於2015-02-03

Redis外掛

介紹

Redis是目前比較流行的NO-SQL,基於K,V的資料庫系統。關於它的相關操作資訊,本人這裡就不做重複了,相關資料可以看這個網站http://www.redis.io/(官網)、http://www.redis.cn/(中文站)。

這裡本人想說的是,拿Redis做openfire的快取資料庫。能夠大大的提高openfire連線的吞吐量。Openfire自身在本地使用Map、Cache的方式快取了Group、roster、MUC等資訊。但是當系統使用者過大的時候,需要快取的資料更多了。那麼JVM的對上百G的快取控制貌似不是很好。當然一般情況下也不會那麼大。而且在openfire叢集的模式,讀取其他節點的訊息(比如使用者session)需要誇節點甚至誇機房。這樣也會影響訪問速度。更多情況下,單獨的傳統資料庫對大資料的併發並不理想。還有比較重要的因素就是,當多個系統同時使用的時候,比較入口網站上的使用者登陸與APP上的使用者登陸就會造成很大的麻煩,大多情況下,兩者系統的資料庫表設計本身就不一致,查詢起來就不叫麻煩,那麼把多個系統需要用到的資料都以同一種資料格式快取的話,會省去很多的麻煩!

廢話不多說,直接上外掛吧。

Redis外掛

首先看我的控制檯配置頁面:


這裡本人將openfire需要的快取做了8個大類。每一類設定成了一個資料庫。下面簡單的描述下這幾個大類。

分類

描述

REDIS_USER

使用者庫,快取使用者的相關資訊(認證資料、使用者名稱片、使用者搜尋分詞表)根據使用者量的大小,可以根據不用的業務場景來分

REDIS_GROUP

Group的相關資訊,包括Group與使用者的關係。當然本人使用的業務場景group的資料量可能非常的大

REDIS_ROSTER

使用者花名冊,儲存使用者好友關係。包括使用者新增好友傳送等待的資料

REDIS_MUC

聊天室相關資訊包括聊天室使用者關係、角色類

REDIS_MUC_MESSAGE

聊天室產生的會話訊息。該訊息需要儲存最近聊天50~200條訊息。根據需求不同,這個設定也不同。

REDIS_OFFLINE_MESSAGE

離線訊息,這裡是指。使用者不線上的時候,不同終端好友或者是其他系統的會話訊息儲存。個人把這個離線儲存為時間週期為單位,比如只儲存一個月。

REDIS_CHAT_MESSAGE

這個就是簡單的聊天的會話訊息。為什麼需要儲存普通聊天的呢。本人這裡是考慮到需要多訊息回執,而儲存的。這個庫存讀寫量會非常的平凡,所以打算單獨拿出來

REDIS_SEARCH

使用者搜尋,本人在這裡只是把使用者名稱稱分詞儲存了。終端使用者可以搜尋關鍵詞搜尋使用者。

外掛流程

1、需要配置Redis外掛的資訊(ip、埠、連線密碼等)。這裡本人配置到了關聯式資料庫。如圖:

redisConfiguration


2、Redis的安裝。

關於Redis的安裝或者調優無論是windows環境還是Linux環境在Redis官網作了非常詳細的介紹,這裡本人就不貼圖囉嗦了。

3、新增你需要修改的DAO操作

如:在系統屬性表中修改

provider.auth.className

org.jivesoftware.util.redis.expand.RedisAuthProvider

4、預初始化資料。


這裡的預初始化資料,是將系統啟動後,由控制檯管理員才設定。預初始化的目的是要在原有系統上載入使用者。

 

關於上面接個步驟,Redis就介紹到這了。下面會具體講講原始碼實現。

相關文章