国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

redis緩存神器:@Cacheable注解

這篇具有很好參考價(jià)值的文章主要介紹了redis緩存神器:@Cacheable注解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

在之前的文章中,我們寫(xiě)了redis結(jié)合springboot做緩存分頁(yè)的方法:

在 Spring Boot 中結(jié)合 Redis 進(jìn)行緩存分頁(yè)數(shù)據(jù),可以通過(guò)以下步驟實(shí)現(xiàn):

  1. 在 pom.xml 文件中添加 Redis 相關(guān)依賴(lài):

<dependency>
????<groupId>org.springframework.boot</groupId>
????<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 在 application.properties 文件中配置 Redis 連接信息:

spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=
  1. 創(chuàng)建一個(gè) RedisTemplate 對(duì)象,用于操作 Redis 緩存:

@Configuration
public?class?RedisConfig?{

????@Bean
????public?RedisTemplate<String,?Object>?redisTemplate(RedisConnectionFactory?redisConnectionFactory)?{
????????RedisTemplate<String,?Object>?redisTemplate?=?new?RedisTemplate<>();
????????redisTemplate.setConnectionFactory(redisConnectionFactory);
????????redisTemplate.setKeySerializer(new?StringRedisSerializer());
????????redisTemplate.setValueSerializer(new?GenericJackson2JsonRedisSerializer());
????????return?redisTemplate;
????}
}
  1. 在 Service 層中,使用 RedisTemplate 對(duì)象進(jìn)行緩存操作。例如,對(duì)于分頁(yè)查詢(xún)操作,可以將查詢(xún)結(jié)果緩存到 Redis 中,下次查詢(xún)時(shí)先從 Redis 中獲取數(shù)據(jù),如果緩存中不存在,則進(jìn)行數(shù)據(jù)庫(kù)查詢(xún),并將查詢(xún)結(jié)果緩存到 Redis 中:

@Service
public?class?UserServiceImpl?implements?UserService?{

????@Autowired
????private?RedisTemplate<String,?Object>?redisTemplate;

????@Autowired
????private?UserDao?userDao;

????@Override
????public?List<User>?getUsersByPage(int?pageNum,?int?pageSize)?{
????????String?key?=?"user:page:"?+?pageNum?+?":"?+?pageSize;
????????List<User>?users?=?(List<User>)?redisTemplate.opsForValue().get(key);
????????if?(users?==?null)?{
????????????PageHelper.startPage(pageNum,?pageSize);
????????????users?=?userDao.getUsers();
????????????PageInfo<User>?pageInfo?=?new?PageInfo<>(users);
????????????redisTemplate.opsForValue().set(key,?pageInfo,?1,?TimeUnit.MINUTES);
????????}
????????return?users;
????}
}

在上述代碼中,使用了 PageHelper 插件進(jìn)行分頁(yè)查詢(xún),并將查詢(xún)結(jié)果緩存到 Redis 中,緩存時(shí)間為 1 分鐘。下次查詢(xún)時(shí),如果緩存中存在數(shù)據(jù),則直接從緩存中獲取,避免了頻繁查詢(xún)數(shù)據(jù)庫(kù)的操作。

以上就是 Spring Boot 結(jié)合 Redis 進(jìn)行緩存分頁(yè)數(shù)據(jù)的實(shí)現(xiàn)方法。需要注意的是,緩存的數(shù)據(jù)需要根據(jù)實(shí)際情況進(jìn)行設(shè)置過(guò)期時(shí)間,避免緩存數(shù)據(jù)過(guò)期后仍然被使用。

但是,以上代碼還是存在問(wèn)題的,如果page數(shù)據(jù)發(fā)生了變化怎么辦,redis獲取的還是老數(shù)據(jù)??!

所以,我們需要在數(shù)據(jù)更新的時(shí)候,也要更新緩存里面的數(shù)據(jù)。

這一節(jié)我們來(lái)嘮嘮怎么更新緩存和簡(jiǎn)化這些操作。

Spring Boot提供了一個(gè)注解@EnableCaching來(lái)啟用緩存功能。在啟用緩存功能后,可以使用注解來(lái)對(duì)某個(gè)方法進(jìn)行緩存。

  1. 首先,在pom.xml文件中添加redis依賴(lài):

