session-缓存-分布式会话session共享、多节点部署session共享解决方案

来源:互联网 发布:淘宝客服绩效信息 编辑:程序博客网 时间:2024/06/06 00:55

  基于redis的session共享解决方案:

依赖pom包 spring-seesion-data-redis,实际该包只是将spring-data-redis 、spring-session、jedis(redis-clients) 做了个集合管理,如果项目已引入spring-data-redis、jedis,则直接引入spring-session即可。

可以为session共享所使用的redis单独做配置,即使用redis特定的实例。如果不用特定的连接,则直接在类加@EnableRedisHttpSession 即可

       注意:一定要合理配置好redis的连接配置参数,否则会报can note get a jedis from pool.

import org.apache.commons.lang.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;import redis.clients.jedis.JedisPoolConfig;/** * 开启session redis存储机制 * Created by  YeCongZhi on 2017/8/4. */@Configuration@EnableRedisHttpSession//maxInactiveIntervalInSeconds 默认是1800秒过期,这里测试修改为60秒//@EnableRedisHttpSession(maxInactiveIntervalInSeconds=60)public class RedisSessionConfig {    Logger logger = LoggerFactory.getLogger(getClass());    @Value("${spring.redis.host:}")    private String host;    @Value("${spring.redis.port:6379}")    private String port;    @Value("${spring.redis.timeout:3000}")    private String timeout;    @Value("${spring.redis.password:}")    private String password;    @Value("${spring.redis.default.expir:10}")    private String defaultExpir;    @Value("${redis.maxTotal:-1}")//最大连接数    private int maxTotal;    @Value("${redis.maxIdle:20}")//最大空闲连接数    private int maxIdle;    @Value("${redis.minIdle:10}")//最小空闲连接数    private int minIdle;    @Value("${redis.maxWaitMillis:-1}")//获取连接时的最大等待毫秒数    private Long maxWaitMillis;    @Value("${redis.testOnBorrow:false}")//在获取连接的时候检查有效性    private boolean testOnBorrow;    @Value("${redis.MinEvictableIdleTimeMillis:60000}")//多长时间后回收空闲连接    private Long MinEvictableIdleTimeMillis;    @Bean    public JedisConnectionFactory jedisConnectionFactory() {        JedisConnectionFactory factory = new JedisConnectionFactory();        factory.setHostName(host);        factory.setPort(Integer.parseInt(port));        factory.setTimeout(Integer.parseInt(timeout)); //设置连接超时时间        factory.setPassword(password);        JedisPoolConfig poolCofig = poolCofig(                maxTotal,maxIdle,minIdle,                maxWaitMillis,MinEvictableIdleTimeMillis,testOnBorrow);        factory.setPoolConfig(poolCofig);        /**初始化连接pool*/        factory.afterPropertiesSet();        return factory;    }    /**redis配置*/    public JedisPoolConfig poolCofig(            int maxTotal,int maxIdle, int minIdle,            long maxWaitMillis,long MinEvictableIdleTimeMillis, boolean testOnBorrow) {        JedisPoolConfig poolCofig = new JedisPoolConfig();        poolCofig.setMaxTotal(maxTotal);        poolCofig.setMaxIdle(maxIdle);        poolCofig.setMinIdle(minIdle);        poolCofig.setMaxWaitMillis(maxWaitMillis);        poolCofig.setMinEvictableIdleTimeMillis(MinEvictableIdleTimeMillis);        poolCofig.setTestOnBorrow(testOnBorrow);        return poolCofig;    }}

原创粉丝点击