OpenFire源码学习之二十:在openfire中使用redis插件(下)

Redis插件实现

首先来看下插件目录:


RedisServicePlugin

源码清单:

[java]  view plain  copy
  1. import java.io.File;  
  2. import java.sql.Connection;  
  3. import java.sql.PreparedStatement;  
  4. import java.util.Collection;  
  5. import java.util.HashMap;  
  6. import java.util.Map;  
  7.   
  8. import org.jivesoftware.database.DbConnectionManager;  
  9. import org.jivesoftware.openfire.XMPPServer;  
  10. import org.jivesoftware.openfire.container.Plugin;  
  11. import org.jivesoftware.openfire.container.PluginManager;  
  12. import org.jivesoftware.util.JiveGlobals;  
  13. import org.jivesoftware.util.PropertyEventDispatcher;  
  14. import org.jivesoftware.util.PropertyEventListener;  
  15. import org.jivesoftware.util.redis.enity.RedisConfig;  
  16. import org.jivesoftware.util.redis.enity.User;  
  17. import org.jivesoftware.util.redis.enity.UserVcard;  
  18. import org.slf4j.Logger;  
  19. import org.slf4j.LoggerFactory;  
  20. import redis.clients.jedis.Jedis;  
  21.   
  22. public class RedisServicePlugin implements Plugin, PropertyEventListener{  
  23.       
  24.     private static final Logger log = LoggerFactory.getLogger(RedisServicePlugin.class);  
  25.       
  26.     private static final String OF_REDIS_CONFIG_DELETE = "delete from redisConfiguration";  
  27.     private static final String OF_REDIS_CONFIG_INSERT = "INSERT INTO redisConfiguration (name, ip, port, auto) VALUES (?, ?, ?, ?)";  
  28.   
  29.     private XMPPServer server;  
  30.     private boolean enabled;  
  31.       
  32.     @Override  
  33.     public void propertySet(String property, Map<String, Object> params) {  
  34.         if (property.equals("plugin.redis.enabled")) {  
  35.             this.enabled = Boolean.parseBoolean((String)params.get("value"));  
  36.         }  
  37.     }  
  38. ......  
  39.     public boolean isEnabled() {  
  40.         return enabled;  
  41.     }  
  42.       
  43.     public void setEnabled(boolean enabled) {  
  44.         this.enabled = enabled;  
  45.         JiveGlobals.setProperty("plugin.redis.enabled",  enabled ? "true" : "false");  
  46.     }  
  47.   
  48.     @Override  
  49.     public void initializePlugin(PluginManager manager, File pluginDirectory) {  
  50.         enabled = JiveGlobals.getBooleanProperty("plugin.redis.enabled"true);  
  51.         server = XMPPServer.getInstance();  
  52.         PropertyEventDispatcher.addListener(this);  
  53.     }  
  54.   
  55.     @Override  
  56.     public void destroyPlugin() {  
  57.         enabled = JiveGlobals.getBooleanProperty("plugin.redis.enabled"false);  
  58.         PropertyEventDispatcher.removeListener(this);  
  59.     }  
  60.   
  61.     public void initializeAllData () {  
  62.         Collection<RedisConfig> crcfs = getAllRedisConfig();  
  63.         if (!crcfs.isEmpty()) {  
  64.             for (RedisConfig rcf : crcfs) {  
  65.                 if ("REDIS_USER".equals(rcf.getName())) {  
  66.                     setRedisByUserInfo();  
  67.                 }  
  68.             }  
  69.         }  
  70.     }  
  71.       
  72.     public void saveRedisConfig(Collection<RedisConfig> object) {  
  73.         PreparedStatement pstmt = null;  
  74.         Connection con = null;  
  75.         try {  
  76.             con = (Connection) DbConnectionManager.getConnection();  
  77.             if (object != null) {  
  78.                 pstmt = con.prepareStatement(OF_REDIS_CONFIG_DELETE);  
  79.                 pstmt.execute();  
  80.                 pstmt = (PreparedStatement) con.prepareStatement(OF_REDIS_CONFIG_INSERT);  
  81.                 for (RedisConfig cr : object) {  
  82.                     pstmt.setString(1, cr.getName());  
  83.                     pstmt.setString(2, cr.getIp());  
  84.                     pstmt.setString(3, cr.getPort());  
  85.                     pstmt.setString(4, cr.getAuto());  
  86.                     pstmt.executeUpdate();  
  87.                 }  
  88.             }  
  89.         } catch (Exception e) {  
  90.              log.info(e.getMessage());  
  91.              e.printStackTrace();  
  92.         }  
  93.         finally {  
  94.              DbConnectionManager.closeConnection(pstmt, con);  
  95.         }  
  96.     }  
  97.       
  98.     public Collection<RedisConfig> getAllRedisConfig() {  
  99.         if (server == null)  
  100.             server = XMPPServer.getInstance();  
  101.         return server.getJedisConfDao().getAllRedisConfig();  
  102.     }  
  103.       
  104.     public void setRedisOfflineMessage() {  
  105.         XMPPServer.getInstance().getChatMessageJedisPoolManager().initDataByOfflineMessage();  
  106.     }  
  107.       
  108.     public void destroyOfflineMessage() {  
  109.         Jedis jedis = server.getChatMessageJedisPoolManager().getJedis();  
  110.         jedis.flushDB();  
  111.         server.getChatMessageJedisPoolManager().returnRes(jedis);  
  112.     }  
  113.       
  114.     public void setRedisUserSearch() {  
  115.         XMPPServer.getInstance().getRedisSearchManager().createSearchAllUserData();  
  116.     }  
  117.       
  118.     public void destroyUserSearch() {  
  119.         Jedis jedis = server.getRedisSearchManager().getSearchJedis();  
  120.         jedis.flushDB();  
  121.         XMPPServer.getInstance().getUserJedis().returnRes(jedis);  
  122.     }  
  123.       
  124.     public void destroyRedisByUserInfo () {  
  125.         Jedis jedis = server.getUserJedis().getJedis();  
  126.         Map<String, String > user = jedis.hgetAll("OFUSER:admin");  
  127.         jedis.flushAll();  
  128.         jedis.hmset("OFUSER:admin", user);  
  129.         XMPPServer.getInstance().getUserJedis().returnRes(jedis);  
  130.     }  
  131.       
  132.     public void setRedisByUserInfo () {  
  133.         Jedis jedis = server.getUserJedis().getJedis();  
  134.         int i = 1;  
  135.           
  136.         Collection<User> users = server.getUserJedis().getAllUser();  
  137.         if (!users.isEmpty()) {  
  138.             for (User user : users) {  
  139.                 Map<String,String> map = new HashMap<String, String>();  
  140.                 map.put("PASSWORD", user.getPassword());  
  141.                 if (user.getName() != null )  
  142.                     map.put("NAME", user.getName());  
  143.                 if (user.getMoblie() != null )  
  144.                     map.put("MOBILE", user.getMoblie().trim());  
  145.                 if (user.getEmail() != null)  
  146.                     map.put("EMAIL", user.getEmail().trim());  
  147.                 map.put("CREATIONDATE",user.getCreationDate().trim());  
  148.                 map.put("MODIFICATIONDATE",user.getModificationDate().trim());  
  149.                 jedis.hmset("OFUSER:" + user.getUsername(), map);  
  150.                   
  151.                 System.out.println("The " + i++ + "user generation=> username:" + user.getUsername() + ", name:" + user.getName());  
  152.             }  
  153.             System.out.println("the end:user base info generated...");  
  154.             i = 1;  
  155.               
  156.             for (User user : users) {  
  157.                 if (user.getMoblie() != null && !"".equals(user.getMoblie())) {  
  158.                     jedis.set("MOBILE:" + user.getMoblie(), user.getUsername());  
  159.                     System.out.println("The" + i++ + "user,mobile relation generation=> mobile:" + user.getMoblie() + ", username:" + user.getUsername());  
  160.                 }  
  161.             }  
  162.             System.out.println("the end:user and mobile relation generated...");  
  163.             i = 1;  
  164.         }  
  165.           
  166.         Collection<UserVcard> uservcards = server.getUserJedis().getUserVcard();  
  167.         if (!uservcards.isEmpty()) {  
  168.             for (UserVcard uv : uservcards) {  
  169.                 if (uv.getVcard() != null && !"".equals(uv.getVcard())) {  
  170.                     jedis.set("OFVCARD:" + uv.getUsername(), uv.getVcard());  
  171.                     System.out.println("The" + i++ + "user vcard generation=> username:" + uv.getUsername());  
  172.                 }  
  173.             }  
  174.             i = 1;  
  175.             System.out.println("the end:user vcard generated...");  
  176.         }  
  177.           
  178.         server.getUserJedis().returnRes(jedis);  
  179.     }  
  180. }  

