OpenFire源碼學習之十九:在openfire中使用redis插件(上)

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就介紹到這了。下面會具體講講源碼實現。

轉載于:https://www.cnblogs.com/huwf/p/4273349.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376269.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376269.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376269.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++ queue學習

參考資料: cppreference.com 本文代碼: 本文源碼 目錄成員函數1.operator (賦值給容器)元素訪問2.front (訪問第一個元素)3.back (訪問最后一個元素)容量4.empty (判斷容…

沒有文件擴展“.js”的腳本引擎問題解決

安裝MinGW的時候提示沒有文件擴展“.js”的腳本引擎。原因:系統安裝Dreamwear、UltraEdit、EditPlus后修改了.js文件的默認打開方式。當想直接執行js腳本時就會出現此錯誤。解決辦法:打開注冊表編輯器,定位[HKEY_CLASSES_ROOT.js]這一項&…

160 - 54 eKH

環境:windows xp 工具: 1、OllyDBG 2、IDA 3、exeinfo 查殼發現是程序無殼且用Delphi語言編寫 可以通過搜索字符串的方式定位關鍵函數地址 這里定位到是 00427B44ReadInput(a2, &v17); // 讀取輸入的usernameif ( StrL…

點賺接口(第二版)

1.查看是否有新消息 url:/get/message/status?user_id{user_id} method:get response: {"code": "ok","msg": "","data": 0 //新消息數目 } 2.獲取消息列表 url:/get/messa…

Java基礎之線程——使用Runnable接口(JumbleNames)

控制臺程序。 除了定義Thread新的子類外,還可以在類中實現Runnable接口。您會發現這比從Thread類派生子類更方便,因為在實現Runnable接口時可以從不是Thread的類派生子類,并且仍然表示線程。Java只允許有單個基類,如果類派生于Thr…

cpri帶寬不足的解決方法_白皮書:FPGA賦能下一代通信和網絡解決方案(第四部分)...

對PCIe Gen 5的支持除了以太網和存儲控制器,Speedster7t FPGA上提供的對PCIe Gen 5的支持還能夠與主機處理器緊密集成,以支持諸如sidecar智能網卡(SmartNIC)設計等高性能加速器應用。PCI Gen 5控制器使其能夠讀取和寫入存儲在FPGA內存層級結構中的數據&a…

laravel里面使用event

模式:大概是通過一個自定義的event,一個handler,還有一個binder,然后用來簡化通知模型 生成自定義的event ./artisan make:event MyEvent 生成自定義的handler ./artisan handler:event MyEventHandler --eventMyEvent 然后在Even…

C語言的條件編譯#if, #elif, #else, #endif、#ifdef, #ifndef

有些程序在調試、兼容性、平臺移植等情況下可能想要通過簡單地設置一些參數就生成一個不同的軟件,這當然可以通過變量設置,把所有可能用到的代碼都寫進去,在初始化時配置,但在不同的情況下可能只用到一部分代碼,就沒必…

山體等高線怎么看_每日一題 | 此處向斜山,你看出來了嗎?

每日一題 | 此處向斜山,你看出來了嗎?(2018江蘇高考)如圖為某區域地質簡圖。該區沉積地層有Q、P、C、D、S2、S1,其年代依次變老。讀圖回答1~2題。1.從甲地到乙地的地形地質剖面示意圖是(  )2.為揭示深部地…

cmake The source directory xxxx does not appear to contain CMakeLists.txt

執行 cmake . 的時候報錯: The source directory “xxxx” does not appear to contain CMakeLists.txt 簡單來說就是當前文件夾里面沒有 CMakeLists.txt

SSH出錯--hibernate--org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [from User]

String queryString "from user where u.userName ? and u.userPassword ?"; ----------------------------------------------------------- 改為: String queryString "from User where u.userName ? and u.userPassword ?"; 我估…

Linux下的tar壓縮解壓縮命令詳解

tar -c: 建立壓縮檔案-x:解壓-t:查看內容-r:向壓縮歸檔文件末尾追加文件-u:更新原壓縮包中的文件 這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的參數是根據需要…

java和c++的區別大嗎_大空間消防水炮ZDMS0.8/30S坐裝和吊裝有區別嗎?

大空間消防水炮現在是高大建筑的消防必備的設備之一,其型號按照流量可分為4種,ZDMS0.6/5S,ZDMS0.6/10S,SZDMS0.8/20S,ZDMS0.8/30S。在這中間使用較多的是5L和30L的,5L的消防水炮都是吊裝,但是30…

Windows Hook(1)加載DLL

DLL代碼 #include <Windows.h> BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:MessageBox(NULL, L"dllHook", L"Hook", MB_OK);break;case DLL_THR…

WPF Delegate委托整理

那啥&#xff0c;是從這里整理出來的&#xff0c;感謝Rising_Sun&#xff0c;整理的過于簡單&#xff0c;看不明白的戳這里 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; us…

silverligh的數據訪問

對于在Silverlight中訪問數據&#xff0c;初學者的誤解之一就是他們在Silverlight中尋找ADO.NET類庫。別找了&#xff0c;找不到的。記住&#xff0c;Silverlight是部署在互聯網上的客端技術&#xff0c;你不能要求一個瀏覽器插件去直接訪問你的數據庫……除非你想把數據庫直接…

cacheinterceptor第二次訪問沒被調用_訪問者設計模式在OSG中的應用

為什么要談談訪問者設計模式呢&#xff1f;因為OSG整個引擎就是用訪問者設計模式建立起來的&#xff0c;不論是遍歷節點圖&#xff0c;還是做各種實用的功能&#xff0c;都需要大量的用到訪問者設計模式。先談談訪問者設計模式的定義。1&#xff1a;什么是訪問者模式訪問者模式…

Windows Hook(2)調用DLL函數

DLL代碼 #include <Windows.h>BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:MessageBox(NULL, L"dllHook", L"Hook", MB_OK);break;case DLL_THRE…

HDU4678_Mine

很有意思&#xff0c;很好的題目。 這樣的&#xff0c;一個n*m的掃雷地圖&#xff0c;告訴你哪些地方是有雷的。一個人如果點在了空白處&#xff0c;那么與其相鄰的&#xff08;八個方向&#xff09;的數字以及空白都會遞歸地顯示出來&#xff0c;如果點在數字上面&#xff0c;…

pygame只能編寫游戲_游戲框架搭建

游戲框架搭建目標 —— 使用 面相對象 設計 飛機大戰游戲類目標明確主程序職責實現主程序類準備游戲精靈組01. 明確主程序職責回顧 快速入門案例&#xff0c;一個游戲主程序的 職責 可以分為兩個部分&#xff1a;游戲初始化游戲循環根據明確的職責&#xff0c;設計 PlaneGame 類…