基于Redis的分布式会话集成实践(redis集成分布式会话)
Redis是一款高效稳定的内存key-value存储,可以用于mysql数据库代替,在实时的计算及应用场景上,由于Redis的高性能以及其工具性,使得一些分布式会话管理的实践可以利用Redis存储会话数据,不仅减少了数据库的压力,而且可以提高系统的可用性,本文将要介绍如何用Redis参与分布式会话集成以及实践。
实际应用场景下,由于web架构结构的不同,Redis内存可以支持多语言,以及各种不同的开发框架下都可以应用到新的分布式会话集成中。下面介绍基于Redis的分布式会话集成实践。
为了支持分布式会话,需要在每个服务器上预先安装相应的Redis服务器,可以使用Redis官方提供的安装包,也可以使用系统自带的安装包,为了确保Redis正常运行,可以在crontab中设置每隔一段时间检查一次Redis运行状态。
接着,在应用架构中需要把Redis作为分布式存储,则需要一个客户端来和Redis服务器进行交互,典型地,使用Java客户端 Jedis 和 Redis服务器交互,本实践中使用如下代码:
Index.java
“`java
public class Index {
public static void mn(String[] args) {
Jedis jedis = new Jedis(“host”);
jedis.set(“session”, “this is a session string”);
String s = jedis.get(“session”);
System.out.println(s);
}
}
紧接着,使用其他合适的技术,如Servlet Filter、Cookie或URL Rewriting,从而把session ID放入每个Http Request当中,并且从Redis中找到对应的会话session string的内容:
SessionFilter.java```java
public class SessionFilter implements javax.servlet.Filter { private Jedis jedis;
public void doFilter(ServletRequest request, ServletResponse response, FilterChn chn) throws IOException, ServletException {
String session_id = request.getParameter("session_id"); String session = jedis.get(session_id);
//对session字符串进行处理 //....
chn.doFilter(request, response); }
... }
在每次客户端发起请求后,将session string回写到Redis中,以保证它的最新状态,并且在超时结束后应该从Redis中删除该session,释放资源,如下所示:
Index.java
“`java
public class Index {
public static void mn(String[] args) {
//….
//redis.setex() 方法,设置session活动之后超时时间
jedis.setex(“session” + sessionId, 60, s);
}
}
以上展示的就是在支持分布式会话集成的实践中,基于Redis的实现,从而减轻了数据库的压力并增加了系统可用性。