RedisUserInfoOpt:

[java]  view plain  copy
  1. import java.util.HashMap;  
  2. import java.util.Map;  
  3.   
  4. import org.jivesoftware.openfire.XMPPServer;  
  5. import org.jivesoftware.util.redis.enity.User;  
  6. import org.slf4j.Logger;  
  7. import org.slf4j.LoggerFactory;  
  8.   
  9. import redis.clients.jedis.Jedis;  
  10.   
  11. public class RedisUserInfoOpt {  
  12.   
  13.     private static final Logger Log = LoggerFactory.getLogger(RedisUserInfoOpt.class);  
  14.       
  15.     public void setBaseUserInfo(User user) {  
  16.         if (user != null) {  
  17.             Jedis jedis = XMPPServer.getInstance().getUserJedis().getJedis();  
  18.               
  19.             try {  
  20.                 Map<String,String> map = new HashMap<String, String>();  
  21.                 map.put("PASSWORD", user.getPassword());  
  22.                 if (user.getName() != null )  
  23.                     map.put("NAME", user.getName());  
  24.                 if (user.getMoblie() != null )  
  25.                     map.put("MOBILE", user.getMoblie().trim());  
  26.                 if (user.getEmail() != null)  
  27.                     map.put("EMAIL", user.getEmail().trim());  
  28.                 map.put("CREATIONDATE",user.getCreationDate().trim());  
  29.                 map.put("MODIFICATIONDATE",user.getModificationDate().trim());  
  30.                 jedis.hmset("OFUSER:" + user.getUsername(), map);  
  31.                 Log.info("user generation=> username:" + user.getUsername() + ", name:" + user.getName());  
  32.             } finally{  
  33.                 XMPPServer.getInstance().getUserJedis().returnRes(jedis);  
  34.             }  
  35.         }  
  36.     }  
  37.       
  38.     public void setUserMobile(User user) {  
  39.         if (user != null) {  
  40.             Jedis jedis = XMPPServer.getInstance().getUserJedis().getJedis();  
  41.             try {  
  42.                   
  43.             } finally {  
  44.                 XMPPServer.getInstance().getUserJedis().returnRes(jedis);  
  45.             }  
  46.               
  47.         }  
  48.     }  
  49. }  