<dependency>
????<groupId>org.springframework.boot</groupId>
????<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
  1. 在application.properties文件中配置redis連接信息:

spring.redis.host=127.0.0.1
spring.redis.port=6379
  1. 在啟動(dòng)類(lèi)上添加@EnableCaching注解,開(kāi)啟緩存功能:

@SpringBootApplication
@EnableCaching
public?class?Application?{
????public?static?void?main(String[]?args)?{
????????SpringApplication.run(Application.class,?args);
????}
}
  1. 在需要進(jìn)行緩存的方法上添加@Cacheable注解:

@Service
public?class?UserServiceImpl?implements?UserService?{

????@Autowired
????private?UserDao?userDao;

????@Override
????@Cacheable(value?=?"userCache",?key?=?"#id")?//?添加緩存注解
????public?User?getUserById(Long?id)?{
????????return?userDao.getUserById(id);
????}
}

其中,@Cacheable注解有兩個(gè)重要的參數(shù):value和key。value表示緩存的名稱(chēng),如果沒(méi)有指定則使用默認(rèn)緩存;key表示緩存的key值,可以使用SpEL表達(dá)式來(lái)表示。

這樣,當(dāng)?shù)谝淮握{(diào)用getUserById方法時(shí),會(huì)將返回結(jié)果緩存起來(lái),下次再調(diào)用該方法時(shí),直接從緩存中獲取結(jié)果,而不是執(zhí)行方法體。如果需要更新緩存,可以調(diào)用@CachePut注解或@CacheEvict注解來(lái)實(shí)現(xiàn)。

需要注意的是,在使用@Cacheable注解時(shí),被緩存的方法不能拋出異常,否則會(huì)導(dǎo)致緩存失效。

當(dāng)使用@Cacheable注解后,如果需要更新緩存,可以通過(guò)調(diào)用@CachePut注解來(lái)更新緩存。

  1. @CachePut注解的使用方法和@Cacheable注解類(lèi)似。在需要更新緩存的方法上添加@CachePut注解,并指定value和key值。

@Service
public?class?UserServiceImpl?implements?UserService?{

????@Autowired
????private?UserDao?userDao;

????@Override
????@Cacheable(value?=?"userCache",?key?=?"#id")
????public?User?getUserById(Long?id)?{
????????return?userDao.getUserById(id);
????}

????@Override
????@CachePut(value?=?"userCache",?key?=?"#user.id")
????public?User?updateUser(User?user)?{
????????userDao.updateUser(user);
????????return?user;
????}
}
  1. 在更新數(shù)據(jù)時(shí),先調(diào)用更新方法updateUser,然后再調(diào)用查詢(xún)方法getUserById,此時(shí)會(huì)更新緩存中的數(shù)據(jù)。

//?更新用戶(hù)信息
User?user?=?new?User();
user.setId(1L);
user.setName("new?name");
userService.updateUser(user);

//?查詢(xún)用戶(hù)信息,會(huì)從緩存中獲取
User?userFromCache?=?userService.getUserById(1L);
  1. 如果需要?jiǎng)h除緩存中的數(shù)據(jù),可以通過(guò)調(diào)用@CacheEvict注解來(lái)實(shí)現(xiàn)。

@Service
public?class?UserServiceImpl?implements?UserService?{

????@Autowired
????private?UserDao?userDao;

????@Override
????@Cacheable(value?=?"userCache",?key?=?"#id")
????public?User?getUserById(Long?id)?{
????????return?userDao.getUserById(id);
????}

????@Override
????@CachePut(value?=?"userCache",?key?=?"#user.id")
????public?User?updateUser(User?user)?{
????????userDao.updateUser(user);
????????return?user;
????}

????@Override
????@CacheEvict(value?=?"userCache",?key?=?"#id")
????public?void?deleteUserById(Long?id)?{
????????userDao.deleteUserById(id);
????}
}
  1. 在刪除數(shù)據(jù)時(shí),先調(diào)用刪除方法deleteUserById,然后再調(diào)用查詢(xún)方法getUserById,此時(shí)會(huì)重新從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-462697.html

//?刪除用戶(hù)信息
userService.deleteUserById(1L);

