SpringSession整合redis,解决分布式session问题 Spring Session是一个专注于解决session管理问题的项目,能够简单快速地集成到应用中,替代传统的HttpSession。其核心原理基于装饰者模式,通过`@EnableRedisHttpSession`注解导入配置类,实现对请求的拦截与处理。在每个请求经过`SessionRepositoryFilter`时,原生的HttpServletRequest和HttpServletResponse会被包装,并重写相关方法以调用自定义的session存储逻辑。使用Spring Session需要引入相应的依赖并配置Redis作为后端存储,同时可以通过自定义序列化器和CookieSerializer来扩展session的作用域及序列化方式。此外,通过简单的HTTP请求处理示例展示了如何在实际应用中保存和获取session信息。 2021-07-16 2321 0 java 总结 redis 分布式 微服务
分布式session 本文介绍了session的工作原理及其在分布式环境下的解决方案。session数据存储于服务端,通过客户端的jsessionId进行访问,但默认情况下session不可跨域。为了实现session在不同服务或集群间的共享,提出了几种方案:直接将信息存入cookie中(存在安全风险和大小限制)、session复制(效率低且不推荐)、基于哈希一致性算法分配特定机器处理请求(远程调用问题难以解决)以及使用Redis作为统一存储介质(目前较为流行的解决方案)。每种方法都有其优缺点,在实际应用时需根据具体需求选择合适的策略。 2021-07-16 1299 0 java 总结 redis 分布式
分布式锁Redisson Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, B 2021-07-02 1956 0 java 总结 锁 redis 分布式 微服务
本地缓存与分布式缓存 缓存在服务端编程当中,缓存主要是指将数据库的数据加载到内存中,之后对该数据的访问都在内存中完成,从而减少了对数据库的访问,解决了高并发场景中数据库容易成为性能瓶颈的问题;以及基于内存的访问速度高于磁盘的访问速度的原理(数据库读取数据一般需要从磁盘读取),提高了数据的访问速度和程序性能。本地缓存本地缓 2021-07-01 1193 0 java 总结 redis 分布式 微服务
lettuce堆外内存溢出bug 在进行压力测试时,可能会遇到堆外内存溢出(OutOfDirectMemoryError)的问题。这主要是由于Spring Boot 2.0之后默认使用的Redis客户端lettuce存在bug,导致Netty在处理网络通信时出现堆外内存溢出。Netty如果没有明确指定堆外内存大小,默认会使用Xms的值,可以通过设置-Dio.netty.maxDirectMemory来调整,但这不是根本解决办法。为了解决这一问题,建议升级Spring Boot版本或切换到使用Jedis作为Redis客户端。如果选择后者,需要在项目的依赖中排除lettuce-core,并添加jedis依赖。 2021-06-30 2134 0 java 问题 redis 分布式
Redis持久化 redis 提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)。RDB,简而言之,就是在不同的时间点,将 redis 存储的数据生成快照并存储到磁盘等介质上;AOF,则是换了一个角度来实现持久化,那就是将 redis 执行过的所有写指令记 2021-05-25 1092 0 总结 redis
docker安装redis(centos) # 下载redis镜像文件(可以指定版本docker pull redis:3.2,如果没有指定版本则默认下载最新版的MySQL)docker pull redis# 创建实例并启动mkdir -p /mydata/redis/conftouch /mydata/redis/conf/redis.c 2021-05-25 915 0 docker java 总结 redis
StringRedisTemplate和RedisTemplate的区别 本文介绍了`StringRedisTemplate`和`RedisTemplate`在操作Redis时的区别及用法。两者的主要区别在于序列化方式:`RedisTemplate`使用JDK序列化将数据转换为字节数组,而`StringRedisTemplate`则采用字符串序列化策略。此外,它们管理的数据不共通。文章详细列举了`RedisTemplate`中`opsForValue()`方法的多种用例,包括设置、获取、追加字符串等操作,并提供了`StringRedisTemplate`的一些基本用法示例。建议根据存储数据类型选择合适的模板:对于字符串数据推荐使用`StringRedisTemplate`;而对于复杂对象且希望直接从Redis取出对象的情况,则更适合选用`RedisTemplate`。最后,指出当遇到无法通过`RedisTemplate`正常读取非字节数组格式的数据问题时,可以尝试改用`StringRedisTemplate`解决。 2021-05-16 1013 0 java 总结 框架 redis