最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Cache 整合 Redis 實現(xiàn)高效緩存的方法

 更新時間:2025年08月21日 10:00:14   作者:跟著豪哥學Java  
SpringCache是Spring框架的緩存抽象層,通過注解簡化緩存邏輯,支持Caffeine、EhCache、Redis等實現(xiàn),接下來通過本文給大家介紹Spring Cache整合Redis實現(xiàn)高效緩存的方法,感興趣的朋友跟隨小編一起看看吧

介紹

Spring Cache 是 Spring 框架提供的緩存抽象層,它簡化了在應用中添加緩存功能的過程,允許開發(fā)者通過注解方式輕松實現(xiàn)緩存邏輯,而無需關(guān)注具體的緩存實現(xiàn)細節(jié)。

  1. 緩存抽象:Spring Cache 不直接提供緩存實現(xiàn),而是定義了一套接口(如 Cache、CacheManager),支持多種緩存實現(xiàn)(如 Caffeine、EhCache、Redis 等)。
  2. 注解驅(qū)動:通過注解(如 @Cacheable、@CachePut、@CacheEvict)聲明緩存規(guī)則,無需手動編寫緩存邏輯。
  3. 透明集成:緩存操作與業(yè)務邏輯解耦,開發(fā)者只需關(guān)注業(yè)務代碼。

常用注解

@Cacheable
標記方法結(jié)果可被緩存。調(diào)用方法時,先檢查緩存:

@Cacheable(value = "users", key = "#id")
public User getUserById(Long id) {
    // 從數(shù)據(jù)庫查詢用戶
    return userRepository.findById(id);
}

若緩存存在,直接返回緩存值,不執(zhí)行方法。

若緩存不存在,執(zhí)行方法并將結(jié)果存入緩存。

@CachePut
保證方法執(zhí)行,并將結(jié)果更新到緩存(常用于更新操作)。

@CachePut(value = "users", key = "#user.id")
public User updateUser(User user) {
    return userRepository.save(user);
}

@CacheEvict
移除緩存條目(常用于刪除操作)。

@CacheEvict(value = "users", key = "#id")
public void deleteUser(Long id) {
    userRepository.deleteById(id);
}

@Caching
組合多個緩存注解(如同時更新和刪除緩存)。

@Caching(
    put = @CachePut(value = "users", key = "#user.id"),
    evict = @CacheEvict(value = "userList", allEntries = true)
)
public User saveUser(User user) {
    return userRepository.save(user);
}

@CacheConfig
在類級別統(tǒng)一配置緩存屬性(如 value、keyGenerator),簡化方法上的注解。

案例

  • 添加依賴(Maven):
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-cache</artifactId>
        </dependency>
  • 啟用緩存
    在啟動類添加 @EnableCaching 注解。
@SpringBootApplication
@EnableTransactionManagement //開啟注解方式的事務管理
@Slf4j
@EnableCaching//開啟緩存功能
public class SkyApplication {
    public static void main(String[] args) {
        SpringApplication.run(SkyApplication.class, args);
        log.info("server started");
    }
}
  • c端
    /**
     * 條件查詢
     *
     * @param categoryId
     * @return
     */
    @GetMapping("/list")
    @ApiOperation("根據(jù)分類id查詢套餐")
    @Cacheable(cacheNames = "setmealCache",key = "#categoryId")//key: setmealCache::categoryId
    public Result<List<Setmeal>> list(Long categoryId) {
        Setmeal setmeal = new Setmeal();
        setmeal.setCategoryId(categoryId);
        setmeal.setStatus(StatusConstant.ENABLE);

        List<Setmeal> list = setmealService.list(setmeal);
        return Result.success(list);
    }

  • 管理端
    /**
     * 新增套餐
     * @param setmealDTO
     * @return
     */
    @PostMapping
    @ApiOperation("新增套餐")
    @CacheEvict(cacheNames = "setmealCache",key = "#setmealDTO.categoryId")
    public Result save(@RequestBody SetmealDTO setmealDTO){
        log.info("新增套餐:{}",setmealDTO);
        setmealService.saveWithDish(setmealDTO);
        return Result.success();
    }
    /**
     * 刪除套餐
     * @param ids
     * @return
     */
    @DeleteMapping
    @ApiOperation("批量刪除套餐")
    @CacheEvict(cacheNames = "setmealCache",allEntries = true)
    public Result delete(@RequestParam List<Long> ids){
        log.info("批量刪除套餐:{}",ids);
        setmealService.deleteBatch(ids);
        return Result.success();
    }
    /**
     * 修改套餐起售停售狀態(tài)
     * @param status
     * @param id
     * @return
     */
    @PostMapping("/status/{status}")
    @ApiOperation("修改套餐起售停售狀態(tài)")
    @CacheEvict(cacheNames = "setmealCache",allEntries = true)
    public Result startOrStop(@PathVariable("status") Integer status, Long id){
        log.info("套餐起售或停售:{}",id);
        setmealService.startOrStop(status,id);
        return Result.success();
    }