//?查詢(xún)用戶(hù)信息,會(huì)重新從數(shù)據(jù)庫(kù)中獲取
User?userFromDB?=?userDao.getUserById(1L);

到了這里,關(guān)于redis緩存神器:@Cacheable注解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring 中的 @Cacheable 緩存注解,太好用了!

    Spring 中的 @Cacheable 緩存注解,太好用了!

    第一個(gè)問(wèn)題,首先要搞明白什么是緩存,緩存的意義是什么。 對(duì)于普通業(yè)務(wù),如果要查詢(xún)一個(gè)數(shù)據(jù),一般直接select數(shù)據(jù)庫(kù)進(jìn)行查找。但是在高流量的情況下,直接查找數(shù)據(jù)庫(kù)就會(huì)成為性能的瓶頸。因?yàn)閿?shù)據(jù)庫(kù)查找的流程是先要從磁盤(pán)拿到數(shù)據(jù),再刷新到內(nèi)存,再返回?cái)?shù)據(jù)。磁

    2024年02月16日
    瀏覽(13)
  • SpringBoot緩存注解@Cacheable之自定義key策略及緩存失效時(shí)間指定

    SpringBoot緩存注解@Cacheable之自定義key策略及緩存失效時(shí)間指定

    1. 項(xiàng)目依賴(lài) 本項(xiàng)目借助 SpringBoot 2.2.1.RELEASE ?+? maven 3.5.3 ?+? IDEA ?+? redis5.0 進(jìn)行開(kāi)發(fā) 開(kāi)一個(gè) web 服務(wù)用于測(cè)試 1. key 生成策略 對(duì)于 @Cacheable 注解,有兩個(gè)參數(shù)用于組裝緩存的 key cacheNames/value: 類(lèi)似于緩存前綴 key: SpEL 表達(dá)式,通常根據(jù)傳參來(lái)生成最終的緩存 key 默認(rèn)的 redisK

    2024年02月19日
    瀏覽(15)
  • redis(12):springboot使用redis注解做緩存

    redis(12):springboot使用redis注解做緩存

    1 新建springboot項(xiàng)目 ? 2 相關(guān)注解 @EnableCaching 在啟動(dòng)類(lèi)上加上注解啟動(dòng)緩存 #作用在你要緩存的數(shù)據(jù)上 @Cacheable(key=\\\"#id\\\",cacheNames=\\\"com.sxt.service.impl.MenuServiceImpl\\\") @Cacheput 解決臟讀 @CachEvict(解決臟讀) @Cacheconfig(全局的配置緩存) 3 修改yml

    2024年02月15日
    瀏覽(27)
  • Spring Boot 中的 @Cacheable 注解

    Spring Boot 中的 @Cacheable 注解

    在 Spring Boot 中,緩存是一個(gè)非常重要的話(huà)題。當(dāng)我們需要頻繁讀取一些數(shù)據(jù)時(shí),為了提高性能,可以將這些數(shù)據(jù)緩存起來(lái),避免每次都從數(shù)據(jù)庫(kù)中讀取。為了實(shí)現(xiàn)緩存,Spring Boot 提供了一些緩存注解,其中最常用的是 @Cacheable 注解。 @Cacheable 注解用于標(biāo)記一個(gè)方法需要被緩存

    2024年02月12日
    瀏覽(37)
  • 一文掌握SpringBoot注解之@Cacheable 知識(shí)文集(1)

    一文掌握SpringBoot注解之@Cacheable 知識(shí)文集(1)

    ??作者簡(jiǎn)介,普修羅雙戰(zhàn)士,一直追求不斷學(xué)習(xí)和成長(zhǎng),在技術(shù)的道路上持續(xù)探索和實(shí)踐。 ??多年互聯(lián)網(wǎng)行業(yè)從業(yè)經(jīng)驗(yàn),歷任核心研發(fā)工程師,項(xiàng)目技術(shù)負(fù)責(zé)人。 ??歡迎 ??點(diǎn)贊?評(píng)論?收藏 ?? SpringBoot 領(lǐng)域知識(shí) ?? 鏈接 專(zhuān)欄 SpringBoot 專(zhuān)業(yè)知識(shí)學(xué)習(xí)一 SpringBoot專(zhuān)欄 Sprin

    2024年01月20日
    瀏覽(43)
  • SpringBoot 緩存之 @Cacheable 詳細(xì)介紹

    SpringBoot 緩存之 @Cacheable 詳細(xì)介紹

    1、緩存介紹 Spring 從 3.1 開(kāi)始就引入了對(duì) Cache 的支持。定義了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口來(lái)統(tǒng)一不同的緩存技術(shù)。并支持使用 JCache(JSR-107)注解簡(jiǎn)化我們的開(kāi)發(fā)。? 其使用方法和原理都類(lèi)似于 Spring 對(duì)事務(wù)管理的支持。Spring Cache 是作用在方

    2024年04月27日
    瀏覽(27)
  • 【springboot】緩存之@Cacheable、@CachePut、@CacheEvict的用法

    【springboot】緩存之@Cacheable、@CachePut、@CacheEvict的用法

    一、注解參數(shù)說(shuō)明 1.1 屬性說(shuō)明 1.1.1 value/cacheNames 屬性 1.這兩個(gè)屬性代表的意義相同 2.用來(lái)指定緩存組件的名稱(chēng),將方法的返回結(jié)果存進(jìn)緩存的名稱(chēng) 3.定義為數(shù)組時(shí),可以存到多個(gè)緩存key中 1.1.2 key屬性 1.指定緩存數(shù)據(jù)的key 2.redis作為緩存時(shí),redis中的key為value::key 3.方法沒(méi)有參

    2024年02月06日
    瀏覽(19)
  • 轉(zhuǎn)載 spring @Cacheable擴(kuò)展實(shí)現(xiàn)緩存自動(dòng)過(guò)期時(shí)間以及自動(dòng)刷新

    轉(zhuǎn)載 spring @Cacheable擴(kuò)展實(shí)現(xiàn)緩存自動(dòng)過(guò)期時(shí)間以及自動(dòng)刷新

    用過(guò)spring cache的朋友應(yīng)該會(huì)知道,Spring Cache默認(rèn)是不支持在@Cacheable上添加過(guò)期時(shí)間的,雖然可以通過(guò)配置緩存容器時(shí)統(tǒng)一指定。形如 復(fù)制 但有時(shí)候我們會(huì)更習(xí)慣通過(guò)注解指定過(guò)期時(shí)間。今天我們就來(lái)聊一下如何擴(kuò)展@Cacheable實(shí)現(xiàn)緩存自動(dòng)過(guò)期以及緩存即將到期自動(dòng)刷新 2 實(shí)現(xiàn)

    2024年02月03日
    瀏覽(13)
  • @EnableCaching、@Cacheable的介紹,及Redis在SpringBoot中的使用教程

    @EnableCaching、@Cacheable的介紹,及Redis在SpringBoot中的使用教程

    首先說(shuō)明這兩個(gè)注解都是spring提供的,可以結(jié)合不同的緩存技術(shù)使用。(這里將順便結(jié)合Redis進(jìn)行講解) 1.1 @EnableCaching @EnableCaching是開(kāi)啟緩存功能,作用于緩存配置類(lèi)上或者作用于springboot啟動(dòng)類(lèi)上。 1.2 @Cacheable @Cacheable 注解在方法上,表示該方法的返回結(jié)果是可以緩存的。也

    2024年01月24日
    瀏覽(52)
  • TeamView: 為了進(jìn)一步增強(qiáng)安全性,在發(fā)起連接之前,我們希望您先驗(yàn)證您的賬戶(hù)

    TeamViewPC端遠(yuǎn)程連接另外一臺(tái)電腦 彈出窗口:為了進(jìn)一步增強(qiáng)安全性,在發(fā)起連接之前,我們希望您先驗(yàn)證您的賬戶(hù) 電腦瀏覽器自動(dòng)跳轉(zhuǎn)到手機(jī)號(hào)驗(yàn)證頁(yè)面,輸入正確的手機(jī)號(hào)后,點(diǎn)擊驗(yàn)證卻一直提示 手機(jī)號(hào)無(wú)效、手機(jī)號(hào)未知等異常。 復(fù)制驗(yàn)證鏈接到手機(jī) https://login.teamviewer.

    2024年02月14日
    瀏覽(38)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包