【问题标题】:Unable to store session in Redis using Java Spring Boot Session Data Redis无法使用 Java Spring Boot Session Data Redis 在 Redis 中存储会话
【发布时间】:2018-12-16 04:23:25
【问题描述】:

我认为我在 Redis 中保存会话信息时遇到问题。我尝试按照关于spring-session-data-redis 的说明进行操作,但是当我开始请求时,我在redis 中找不到任何会话信息。以下是我的代码和配置。

application.properties 文件:

spring.session.store-type=redis
spring.session.redis.flush-mode= on-save
spring.session.redis.namespace= spring:session
spring.redis.host= 10.10.10.10
spring.redis.port=10000

pom.xml:

<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.0</version>
    <type>jar</type>
</dependency>

应用配置类:

@Configuration
@EnableRedisHttpSession
@PropertySource("application.properties")
public class AppConfig {

    @Value("${spring.redis.host}")
    private String redisHostName;

    @Value("${spring.redis.port}")
    private int redisPort;

    @Bean
    JedisConnectionFactory jedisConnectionFactory() {
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration(
                redisHostName, redisPort);
        return new JedisConnectionFactory(redisStandaloneConfiguration);
    }
}

还有我的示例获取请求控制器:

// test only
    @CrossOrigin
    @GetMapping(value = "/test/test")
    public String justTest(HttpServletRequest request) {
        HttpSession session = request.getSession();
        session.setAttribute("sessionId", "ssssss");

        String value = (String) session.getAttribute("sessionId").toString();
        return value;
    }

我错过了什么吗? spring-session-data-redis 应该自动将会话存储到 Redis,但它似乎没有那样做。我需要spring-session 依赖和spring-data-redis 依赖吗? redis连接没问题,我设置为监听所有接口。

发起请求时好像可以检索到会话ID,但是为什么会话没有插入到Redis中?

【问题讨论】:

  • 您的问题解决了吗?我面临同样的问题,我从 Spring Boot 中浏览示例项目以寻求解决方案
  • 嗨@billcyz,你的问题解决了吗?我遇到了同样的情况并寻找答案。 stackoverflow.com/questions/63326384/…

标签: java spring-boot session redis


【解决方案1】:

spring.session.redis.flush-mode= IMMEDIATE

/**
     * Flush mode for the Redis sessions. The default is {@code ON_SAVE} which only
     * updates the backing Redis when {@link SessionRepository#save(Session)} is invoked.
     * In a web environment this happens just before the HTTP response is committed.
     * <p>
     * Setting the value to {@code IMMEDIATE} will ensure that the any updates to the
     * Session are immediately written to the Redis instance.
     * @return the {@link RedisFlushMode} to use
     * @since 1.1

Link to docs

【讨论】:

  • 你能解释一下你的答案吗?
  • spring.session.redis.flush-mode= on-save,将在提交 HTTP 响应之前保存数据。
猜你喜欢
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-22
  • 2015-12-23
  • 2021-01-06
  • 2017-06-12
  • 1970-01-01
相关资源
最近更新 更多