91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

數據緩存如何在Spring Boot中使用

發布時間:2020-11-17 15:02:54 來源:億速云 閱讀:138 作者:Leah 欄目:編程語言

數據緩存如何在Spring Boot中使用?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

在實際開發中,對于要反復讀寫的數據,最好的處理方式是將之在內存中緩存一份,頻繁的數據庫訪問會造成程序效率低下,同時內存的讀寫速度本身就要強于硬盤。Spring在這一方面給我們提供了諸多的處理手段,而Spring Boot又將這些處理方式進一步簡化,接下來我們就來看看如何在Spring Boot中解決數據緩存問題。

創建Project并添加數據庫驅動

Spring Boot的創建方式還是和我們前文提到的創建方式一樣,不同的是這里選擇添加的依賴不同,這里我們添加Web、Cache和JPA依賴,如下圖:

數據緩存如何在Spring Boot中使用 

創建成功之后,接下來添加數據庫驅動,我還是使用MySQL,在pom.xml中添加數據庫驅動,如下:

<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.40</version>
 </dependency>

配置application.properties

這個application.properties的配置還是和初識在Spring Boot中使用JPA一樣,各個參數的含義我這里也不再贅述,我們直接來看代碼:

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/sang&#63;useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=sang

spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jackson.serialization.indent_output=true

創建實體類

@Entity
public class Person {
 @Id
 @GeneratedValue
 private Long id;
 private String name;
 private String address;
 private Integer age;

 public Person() {
 }

 public Long getId() {
 return id;
 }

 public void setId(Long id) {
 this.id = id;
 }

 public String getName() {
 return name;
 }

 public void setName(String name) {
 this.name = name;
 }

 public String getAddress() {
 return address;
 }

 public void setAddress(String address) {
 this.address = address;
 }

 public Integer getAge() {
 return age;
 }

 public void setAge(Integer age) {
 this.age = age;
 }

 public Person(Long id, String name, String address, Integer age) {
 this.id = id;
 this.name = name;
 this.address = address;
 this.age = age;
 }
}

創建實體類的Repository

public interface PersonRepository extends JpaRepository<Person,Long> {}

創建業務類

業務接口

public interface DemoService {
 public Person save(Person person);

 public void remove(Long id);

 public Person findOne(Person person);
}

實現類

@Service
public class DemoServiceImpl implements DemoService {
 @Autowired
 PersonRepository personRepository;

 @CachePut(value = "people", key = "#person.id")
 @Override
 public Person save(Person person) {
 Person p = personRepository.save(person);
 System.out.println("為id、key為" + p.getId() + "數據做了緩存");
 return p;
 }

 @CacheEvict(value = "people")
 @Override
 public void remove(Long id) {
 System.out.println("刪除了id、key為" + id + "的數據緩存");
 personRepository.delete(id);
 }

 @Cacheable(value = "people", key = "#person.id")
 @Override
 public Person findOne(Person person) {
 Person p = personRepository.findOne(person.getId());
 System.out.println("為id、key為" + p.getId() + "數據做了緩存");
 return p;
 }
}@Service
public class DemoServiceImpl implements DemoService {
 @Autowired
 PersonRepository personRepository;

 @CachePut(value = "people", key = "#person.id")
 @Override
 public Person save(Person person) {
 Person p = personRepository.save(person);
 System.out.println("為id、key為" + p.getId() + "數據做了緩存");
 return p;
 }

 @CacheEvict(value = "people")
 @Override
 public void remove(Long id) {
 System.out.println("刪除了id、key為" + id + "的數據緩存");
 personRepository.delete(id);
 }

 @Cacheable(value = "people", key = "#person.id")
 @Override
 public Person findOne(Person person) {
 Person p = personRepository.findOne(person.getId());
 System.out.println("為id、key為" + p.getId() + "數據做了緩存");
 return p;
 }
}

關于這個實現類我說如下幾點:

