session 存储的时候使用 hession 的序列化,然后通过调用 jedis的 api 存放session 数据。这个类应该是很容易理解的,当然具体你用 redis 还是 memcached 这个随意了。 至此,一个基本的分布式 session 就实现了。它的本质是加一个拦截器然后把 HttpServletRequest 替换成自己定义了,j2直播,然后覆盖掉 getSession 方法,最后用一个我自己定义的 HttpSession 实现来完成各种操作。 总结 上述代码只是保留了最基本的实现,我们也可以继续优化封装,添加更多的功能。下面笔者以减少用户与分布式缓存机器的通信次数的优化为例,供大家参考。 从 DistributionSessionImpl 中我们可以看出,每次 setAttribute 和removeAttribute 数据都会同步到分布式缓存,这个实际上是没有必要的,虽说分布式缓存和我们的 server 虽然是在内网中通信,但是来回的次数会增加其时间损耗。 我们不能保证把一个用户的请求一直路由到同一台机器上,但是能够保证一次 request 在一台机器上,我们可以在用户的一次请求结束后把这个用户的 Session 数据同步到分布式缓存当中,以减少了与分布式缓存机器的通信次数。 (责任编辑:本港台直播) |