redis-service.jsp

[html]  view plain  copy
  1. <%@ page import="java.util.*,  
  2.                  org.jivesoftware.openfire.XMPPServer,  
  3.                  org.jivesoftware.util.*,  
  4.                  com.montnets.redis.plugin.RedisServicePlugin,  
  5.                  org.jivesoftware.util.redis.enity.RedisConfig"  
  6.     errorPage="error.jsp"  
  7. %>  
  8.   
  9. <%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>  
  10. <%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>  
  11.   
  12. <%-- Define Administration Bean --%>  
  13. <jsp:useBean id="admin" class="org.jivesoftware.util.WebManager"  />  
  14. <c:set var="admin" value="${admin.manager}" />  
  15. <% admin.init(request, response, session, application, out ); %>  
  16.   
  17. <%  // Get parameters  
  18.     boolean save = request.getParameter("save") != null;  
  19.     String initdata = request.getParameter("initdata");  
  20.     String deldata = request.getParameter("deldata");  
  21.     boolean success = request.getParameter("success") != null;  
  22.     RedisServicePlugin rsp = new RedisServicePlugin();  
  23.     Collection<RedisConfig> rcList = rsp.getAllRedisConfig();  
  24.       
  25.     // Handle a save  
  26.     Map errors = new HashMap();  
  27.     Collection<RedisConfig> rcColl = new ArrayList<RedisConfig>();  
  28.       
  29.     if ("REDIS_USER".equals(initdata)) {  
  30.         rsp.initializeAllData();  
  31.         response.sendRedirect("redis-service.jsp?success=true");  
  32.         return;  
  33.     }  
  34.     else if ("REDIS_USER".equals(deldata)) {  
  35.         rsp.destroyRedisByUserInfo();  
  36.         response.sendRedirect("redis-service.jsp?success=true");  
  37.         return;  
  38.     }  
  39.     ......  
  40.     if (save) {  
  41.         String uname = request.getParameter("REDIS_USER");  
  42.         String r_user_name = request.getParameter("REDIS_USER_IP").trim();  
  43.         String r_user_port = request.getParameter("REDIS_USER_PORT").trim();  
  44.         String r_user_auto = request.getParameter("REDIS_USER_AUTO").trim();  
  45.         if (r_user_name == null || r_user_port == null) {  
  46.             errors.put("uname", "Redis-User is error!");  
  47.         }  
  48.         else {  
  49.             RedisConfig rc = new RedisConfig();  
  50.             rc.setName(uname);  
  51.             rc.setIp(r_user_name);  
  52.             rc.setPort(r_user_port);  
  53.             rc.setAuto(r_user_auto);  
  54.             rcColl.add(rc);  
  55.         }  
  56.         ......  
  57.         String mmname = request.getParameter("REDIS_MUC_MESSAGE");  
  58.         String r_mm_name = request.getParameter("REDIS_MUC_MESSAGE_IP").trim();  
  59.         String r_mm_port = request.getParameter("REDIS_MUC_MESSAGE_PORT").trim();  
  60.         String r_mm_auto = request.getParameter("REDIS_MUC_MESSAGE_AUTO").trim();  
  61.         if (r_mm_name == "" || r_mm_port == "") {  
  62.             errors.put("mname", "Redis-MUC MESSAGE is error!");  
  63.         }  
  64.         else {  
  65.             RedisConfig rc = new RedisConfig();  
  66.             rc.setName(mmname);  
  67.             rc.setIp(r_mm_name);  
  68.             rc.setPort(r_mm_port);  
  69.             rc.setAuto(r_mm_auto);  
  70.             rcColl.add(rc);  
  71.         }  
  72.           
  73.         String omname = request.getParameter("REDIS_OFFLINE_MESSAGE");  
  74.         ......  
  75.         if (errors.size() == 0) {  
  76.             rsp.saveRedisConfig(rcColl);  
  77.             response.sendRedirect("redis-service.jsp?success=true");  
  78.             return;  
  79.         }  
  80.     }  
  81.       
  82. %>  
  83.   
  84. <html>  
  85.     <head>  
  86.         <title>Redis Service Properties</title>  
  87.         <meta name="pageID" content="redis-service"/>  
  88.     </head>  
  89.     <body>  
  90. <%  if (!errors.isEmpty()) { %>  
  91.   
  92.     <div class="jive-error">  
  93.     <table cellpadding="0" cellspacing="0" border="0">  
  94.     <tbody>  
  95.         <tr>  
  96.             <td class="jive-icon"><img src="images/error-16x16.gif" width="16" height="16" border="0" alt=""/></td>  
  97.             <td class="jive-icon-label">  
  98.   
  99.             <% if (errors.get("uname") != null) { %>  
  100.                 <%=errors.get("uname") %>  
  101.             <% } else if (errors.get("gname") != null) { %>  
  102.                 <%=errors.get("gname") %>  
  103.             <% } else if (errors.get("rname") != null) { %>  
  104.                 <%=errors.get("rname") %>  
  105.             <% } else if (errors.get("mname") != null) { %>  
  106.                 <%=errors.get("mname") %>  
  107.             <% } else if (errors.get("mmname") != null) { %>  
  108.                 <%=errors.get("mmname") %>  
  109.             <% } else if (errors.get("omname") != null) { %>  
  110.                 <%=errors.get("omname") %>  
  111.             <% } else if (errors.get("cmname") != null) { %>  
  112.                 <%=errors.get("cmname") %>  
  113.             <% } %>  
  114.             </td>  
  115.         </tr>  
  116.     </tbody>  
  117.     </table>  
  118.     </div><br>  
  119.   
  120. <%  } %>  
  121.   
  122. <p>  
  123. This is redis plugin  
  124. </p>  
  125.   
  126. <%  if (success) { %>  
  127.   
  128.     <div class="jive-success">  
  129.     <table cellpadding="0" cellspacing="0" border="0">  
  130.     <tbody>  
  131.         <tr><td class="jive-icon"><img src="images/success-16x16.gif" width="16" height="16" border="0"></td>  
  132.         <td class="jive-icon-label">  
  133.             redis service properties edited successfully.  
  134.         </td></tr>  
  135.     </tbody>  
  136.     </table>  
  137.     </div><br>  
  138. <% } %>  
  139.   
  140. <form action="redis-service.jsp?save=true" method="post">  
  141.   
  142. <fieldset>  
  143.     <legend>Redis Service</legend>  
  144.     <div>  
  145.     <ul>  
  146.     <%if (rcList.size() < 1) { %>  
  147.         <label for="r_user">REDIS_USER:</label>  
  148.         <input type="hidden" id="r_user_name" name="REDIS_USER" value="REDIS_USER"/>  
  149.         <input type="text" id="r_user_ip" name="REDIS_USER_IP" size="20" value=""/>  
  150.         <label for="r_port">port:</label>  
  151.         <input type="text" id="r_user_port" name="REDIS_USER_PORT" size="5" value=""/>  
  152.         <label for="r_auto">auto:</label>  
  153.         <input type="text" name="REDIS_USER_AUTO" size="10" value=""/>  
  154.         <br><br>  
  155.           
  156.         <label for="r_user">REDIS_GROUP:</label>  
  157.         <input type="hidden" id="r_group_name" name="REDIS_GROUP" value="REDIS_GROUP"/>  
  158.         <input type="text" id="r_group_ip" name="REDIS_GROUP_IP" size="20" value=""/>  
  159.         <label for="r_port">port:</label>  
  160.         <input type="text" id="r_group_port" name="REDIS_GROUP_PORT" size="5" value=""/>  
  161.         <label for="r_auto">auto:</label>  
  162.         <input type="text" name="REDIS_GROUP_AUTO" size="10" value=""/>  
  163.         <br><br>  
  164.           
  165.         <label for="r_user">REDIS_ROSTER:</label>  
  166.         <input type="hidden" id="r_roster_name" name="REDIS_ROSTER" value="REDIS_ROSTER"/>  
  167.         <input type="text" id="r_roster_ip" name="REDIS_ROSTER_IP" size="20" value=""/>  
  168.         <label for="r_port">port:</label>  
  169.         <input type="text" id="r_roster_port" name="REDIS_ROSTER_PORT" size="5" value=""/>  
  170.         <label for="r_auto">auto:</label>  
  171.         <input type="text" name="REDIS_ROSTER_AUTO" size="10" value=""/>  
  172.         <br><br>  
  173.           
  174.         <label for="r_user">REDIS_MUC:</label>  
  175.         <input type="hidden" id="r_muc_name" name="REDIS_MUC" value="REDIS_MUC"/>  
  176.         <input type="text" id="r_muc_ip" name="REDIS_MUC_IP" size="20" value=""/>  
  177.         <label for="r_port">port:</label>  
  178.         <input type="text" id="r_muc_port" name="REDIS_MUC_PORT" size="5" value=""/>  
  179.         <label for="r_auto">auto:</label>  
  180.         <input type="text" name="REDIS_MUC_AUTO" size="10" value=""/>  
  181.         <br><br>  
  182.           
  183.         <label for="r_user">REDIS_MUC_MESSAGE:</label>  
  184.         <input type="hidden" id="r_mm_name" name="REDIS_MUC_MESSAGE" value="REDIS_MUC_MESSAGE"/>  
  185.         <input type="text" id="r_mm_ip" name="REDIS_MUC_MESSAGE_IP" size="20" value=""/>  
  186.         <label for="r_port">port:</label>  
  187.         <input type="text" id="r_mm_port" name="REDIS_MUC_MESSAGE_PORT" size="5" value=""/>  
  188.         <label for="r_auto">auto:</label>  
  189.         <input type="text" name="REDIS_MUC_MESSAGE_AUTO" size="10" value=""/>  
  190.         <br><br>  
  191.           
  192.         <label for="r_user">REDIS_OFFLINE_MESSAGE:</label>  
  193.         <input type="hidden" id="r_om_name" name="REDIS_OFFLINE_MESSAGE" value="REDIS_OFFLINE_MESSAGE"/>  
  194.         <input type="text" id="r_om_ip" name="REDIS_OFFLINE_MESSAGE_IP" size="20" value=""/>  
  195.         <label for="r_port">port:</label>  
  196.         <input type="text" id="r_om_port" name="REDIS_OFFLINE_MESSAGE_PORT" size="5" value=""/>  
  197.         <label for="r_auto">auto:</label>  
  198.         <input type="text" name="REDIS_OFFLINE_MESSAGE_AUTO" size="10" value=""/>  
  199.         <br><br>  
  200.           
  201.         <label for="r_user">REDIS_CHAT_MESSAGE:</label>  
  202.         <input type="hidden" id="r_cm_name" name="REDIS_CHAT_MESSAGE" value="REDIS_CHAT_MESSAGE"/>  
  203.         <input type="text" id="r_cm_ip" name="REDIS_CHAT_MESSAGE_IP" size="20" value=""/>  
  204.         <label for="r_port">port:</label>  
  205.         <input type="text" id="r_cm_port" name="REDIS_CHAT_MESSAGE_PORT" size="5" value=""/>  
  206.         <label for="r_auto">auto:</label>  
  207.         <input type="text" name="REDIS_CHAT_MESSAGE_AUTO" size="10" value=""/>  
  208.         <br><br>  
  209.           
  210.         <label for="r_user">REDIS_SEARCH:</label>  
  211.         <input type="hidden" id="r_rs_name" name="REDIS_SEARCH" value="REDIS_SEARCH"/>  
  212.         <input type="text" id="r_rs_ip" name="REDIS_SEARCH_IP" size="20" value=""/>  
  213.         <label for="r_port">port:</label>  
  214.         <input type="text" id="r_rs_port" name="REDIS_SEARCH_PORT" size="5" value=""/>  
  215.         <label for="r_auto">auto:</label>  
  216.         <input type="text" name="REDIS_SEARCH_AUTO" size="10" value=""/>  
  217.         <br><br>  
  218.           
  219.         <% } %>  
  220.         <% if (rcList.size() >= 1) { %>  
  221.             <% for (RedisConfig cr : rcList) { %>  
  222.                 <label for="r_user"><%=cr.getName() %></label>  
  223.                 <input type="hidden" name="<%=cr.getName() %>" value="<%=cr.getName() %>"/>  
  224.                 <input type="text" name="<%=cr.getName() %>_IP" size="20" value="<%=cr.getIp() %>"/>  
  225.                 <label for="r_port">port:</label>  
  226.                 <input type="text" name="<%=cr.getName() %>_PORT" size="5" value="<%=cr.getPort() %>"/>  
  227.                 <label for="r_auto">auto:</label>  
  228.                 <input type="text" name="<%=cr.getName() %>_AUTO" size="10" value="<%=cr.getAuto() %>"/>  
  229.                 <br>  
  230.                 <input type="button" value="initialize data" onclick="window.location.href='redis-service.jsp?initdata=<%=cr.getName() %>'; return false;"/>  
  231.                 <input type="button" value="destroy data" onclick="window.location.href='redis-service.jsp?deldata=<%=cr.getName() %>'; return false;"/>  
  232.                 <br><br>  
  233.             <%} %>  
  234.         <% } %>  
  235.     </ul>  
  236.     </div>  
  237. </fieldset>  
  238.   
  239. <br><br>  
  240.   
  241. <input type="submit" value="Save Settings">  
  242. <input type="hidden" name="initdata" value=""/>  
  243. </form>  
  244.   
  245. </body>  
  246. </html>  

Plugin.xml

[html]  view plain  copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <plugin>  
  3.     <class>com.montnets.redis.plugin.RedisServicePlugin</class>  
  4.     <name>Redis Service</name>  
  5.     <description>Redis distributed cache</description>  
  6.     <author>HuWenFeng</author>  
  7.     <version>1.3.3</version>  
  8.     <date>17/1/2014</date>  
  9.     <minServerVersion>3.8.2</minServerVersion>  
  10.       
  11.     <adminconsole>          
  12.         <tab id="tab-redis"  name="Redis"  url="redis-service.jsp">  
  13.             <sidebar id="sidebar-redis-settings"  name="Redis Service" >  
  14.                 <item id="redis-service" name="Redis Service" url="redis-service.jsp"  
  15.                      description="Redis distributed cache" />  
  16.             </sidebar>  
  17.         </tab>  
  18.     </adminconsole>  
  19. </plugin>  

这里只简单贴出了用户这类的相关数据的预加载。

下面开始具体讲讲基于Redis数据的几大分类。这里这里主要拿用户和消息这两大块具体来说说openfire基于redis的优化。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值