javascript
springboot获取sessionid_Spring Boot 整合Redis, 用起来真简单!
點擊上方“Java技術前線”,選擇“置頂或者星標”
與你一起成長~
作者:java_老男孩?
https://blog.51cto.com/14230003/2368721
Redis 是目前業界使用最廣泛的內存數據存儲。相比 Memcached,Redis 支持更豐富的數據結構,例如 hashes, lists, sets 等,同時支持數據持久化。
除此之外,Redis 還提供一些類數據庫的特性,比如事務,HA,主從庫。可以說 Redis 兼具了緩存系統和數據庫的一些特性,因此有著豐富的應用場景。本文介紹 Redis 在 Spring Boot 中兩個典型的應用場景。
1、引入依賴包
<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-data-redisartifactId>dependency><dependency><groupId>org.apache.commonsgroupId><artifactId>commons-pool2artifactId>dependency>
Spring Boot 提供了對 Redis 集成的組件包:spring-boot-starter-data-redis,spring-boot-starter-data-redis依賴于spring-data-redis 和 lettuce 。
Spring Boot 1.0 默認使用的是 Jedis 客戶端,2.0 替換成 Lettuce,但如果你從 Spring Boot 1.5.X 切換過來,幾乎感受不大差異,這是因為 spring-boot-starter-data-redis 為我們隔離了其中的差異性。推薦:Spring Boot 2.x 新特性總結及遷移指南。
Lettuce 是一個可伸縮線程安全的 Redis 客戶端,多個線程可以共享同一個 RedisConnection,它利用優秀 netty NIO 框架來高效地管理多個連接。
2、添加配置文件
#?Redis數據庫索引(默認為0)
spring.redis.database=0??#?Redis服務器地址
spring.redis.host=localhost#?Redis服務器連接端口
spring.redis.port=6379??#?Redis服務器連接密碼(默認為空)
spring.redis.password=#?連接池最大連接數(使用負值表示沒有限制)?默認?8
spring.redis.lettuce.pool.max-active=8#?連接池最大阻塞等待時間(使用負值表示沒有限制)?默認?-1
spring.redis.lettuce.pool.max-wait=-1#?連接池中的最大空閑連接?默認?8
spring.redis.lettuce.pool.max-idle=8#?連接池中的最小空閑連接?默認?0
spring.redis.lettuce.pool.min-idle=0
3、添加 cache 的配置類
@Configuration@EnableCachingpublic?class?RedisConfig?extends?CachingConfigurerSupport{@Beanpublic?KeyGenerator?keyGenerator()?{return?new?KeyGenerator()?{@Overridepublic?Object?generate(Object?target,?Method?method,?Object...?params)?{
StringBuilder?sb?=?new?StringBuilder();
????????????????sb.append(target.getClass().getName());
????????????????sb.append(method.getName());for?(Object?obj?:?params)?{
????????????????????sb.append(obj.toString());
}return?sb.toString();
}
};
}
}
注意我們使用了注解:@EnableCaching來開啟緩存。
4、好了,接下來就可以直接使用了
@RunWith(SpringRunner.class)@SpringBootTestpublic?class?TestRedis?{@Autowiredprivate?StringRedisTemplate?stringRedisTemplate;@Autowiredprivate?RedisTemplate?redisTemplate;@Testpublic?void?test()?throws?Exception?{
????????stringRedisTemplate.opsForValue().set("aaa",?"111");
Assert.assertEquals("111",?stringRedisTemplate.opsForValue().get("aaa"));
}@Testpublic?void?testObj()?throws?Exception?{
User?user=new?User("aa@126.com",?"aa",?"aa123456",?"aa","123");
ValueOperations?operations=redisTemplate.opsForValue();
????????operations.set("com.neox",?user);
????????operations.set("com.neo.f",?user,1,?TimeUnit.SECONDS);
Thread.sleep(1000);boolean?exists=redisTemplate.hasKey("com.neo.f");if(exists){
System.out.println("exists?is?true");
}else{
System.out.println("exists?is?false");
}
}
}
以上都是手動使用的方式,如何在查找數據庫的時候自動使用緩存呢,看下面;
5、自動根據方法生成緩存
@RestControllerpublic?class?UserController?{@RequestMapping("/getUser")@Cacheable(value="user-key")public?User?getUser()?{
User?user=new?User("aa@126.com",?"aa",?"aa123456",?"aa","123");
System.out.println("若下面沒出現“無緩存的時候調用”字樣且能打印出數據表示測試成功");return?user;
}
}
其中 value 的值就是緩存到 Redis 中的 key
分布式系統中,Session 共享有很多的解決方案,其中托管到緩存中應該是最常用的方案之一,推薦:分布式Session共享解決方案。
Spring Session 官方說明
Spring Session provides an API and implementations for managing a user’s session information.
Spring Session 提供了一套創建和管理 Servlet HttpSession 的方案。Spring Session 提供了集群 Session(Clustered Sessions)功能,默認采用外置的 Redis 來存儲 Session 數據,以此來解決 Session 共享的問題。
如何使用
1、引入依賴
<dependency><groupId>org.springframework.sessiongroupId><artifactId>spring-session-data-redisartifactId>dependency>
2、Session 配置:
@Configuration@EnableRedisHttpSession(maxInactiveIntervalInSeconds?=?86400*30)public?class?SessionConfig?{
}
maxInactiveIntervalInSeconds: 設置 Session 失效時間,使用 Redis Session 之后,原 Spring Boot 的 server.session.timeout 屬性不再生效。
好了,這樣就配置好了,我們來測試一下
3、測試
添加測試方法獲取 sessionid
@RequestMapping("/uid")
String?uid(HttpSession?session)?{
????UUID?uid?=?(UUID)?session.getAttribute("uid");if?(uid?==?null)?{
????????uid?=?UUID.randomUUID();
}
????session.setAttribute("uid",?uid);return?session.getId();
}
登錄 Redis 輸入 keys 'sessions'
t<spring:session:sessions:db031986-8ecc-48d6-b471-b137a3ed6bc4t(spring:session:expirations:1472976480000
其中 1472976480000 為失效時間,意思是這個時間后 Session 失效,db031986-8ecc-48d6-b471-b137a3ed6bc4 為 sessionId,登錄 http://localhost:8080/uid 發現會一致,就說明 Session 已經在 Redis 里面進行有效的管理了。
其實就是按照上面的步驟在另一個項目中再次配置一次,啟動后自動就進行了 Session 共享。
關注Java技術棧微信公眾號,在后臺回復關鍵字:boot,可以獲取一份棧長整理的 Spring Boot 最新技術干貨。
-?end?-
用心分享面試知識,做有溫度的攻城獅
每天記得對自己說:你是最棒的!
往期推薦:
888G面試資源分享
Java經典面試題匯總
面試題:面試被問爛的 Spring IOC
面試題:Spring AOP是什么?你都拿它做什么?
面試題:SpringMVC工作原理詳解
? ? ? ? ? ? ? ? ? ? ?每一個“好看”,都是對我們最大的肯定!
總結
以上是生活随笔為你收集整理的springboot获取sessionid_Spring Boot 整合Redis, 用起来真简单!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 思源黑体ttf_模块模板 | 简单方法替
- 下一篇: 将python编程为c_使用Cython