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

SpringBoot整合Redis使用@Cacheable和RedisTemplate

 更新時(shí)間:2022年07月18日 09:19:54   作者:No Bug  
本文主要介紹了SpringBoot整合Redis使用@Cacheable和RedisTemplate,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

對之前網(wǎng)站做了一些很簡單的優(yōu)化,給用戶列表加了一個(gè)分頁功能。

分頁就更好考慮加載速度,如果換一頁就要等幾秒,那體驗(yàn)感是非常差的。

因此想到了加一個(gè)redis緩存。

springboot整合redis有兩種方式:

  • 一、使用注解,@EnableCaching @Cacheable . . . 等
  • 二、使用RedisTemplate

兩者都能操作緩存,使用RedisTemplate 操作肯定是比使用注解靈活、方便。但是從理論上來講注解方式速度應(yīng)該更快,因?yàn)槭褂米⒔馊绻诰彺嬷杏芯椭苯訌木彺嬷腥?,不用進(jìn)入方法。而RedisTemplate 必須進(jìn)入方法,而且執(zhí)行寫的邏輯判斷。

下面記錄一下我給分頁做緩存的思路,肯定有很多不好的地方,希望大家可以給我指出。

業(yè)務(wù)場景是后臺管理系統(tǒng),不用過于注重實(shí)時(shí)數(shù)據(jù)刷新,就設(shè)置一個(gè)小時(shí)過期。

我的思路是:

 第一次加載頁面,就從數(shù)據(jù)庫把前面四頁的數(shù)據(jù)從數(shù)據(jù)庫查詢出來,這樣第一次稍微多等一下,后面換頁幾乎不用等待,這樣體驗(yàn)比較好。然后每次換頁都換查看有沒有在緩存中,沒用就加入緩存。

@RequestMapping("/appUser/{currentPage}")
public R<String> getTableData1(@PathVariable int currentPage) {
    //第一次請求 前面幾頁用到的概率更大  把后面三頁存入redis 減少后面分頁請求的時(shí)間  以后每次加載頁面都把那頁放入redis
    // 設(shè)置一個(gè)小時(shí)過期
    Page<AppUser> appUserPage = new Page<AppUser>(currentPage, 12);
    if (currentPage == 1 && !redisTemplate.hasKey(1)) {
        for (int i = 1; i < 5; i++) {
            Page<AppUser> redisPage = new Page<AppUser>(i, 12);
            redisTemplate.opsForValue().set(i, appUserServiceInterface.page(redisPage), 1, TimeUnit.HOURS);
        }
    } else if (!redisTemplate.hasKey(currentPage)) {
        redisTemplate.opsForValue().set(currentPage, appUserServiceInterface.page(appUserPage), 1, TimeUnit.HOURS);
        return R.success((Page<AppUser>) redisTemplate.opsForValue().get(currentPage));
    } else if (redisTemplate.hasKey(currentPage)) {
        return R.success((Page<AppUser>) redisTemplate.opsForValue().get(currentPage));
    }
    return R.success(appUserServiceInterface.page(appUserPage));
}

數(shù)據(jù)統(tǒng)計(jì)那塊我又試了試注解。

先要在啟動加上 @EnableCaching注解 

注解使用就簡單,在方法上加上@Cacheable 就行,執(zhí)行方法前會查詢r(jià)edis緩存是否有對應(yīng)的key,有就直接取值,沒有就執(zhí)行方法。

value = "appUserData" 是緩存區(qū)的名字 , key是鍵的名字 。

以下的鍵值就是 appUserData : : userArea

@RequestMapping ("/userArea")
@Cacheable(value = "appUserData",key ="'userArea'")
public R<String> area() {
? ? List<AppUser> userList = appUserServiceInterface.list();
? ? List<String> areaList = new ArrayList<>();

? ? for (AppUser appUser : userList) {
? ? ? ? areaList.add(appUser.getArea());
? ? }
? ? //放入map記錄每個(gè)月份出現(xiàn)的次數(shù)
? ? Map<String, Integer> areaTimes = new HashMap<>();
? ? for (String s : areaList) {
? ? ? ? if (!areaTimes.containsKey(s)) {
? ? ? ? ? ? areaTimes.put(s, 1);
? ? ? ? }else {
? ? ? ? ? ? areaTimes.put(s, areaTimes.get(s) + 1);
? ? ? ? }
? ? }
? ? //排序
? ? //自定義比較器
? ? Comparator<Map.Entry<String, Integer>> valCmp = new Comparator<Map.Entry<String, Integer>>() {
? ? ? ? @Override
? ? ? ? public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
? ? ? ? ? ? // TODO Auto-generated method stub
? ? ? ? ? ? return o2.getValue() - o1.getValue(); ?// 降序排序,如果想升序就反過來
? ? ? ? }
? ? };
? ? //將map轉(zhuǎn)成List,map的一組key,value對應(yīng)list一個(gè)存儲空間
? ? List<Map.Entry<String, Integer>> mapList = new ArrayList<Map.Entry<String, Integer>>(areaTimes.entrySet()); //傳入maps實(shí)體
? ? Collections.sort(mapList, valCmp);

