<artifactId>spring-session-core</artifactId>
是Spring Session库的核心组件,它允许Spring Boot应用程序持久化会话状态到不同的存储解决方案,如Redis(如你在引用[1]中看到的172.17.18.133:6379上的hget
操作)。
Spring Session的核心功能包括会话管理、跨域共享以及会话复制。当你集成spring-boot-starter-data-redis
与spring-boot-starter-web
时,Spring Boot自动配置了spring-session
以支持基于Redis的会话存储。例如,通过配置Redis服务器地址和端口(如spring.redis.host=172.17.18.133
和spring.redis.port=6379
),Spring Session可以将用户的会话信息保存到Redis中。
对于实际操作,你可以执行如下的REST API调用来设置或获取会话属性(引用[2]中的示例):
- 设置会话属性(通常用于登录后存储用户状态):
curl -X POST http://10.17.195.37:8090/springboot/session/setTestKey -d '{"key": "TestKey", "value": "Hello World!"}'
- 获取会话属性:
curl http://10.17.195.37:8090/springboot/session/getTestKey
这将返回存储在Redis中对应于TestKey
的值,即\"Hello World!\"
。
Spring Session 支持多种类型的会话存储,其中包括但不限于:
-
内存存储(In-memory):默认情况下,Spring Session 使用内存作为临时存储,这适合开发阶段或者测试环境,但不适用于生产环境。
-
数据库存储(Database):可以将会话数据持久化到关系型数据库,如 MySQL 或者 PostgreSQL,保证高可用性和数据持久性。
-
NoSQL存储(Redis):通过集成 Redis,可以利用其快速的读写性能和集群能力,提升会话管理效率。
-
Caching(缓存):例如 Ehcache 或 Hazelcast,可以在减少对后端数据库压力的同时,提高响应速度。
具体选择哪种存储取决于应用的需求,比如性能、可扩展性、安全性等因素。配置时可通过 spring.session.store-type
属性指定存储类型。
可靠性:
由于采用远程调用的方式,任何一个节点、网络出现问题,都将使得服务调用失败,随着微服务数量的增多,潜在故障点也将增多。
也就是没有充分的保障机制,则单点故障会大量增加。
运维要求高:
系统监控、高可用性、自动化技术
分布式复杂性:
网络延迟、系统容错、分布式事务
部署依赖性强:
服务依赖、多版本问题
性能(服务间通讯成本高):
无状态性、进程间调用、跨网络调用
数据一致性:
分布式事务管理需要跨越多个节点来保证数据的瞬时一致性,因此比起传统的单体架构的事务,成本要高得多。另外,在分布式系统中,通常会考虑通过数据的最终一致性来解决数据瞬时一致带来的系统不可用。
重复开发:
微服务理念崇尚每个微服务作为一个产品看待,有自己的团队开发,甚至可以有自己完全不同的技术、框架,那么与其他微服务团队的技术共享就产生了矛盾,重复开发的工作即产生了。
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class