1 Star 3 Fork 1

凌康 / final-session

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
03.redis.md 2.61 KB
一键复制 编辑 原始数据 按行查看 历史

集群共享会话:session存储于redis中

添加依赖

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>5.1.2</version>
</dependency>

处理类

import redis.clients.jedis.Jedis;
import top.lingkang.finalsession.FinalSessionConfig;
import top.lingkang.finalsession.core.FinalRepository;
import top.lingkang.finalsession.javax.FinalSession;
import top.lingkang.finalsession.utils.SerializationUtils;

import java.io.IOException;

/**
 * 自定义redis存储session
 *
 * @author lingkang
 * Created by 2024/3/10
 */
public class FinalRepositoryRedis implements FinalRepository<FinalSession> {
    private Jedis jedis;

    @Override
    public void initProperties(FinalSessionConfig config) {
        // 使用jedis或者使用 spring提供的redisTemplate
        jedis = new Jedis("localhost", 6379);
        Runtime.getRuntime().addShutdownHook(new Thread(() -> jedis.disconnect()));
    }

    @Override
    public FinalSession getSession(String id) {
        try {
            byte[] bytes = jedis.get(id.getBytes());
            if (bytes == null)
                return null;
            // 您也可以使用其他序列化工具
            return (FinalSession) SerializationUtils.unSerialization(bytes);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void setSession(String id, FinalSession session) {
        try {
            // 您也可以使用其他序列化工具
            byte[] serialization = SerializationUtils.serialization(session);
            jedis.set(id.getBytes(), serialization);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    @Override
    public void deleteSession(String id) {
        jedis.del(id.getBytes());
    }

    @Override
    public void destroy() {
        jedis.disconnect();
    }
}

配置

@Configuration
@Order(-1995)
public class MySessionConfigRedis extends FinalSessionFilter {
    @Override
    protected void configurer(FinalSessionConfig config) {
        // 使用redis存储session
        config.setRepository(new FinalRepositoryRedis());
    }
}

至此,您可以愉快地使用多节点集群共享session了

1
https://gitee.com/lingkang_top/final-session.git
git@gitee.com:lingkang_top/final-session.git
lingkang_top
final-session
final-session
master

搜索帮助