1.@CachePut表示緩存新添加的數據或者更新的數據到緩存中,兩個參數value表示緩存的名稱為people,key表示緩存的key為person的id

2.@CacheEvict表示從緩存people中刪除key為id的數據

3.@Cacheable表示添加數據到緩存中,緩存名稱為people,緩存key為person的id屬性。

創建Controller

@RestController
public class CacheController {
 @Autowired
 DemoService demoService;

 @RequestMapping("/put")
 public Person put(Person person) {
 return demoService.save(person);
 }

 @RequestMapping("/able")
 public Person cacheable(Person person) {
 return demoService.findOne(person);
 }

 @RequestMapping("/evit")
 public String evit(Long id) {
 demoService.remove(id);
 return "ok";
 }
}

OK ,做完這一切我們就可以來測試我們剛剛寫的緩存了。

測試

看我們的Controller,我們有三個地址要測試,一個一個來。當然,在 測試之前,我們先來看看初始狀態下的數據庫是什么樣子的:

數據緩存如何在Spring Boot中使用

首先我們在瀏覽器中訪問http://localhost:8080/able&#63;id=1,得到如下訪問結果:

數據緩存如何在Spring Boot中使用 

這個時候查看控制臺,輸出內容如下:

數據緩存如何在Spring Boot中使用 

說是數據已經被緩存了,這個時候我們再繼續在瀏覽器中刷新繼續請求id為1的數據,會發現控制臺不會繼續打印日志出來,就是因為數據已被存于緩存之中了。

接下來我們向瀏覽器中輸入http://localhost:8080/put&#63;age=47&name=奧巴牛&address=米國,訪問結果如下:

數據緩存如何在Spring Boot中使用 

這個時候查看控制臺打印的日志如下:

數據緩存如何在Spring Boot中使用 

再查看數據表,數據已插入成功:

數據緩存如何在Spring Boot中使用 

此時,我們在瀏覽器中輸入http://localhost:8080/able&#63;id=106,訪問剛剛插入的這條數據,結果如下:

數據緩存如何在Spring Boot中使用 

這個時候查看控制臺,發現并沒有數據數據,就是因為數據已經處于緩存中了。

最后我們在瀏覽器中輸入http://localhost:8080/evit&#63;id=106,將數據從緩存中移除,訪問結果如下:

數據緩存如何在Spring Boot中使用 

這個時候查看控制臺,已經提示緩存移除掉了:

數據緩存如何在Spring Boot中使用 

同時數據也從數據庫刪除掉了,這個時候如果還需要該數據則需要我們繼續向表中添加數據。

緩存技術切換

Spring Boot默認情況下使用ConcurrentMapCacheManager作為緩存技術,有的時候你可能想替換為其他的緩存方式,在Spring Boot中進行緩存的切換非常簡單,我這里以Google提供的Guava為例,如果要使用這種緩存策略,只需要添加相應的依賴即可,如下:

<dependency>
 <groupId>com.google.guava</groupId>
 <artifactId>guava</artifactId>
 <version>20.0</version>
</dependency>

就這樣就可以了。實際上在Spring Boot中,底層使用哪一種緩存我們并不必做過多考慮,切換的方式也很簡單,如上文引入相應的依賴即可,我們只需要把上層的邏輯寫好即可。

關于數據緩存如何在Spring Boot中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新闻| 河源市| 保康县| 枣阳市| 普兰县| 巴林左旗| 扎赉特旗| 长海县| 宣汉县| 虎林市| 甘孜| 镇平县| 墨江| 铁力市| 阿拉尔市| 平江县| 商都县| 鹤壁市| 万全县| 六盘水市| 安溪县| 天水市| 平度市| 日土县| 尼玛县| 靖边县| 大洼县| 漠河县| 特克斯县| 行唐县| 新竹市| 高台县| 资源县| 商城县| 忻州市| 法库县| 嘉义市| 乾安县| 重庆市| 酉阳| 巩义市|