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源码学习之十九:在openfire中使用redis插件(上)
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

OpenFire源码学习之十九:在openfire中使用redis插件(上)
Redis插件

2、Redis的安装。

关于Redis的安装或者调优无论是windows环境还是Linux环境在Redis官网作了非常详细的介绍,这里本人就不贴图啰嗦了。

3、添加你需要修改的DAO操作

如:在系统属性表中修改

provider.auth.className

org.jivesoftware.util.redis.expand.RedisAuthProvider

4、预初始化数据。

OpenFire源码学习之十九:在openfire中使用redis插件(上)
Redis插件

这里的预初始化数据,是将系统启动后,由控制台管理员才设置。预初始化的目的是要在原有系统上加载用户。

关于上面接个步骤,Redis就介绍到这了。下面会具体讲讲源码实现。