这里有新鲜出炉的 Redis 官方指南,程序狗速度看过来!
Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。
本篇文章主要介绍了 Spring Boot 项目利用 Redis 实现 session 管理实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在现代网络服务中,session(会话)不得不说是非常重要也是一定要实现的概念,因此在 web 后台开发中,对 session 的管理和维护是必须要实现的组件。这篇文章主要是介绍如何在 Spring Boot 项目中加入 redis 来实现对 session 的存储与管理。
1. 利用 Spring Initializr 来新建一个 spring boot 项目
2. 在 pom.xml 中添加 redis 和 session 的相关依赖。项目生成的时候虽然也会自动生成父依赖,但是 1.5.3 版本的 spring boot 的 redis 相关依赖有可能不能够正常工作,笔者自行在 maven repository 找到了比较稳定的版本如下方代码所示
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-web</artifactId>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- <version>1.5.2.RELEASE</version>
- </dependency>
- <dependency>
- <groupId>org.springframework.session</groupId>
- <artifactId>spring-session-data-redis</artifactId>
- <version>1.3.0.RELEASE</version>
- </dependency>
3. 在 application.properties 中添加 redis 数据库的相关配置。这里为了演示使用方法只添加了相对简单的配置,即设置了 session 存储的数据库类型、使用的数据库号、数据库地址和端口号。实战中还会对使用非默认数据库、数据库大小、数据库最大连接数、生存时长、是否写回磁盘等许多参数进行配置
- # Redis配置
- spring.session.store-type=redis
- spring.redis.database=0
- spring.redis.host=localhost
- spring.redis.port=6379
4. 编写一个测试的 controller 来验证是否能够正确地读写 session。这里的 controller 中,我判断了当前获取的 session 是否是新生成的。如果是,则输出成功创建一个 session 对象,并返回 session 的 id,然后在 session 中添加一个字段。如果 session 不是新生成的,即是已经存在的 session,则输出 session 是已经存在的并返回 session 的 id,然后再输出 session 中初次创建 session 保存的 key 所对应的 value
- @SpringBootApplication
- @EnableRedisHttpSession
- @RestController
- public class DemoApplication {
- private Logger logger = LoggerFactory.getLogger(this.getClass());
- public static void main(String[] args) {
- SpringApplication app = new SpringApplication(DemoApplication.class);
- app.setWebEnvironment(true);
- app.run(args);
- }
- @GetMapping("/hello")
- public ResponseEntity<?> hello(HttpSession session) {
- if (session.isNew()) {
- logger.info("Successfully creates a session ,the id of session :" + session.getId());
- session.setAttribute("key", "hello");
- } else {
- logger.info("session already exists in the server, the id of session :"+ session.getId());
- logger.info(session.getAttribute("key").toString());
- }
- return new ResponseEntity<>("Hello World", HttpStatus.OK);
- }
- }
5. 测试代码
首先运行 Redis 客户端
- redis - cli
查看当前数据库内容
- 127.0.0.1:6379> keys *
- (empty list or set)
运行 spring boot 项目
第一次浏览器访问 localhost:8080/hello,如下图所示则成功运行
查看 log 可以看到
- 2017-06-12 00:26:12.601 INFO 9580 — [nio-8080-exec-1]
- ication$$EnhancerBySpringCGLIB$$de942542 : Successfully creates a session ,the id of session :4368a535-9bfa-406b-975c-e58c2bca1e75
再次访问 localhost:8080/hello 时,查看 log 可以看到能够正确地从 redis 中取出存放在 session 中的某个 key 对应的值
- 2017-06-12 00:30:43.533 INFO 9580 — [nio-8080-exec-5]
- ication$$EnhancerBySpringCGLIB$$de942542 : session already exists in the server, the id of session :4368a535-9bfa-406b-975c-e58c2bca1e75
- 2017-06-12 00:30:43.533 INFO 9580 — [nio-8080-exec-5]
- ication$$EnhancerBySpringCGLIB$$de942542 : hello
来源: http://www.phperz.com/article/17/0825/338315.html