Redis实现,分布式Session共享

依赖 不指定版本防止冲突 直接用版本依赖

XML 复制代码
 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
//直接使用依赖的版本
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.session/spring-session-data-redis -->
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
    <dependencies>

yml文件配置

配置类 解决 Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' 报错 我解决了好长时间,后面有具体的redis配置细节

java 复制代码
@Configuration
public class RedisHttpSessionConfig {

    /**
     *  解决redis集群环境没有开启Keyspace notifications导致的
     *
     *  Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defined in class path resource
     *
     * */
    @Bean
    public static ConfigureRedisAction configureRedisAction() {
        return ConfigureRedisAction.NO_OP;
    }
}

启动两个客户端,8080端口 9000端口 调用接口

8080端口请求登录 后端记录登陆状态

9090端口拿到登陆状态

查看redis存储数据,redis实现session共享成功

配置细节

redis文档 根目录下 redis.conf

1、文件将里面的daemonize no 改成 yes,让服务在后台启动

2、文件将里面的requirepass改成自己的密码,此密码为以后客户端验证身份使用

3、文件里面的bind,修改为指定的IP地址即为只允许该IP地址访问,注释即为允许所有主机访问

**4、文件里面的protected-mode改为no,同意远程连接访问
5、**redis集群环境没有开启Keyspace notifications 上面配置类解决了这个问题 这里可以忽略

防火墙开启,开放redis端口或者其他服务的端口

关闭防火墙

java 复制代码
systemctl stop firewalld

开启防火墙

java 复制代码
systemctl start firewalld

开放指定端口

java 复制代码
firewall-cmd --zone=public --add-port=6379/tcp --permanent

关闭指定接口

java 复制代码
firewall-cmd --zone=public --remove-port=6379/tcp --permanent

重新加载防火墙配置

java 复制代码
firewall-cmd --reload

业务代码实现接口

java 复制代码
 /**
     * 用户登录
     *
     * @param userLoginRequest
     * @param request
     * @return
     */
    @PostMapping("/login")
    public BaseResponse<User> userLogin(@RequestBody UserLoginRequest userLoginRequest, HttpServletRequest request) {
        if (userLoginRequest == null) {
            return ResultUtils.error(ErrorCode.PARAMS_ERROR);
        }
        String userAccount = userLoginRequest.getUserAccount();
        String userPassword = userLoginRequest.getUserPassword();
        if (StringUtils.isAnyBlank(userAccount, userPassword)) {
            return ResultUtils.error(ErrorCode.PARAMS_ERROR);
        }
        User user = userService.userLogin(userAccount, userPassword, request);
        return ResultUtils.success(user);
    }
实现类添加对session的保存 自动保存在redis中
java 复制代码
  /**
     * 用户登录
     *
     * @param userAccount  用户账户
     * @param userPassword 用户密码
     * @param request
     * @return 脱敏后的用户信息
     */
    @Override
    public User userLogin(String userAccount, String userPassword, HttpServletRequest request) {
      .....
        // 4. 记录用户的登录态
        request.getSession().setAttribute(USER_LOGIN_STATE, safetyUser);
        return safetyUser;
    }
相关推荐
WeiQ_11 分钟前
解决phpstudy 8.x软件中php8.2.9没有redis扩展的问题
数据库·redis·缓存
suuijbd4 小时前
SpringCloud+Netty集群即时通讯项目
spring boot·分布式·spring cloud·java-rabbitmq·java-zookeeper
DashVector5 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
KYGALYX5 小时前
在Linux中备份msyql数据库和表的详细操作
linux·运维·数据库
檀越剑指大厂6 小时前
金仓KReplay:定义数据库平滑迁移新标准
数据库
努力成为一个程序猿.6 小时前
【Flink】FlinkSQL-动态表和持续查询概念
大数据·数据库·flink
一叶飘零_sweeeet6 小时前
幂等性 VS 分布式锁:分布式系统一致性的两大护法 —— 从原理到实战的深度剖析
分布式·分布式锁·接口幂等
毕设十刻7 小时前
基于Vue的学分预警系统98k51(程序 + 源码 + 数据库 + 调试部署 + 开发环境配置),配套论文文档字数达万字以上,文末可获取,系统界面展示置于文末
前端·数据库·vue.js
陈果然DeepVersion7 小时前
Java大厂面试真题:Spring Boot+微服务+AI智能客服三轮技术拷问实录(六)
java·spring boot·redis·微服务·面试题·rag·ai智能客服
更深兼春远7 小时前
Spark on Yarn安装部署
大数据·分布式·spark