? ? //取前8
? ? int len = mapList.size();
? ? for (int i = 0; i < len-8; i++) {
? ? ? ? mapList.remove(8);
? ? }

? ? Map<String, String> resMap = new HashMap<>();
? ? for (Map.Entry<String, Integer> m : mapList) {
? ? ? ? resMap.put(m.getKey(), m.getValue().toString());
? ? }
? ? return R.success(resMap);
}

其他注解:

  • @CachePut
  • @Caching
  • @CacheEvict

 到此這篇關(guān)于SpringBoot整合Redis使用@Cacheable和RedisTemplate的文章就介紹到這了,更多相關(guān)SpringBoot整合Redis內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • IDEA搭建Maven模塊化項(xiàng)目的實(shí)現(xiàn)

    IDEA搭建Maven模塊化項(xiàng)目的實(shí)現(xiàn)

    本文主要介紹了IDEA搭建Maven模塊化項(xiàng)目的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java實(shí)現(xiàn)輸出數(shù)字三角形實(shí)例代碼

    Java實(shí)現(xiàn)輸出數(shù)字三角形實(shí)例代碼

    大家好,本篇文章主要講的是Java實(shí)現(xiàn)輸出三角形實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Docker 部署 SpringBoot 項(xiàng)目整合 Redis 鏡像做訪問計(jì)數(shù)示例代碼

    Docker 部署 SpringBoot 項(xiàng)目整合 Redis 鏡像做訪問計(jì)數(shù)示例代碼

    這篇文章主要介紹了Docker 部署 SpringBoot 項(xiàng)目整合 Redis 鏡像做訪問計(jì)數(shù)Demo,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • IDEA打包的兩種方式及注意事項(xiàng)說明

    IDEA打包的兩種方式及注意事項(xiàng)說明

    這篇文章主要介紹了IDEA打包的兩種方式及注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot中HTTP連接池的配置與優(yōu)化

    SpringBoot中HTTP連接池的配置與優(yōu)化

    這篇文章主要為大家詳細(xì)介紹了SpringBoot中HTTP連接池的配置與優(yōu)化的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-05-05
  • java實(shí)現(xiàn)客戶管理系統(tǒng)

    java實(shí)現(xiàn)客戶管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)客戶管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 如何在 Spring Boot 中配置和使用 CSRF 保護(hù)

    如何在 Spring Boot 中配置和使用 CSRF 保護(hù)

    CSRF是一種網(wǎng)絡(luò)攻擊,它利用已認(rèn)證用戶的身份來執(zhí)行未經(jīng)用戶同意的操作,Spring Boot 提供了內(nèi)置的 CSRF 保護(hù)機(jī)制,可以幫助您防止這種類型的攻擊,這篇文章主要介紹了Spring?Boot?中的?CSRF?保護(hù)配置的使用方法,需要的朋友可以參考下
    2023-09-09
  • 一起聊聊Java中13種鎖的實(shí)現(xiàn)方式

    一起聊聊Java中13種鎖的實(shí)現(xiàn)方式

    分布式系統(tǒng)時(shí)代,線程并發(fā),資源搶占,"鎖"?慢慢變得很重要。那么常見的鎖都有哪些?本文就來和大家聊聊Java中13種鎖的實(shí)現(xiàn)方式,感興趣的可以了解一下
    2022-08-08
  • Java結(jié)合uniapp實(shí)現(xiàn)驗(yàn)證碼功能的示例詳解

    Java結(jié)合uniapp實(shí)現(xiàn)驗(yàn)證碼功能的示例詳解

    UniApp 是一個(gè)基于 Vue.js 的跨平臺應(yīng)用開發(fā)框架,允許開發(fā)者使用統(tǒng)一的代碼庫來構(gòu)建多平臺應(yīng)用,這篇文章將給大家介紹Java結(jié)合uniapp實(shí)現(xiàn)驗(yàn)證碼功能,文中通過詳細(xì)的代碼示例講解的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • 詳解springcloud之服務(wù)注冊與發(fā)現(xiàn)

    詳解springcloud之服務(wù)注冊與發(fā)現(xiàn)

    本次分享的是關(guān)于springcloud服務(wù)注冊與發(fā)現(xiàn)的內(nèi)容,將通過分別搭建服務(wù)中心,服務(wù)注冊,服務(wù)發(fā)現(xiàn)來說明,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2018-06-06

最新評論

翁源县| 丰台区| 恩施市| 大邑县| 台江县| 玉山县| 开原市| 西林县| 杭锦后旗| 全椒县| 高台县| 汉中市| 北安市| 黎平县| 吴桥县| 新泰市| 平泉县| 山阴县| 隆昌县| 岳普湖县| 达孜县| 阜城县| 清河县| 长汀县| 柘城县| 政和县| 龙江县| 呼伦贝尔市| 宁明县| 栾城县| 侯马市| 花莲县| 辉南县| 定边县| 万州区| 庆元县| 葵青区| 澳门| 盖州市| 湖北省| 霞浦县|