当会话过期或使用Spring Session Data Redis使会话失效时,如何从Redis中删除会话数据?

时间:2019-08-27 10:04:44

标签: spring redis key spring-data-redis spring-session

我一直在尝试设置存储在Redis中的会话数据的到期时间。因此,在那之后,不仅会话应该过期,而且会话数据也应从Redis中删除。

问题1:

我正在尝试在Redis上创建一个包含简单用户名(字符串)的会话。我很幸运地将会话数据存储在redis中,就像这样(只是一个例子):

  1. “ spring:session:sessions:expires:584036d4-adcd-4da4-8114-2cc2d0edb192”
  2. “ spring:session:expirations:1566879600000”
  3. “ spring:session:sessions:584036d4-adcd-4da4-8114-2cc2d0edb192”

我已使用@EnableRedisHttpSession批注通过spring会话支持HttpSession。 调用 request.getSession()。setAttribute(“ username”,“ Shakir”)时,以上数据将存储在Redis中。 但是,当我使用 request.getSession()。invalidate()使会话无效时。会话无效,但会话数据仍保留在Redis缓存中。

问题2:

其次,我想设置会话的到期时间。之后,不仅会话应终止,而且redis中的数据也应被删除。我没有在互联网上找到任何好的解决方案的运气。

这是一个简单的端点。这里的用户名和Redis都存储在会话中。

@PostMapping("/login")
    public String loginPost(User user , HttpServletRequest request) {
        request.getSession().setAttribute("username", user.getUsername());
        System.out.println("In login Post");
        return "redirect:profile";
    }

这是我用来连接到Redis的简单配置。

@Configuration
@EnableRedisHttpSession
public class Config {
    @Bean
    public static ConfigureRedisAction configureRedisAction() {
        return ConfigureRedisAction.NO_OP;
    }

    @Bean
    public LettuceConnectionFactory redisConnectionFactory() {
        String hostname = "localhost";
        int port = 6379;
        RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(hostname, port);
        return new LettuceConnectionFactory(configuration);
    }

0 个答案:

没有答案