注意事項

  • 緩存鍵生成:默認使用方法參數(shù)生成鍵,可通過 key 屬性自定義(SpEL 表達式),或配置 KeyGenerator。
  • 緩存穿透:可通過空值緩存(@Cacheable(unless = "#result == null"))避免。
  • 緩存更新:使用 @CachePut 確保緩存與數(shù)據(jù)源一致性,避免直接修改緩存。
  • 分布式緩存:在分布式系統(tǒng)中,推薦使用 Redis 等集中式緩存,避免本地緩存(如 Caffeine)的一致性問題。

通過 Spring Cache,開發(fā)者可以快速為應用添加緩存能力,提升系統(tǒng)性能,同時保持代碼簡潔易維護。

到此這篇關(guān)于Spring Cache 整合 Redis 實現(xiàn)高效緩存的文章就介紹到這了,更多相關(guān)Spring Cache Redis 高效緩存內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA配置碼云Gitee的使用詳解

    IDEA配置碼云Gitee的使用詳解

    這篇文章主要介紹了IDEA配置碼云Gitee的使用,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 詳解SpringBoot定時任務功能

    詳解SpringBoot定時任務功能

    這篇文章主要介紹了SpringBoot定時任務功能詳細解析,這次的功能開發(fā)過程中也算是對其內(nèi)涵的進一步了解,以后遇到定時任務的處理也更清晰,更有效率了,對SpringBoot定時任務相關(guān)知識感興趣的朋友一起看看吧
    2022-05-05
  • Spring核心容器IOC原理實例解析

    Spring核心容器IOC原理實例解析

    這篇文章主要介紹了Spring核心容器IOC原理實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Spring的CorsFilter會失效的原因及解決方法

    Spring的CorsFilter會失效的原因及解決方法

    眾所周知CorsFilter是Spring提供的跨域過濾器,我們可能會做以下的配置,基本上就是允許任何跨域請求,我利用Spring的CorsFilter做跨域操作但是出現(xiàn)報錯,接下來小編就給大家介紹一Spring的CorsFilter會失效的原因及解決方法,需要的朋友可以參考下
    2023-09-09
  • 詳解自定義SpringMVC的Http信息轉(zhuǎn)換器的使用

    詳解自定義SpringMVC的Http信息轉(zhuǎn)換器的使用

    這篇文章主要介紹了詳解自定義SpringMVC的Http信息轉(zhuǎn)換器的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • SpringBoot3.x循環(huán)依賴問題解決方案

    SpringBoot3.x循環(huán)依賴問題解決方案

    這篇文章主要介紹了SpringBoot3.x循環(huán)依賴的相關(guān)知識,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • 源碼解析Spring 數(shù)據(jù)庫異常抽理知識點總結(jié)

    源碼解析Spring 數(shù)據(jù)庫異常抽理知識點總結(jié)

    在本篇文章里小編給大家分享了關(guān)于源碼解析Spring 數(shù)據(jù)庫異常抽理知識點內(nèi)容,對此有需要的朋友們學習參考下。
    2019-05-05
  • Spring?+?ECharts實現(xiàn)數(shù)據(jù)可視化的案例詳解

    Spring?+?ECharts實現(xiàn)數(shù)據(jù)可視化的案例詳解

    Apache?ECharts是一個基于?JavaScript?的開源可視化圖表庫,在網(wǎng)頁上實現(xiàn)數(shù)據(jù)的可視化,非常好用,本文將通過一個簡單的demo來給大家介紹一下Spring?+?ECharts如何數(shù)據(jù)可視化,需要的朋友可以參考下
    2023-07-07
  • Spring常用注解及http數(shù)據(jù)轉(zhuǎn)換教程

    Spring常用注解及http數(shù)據(jù)轉(zhuǎn)換教程

    這篇文章主要為大家介紹了Spring常用注解及http數(shù)據(jù)轉(zhuǎn)換原理以及接收復雜嵌套對象參數(shù)與Http數(shù)據(jù)轉(zhuǎn)換的原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • Java?JWT實現(xiàn)跨域身份驗證方法詳解

    Java?JWT實現(xiàn)跨域身份驗證方法詳解

    JWT(JSON?Web?Token)是目前流行的跨域認證解決方案,是一個開放標準(RFC?7519),它定義了一種緊湊的、自包含的方式,用于作為JSON對象在各方之間安全地傳輸信息。本文將介紹JWT如何實現(xiàn)跨域身份驗證,感興趣的可以學習一下
    2022-01-01

最新評論

休宁县| 咸阳市| 灌云县| 临海市| 兴和县| 新干县| 昌图县| 柯坪县| 家居| 葵青区| 三原县| 京山县| 内江市| 蒙山县| 固安县| 台江县| 甘南县| 清远市| 永顺县| 墨玉县| 青铜峡市| 西安市| 奈曼旗| 宁陵县| 新和县| 临安市| 乌拉特前旗| 北海市| 马山县| 读书| 兴业县| 莱芜市| 福建省| 福鼎市| 蕲春县| 三门县| 滁州市| 锦州市| 鹤峰县| 福建省| 五家渠市|