您的位置:首页 > 数据库 > Redis

springboot系列之session共享,redis查询缓存

2019-07-22 00:18 555 查看

springboot系列之session共享,redis查询缓存

  • redis查询缓存
  • 简介

    分布式系统中,Session 共享有很多的解决方案,其中托管到缓存中应该是最常用的方案之一
    Spring Session 提供了一套创建和管理 Servlet HttpSession 的方案。Spring Session 提供了集群 Session(Clustered Sessions)功能,默认采用外置的 Redis 来存储 Session 数据,以此来解决 Session 共享的问题。

    session共享如何使用

    -引入依赖

    <dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    </dependency>
    • Session 配置:
    @Configuration
    @EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
    public class SessionConfig {
    }

    maxInactiveIntervalInSeconds: 设置 Session 失效时间,使用 Redis Session 之后,原 Spring Boot 的 server.session.timeout 属性不再生效。

    • 测试
    @RequestMapping("/uid")
    String uid(HttpSession session) {
    UUID uid = (UUID) session.getAttribute("uid");
    if (uid == null) {
    uid = UUID.randomUUID();
    }
    session.setAttribute("uid", uid);
    return session.getId();
    }

    登录 Redis 输入 keys ‘sessions’

    t<spring:session:sessions:db031986-8ecc-48d6-b471-b137a3ed6bc4
    t(spring:session:expirations:1472976480000

    其中 1472976480000 为失效时间,意思是这个时间后 Session 失效,db031986-8ecc-48d6-b471-b137a3ed6bc4 为 sessionId,登录 http://localhost:8080/uid 发现会一致,就说明 Session 已经在 Redis 里面进行有效的管理了。

    按照上面的步骤在另一个项目中再次配置一次,启动后自动就进行了 Session 共享。

    redis查询缓存

    • 添加 cache 的配置类
    @Configuration
    @EnableCaching
    public class RedisConfig extends CachingConfigurerSupport{
    
    @Bean
    public KeyGenerator keyGenerator() {
    return new KeyGenerator() {
    @Override
    public Object generate(Object target, Method method, Object... params) {
    StringBuilder sb = new StringBuilder();
    sb.append(target.getClass().getName());
    sb.append(method.getName());
    for (Object obj : params) {
    sb.append(obj.toString());
    }
    return sb.toString();
    }
    };
    }
    }
    • 自动根据方法生成缓存
    @Cacheable(value="user-key")
    public User getUser() {
    User user=new User();
    user.setName("tets");
    user.setSex("boy");
    System.out.println("若下面没出现“无缓存的时候调用”字样且能打印出数据表示测试成功");
    return user;
    }

    其中 value 的值就是缓存到 Redis 中的 key

    源码:
    链接:https://pan.baidu.com/s/1ioTfYa7lSjTcafAZJJ90zw
    提取码:ytgy

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: