1. 程式人生 > 其它 >SpringBoot中使用Redis整合專案選單功能

SpringBoot中使用Redis整合專案選單功能

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。