SpringBoot中使用Redis整合專案選單功能
阿新 • • 發佈:2021-09-03
SpringBoot中使用Redis整合專案選單功能
後臺管理系統的選單不經常變化,但需要頻繁讀取和渲染,所以可以將選單放在Redis裡面去加快讀取速度。
1.在pom中新增redis依賴
<!--spring data redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--common-pool2 物件池依賴--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
2.在yml中進行簡單的配置
redis: # 超時時間 timeout: 10000ms # 伺服器地址 host: 127.0.0.1 # 伺服器埠 port: 6379 database: 0 lettuce: pool: # 連線池最大連線數 預設8 ,負數表示沒有限制 max-active: 1024 # 最大連線阻塞等待時間,預設-1 max-wait: 10000ms # 最大空閒連線 max-idle: 200 # 最小空閒連線 min-idle: 5
3.設定序列化,在配置類中新建RedisConfig配置類
@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object>redisTemplate(RedisConnectionFactory connectionFactory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>();
//String和HASH型別key和value序列器
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(connectionFactory);
return redisTemplate;
}
}
4.在服務實現類中設定redis,從redis獲取選單資料 如果為空從資料庫獲取
nteger adminID = ((Admin) SecurityContextHolder.getContext(). getAuthentication().getPrincipal()).getId(); ValueOperations<String, Object> valueOperations = redisTemplate.opsForValue(); //從redis獲取選單資料 如果為空從資料庫獲取 List<Menu> menus = (List<Menu>) valueOperations.get("menu_"+adminID); if (CollectionUtils.isEmpty(menus)){ menus = menuMapper.getMenusByAdminId(adminID); //將資料設定到redis中 valueOperations.set("menu_"+adminID,menus); } return menus;
如果修改選單時,更新增刪,需要把redis清空,查詢後再放入redis。