日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

spring boot 缓存_Spring Boot 集成 Redis 实现数据缓存

發布時間:2023/12/4 javascript 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring boot 缓存_Spring Boot 集成 Redis 实现数据缓存 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Spring Boot 集成 Redis 實現數據緩存,只要添加一些注解方法,就可以動態的去操作緩存了,減少代碼的操作。

在這個例子中我使用的是 Redis,其實緩存類型還有很多,例如 Ecache、Mamercache、Caffeine ?等。

Redis 簡介

Redis 是一個開源,高級的鍵值存儲和一個適用的解決方案,用于構建高性能,可擴展的 Web 應用程序。

Redis 相關的知識就不在這里贅述了,感興趣的可以公眾號回復 Redis 看下 Redis 系列文章。

下面我們在 Spring Boot 中集成 Redis 來實現數據緩存。

Spring Boot 集成 Redis 實現緩存

Spring Boot 集成 Redis 實現緩存主要分為以下三步:

  • 加入 Redis 依賴
  • 加入 Redis 配置
  • 演示 Redis 緩存
  • 加入依賴

    首先創建一個項目,在項目中加入 Redis 依賴,項目依賴如下所示(由于使用 Redis 連接池,需額外引入 commons-pool2):

    org.springframework.bootspring-boot-starter-web
    org.springframework.bootspring-boot-starter-data-redis
    org.apache.commonscommons-pool2

    在 spring-boot-starter-data-redis 1.X 版本默認使用 Jedis 客戶端,在 2.X 版本默認開始使用 Lettuce 客戶端,如果習慣使用 Jedis 的話,可以從 spring-boot-starter-data-redis 中排除 Lettuce 并引入 Jedis。

    加入配置

    在配置文件 application.properties 中配置 Redis 的相關參數,具體內容如下:

    #Redis?索引(0~15,默認為?0)
    spring.redis.database=0
    spring.redis.host=127.0.0.1
    #Redis?密碼,如果沒有就默認不配置此參數
    spring.redis.password=
    spring.redis.port=6379
    #Redis?連接的超時時間
    spring.redis.timeout=1000
    #連接池最大連接數(使用負值表示沒有限制)
    spring.redis.lettuce.pool.max-active=20
    #連接池最大阻塞等待時間(使用負值表示沒有限制)
    spring.redis.lettuce.pool.max-wait=-1
    #連接池中的最大空閑連接
    spring.redis.lettuce.pool.max-idle=10
    #連接池中的最小空閑連接
    spring.redis.lettuce.pool.min-idle=0

    接下來在 config 包下創建一個 Redis 配置類 RedisConfig,在配置類上加入注解 @Configuration,注入一個 CacheManager 來配置一些相關信息,代碼如下:

    @Configuration
    public?class?RedisConfig?{

    ????@Bean
    ????public?CacheManager?cacheManager(RedisConnectionFactory?factory)?{
    ????????RedisCacheConfiguration?redisCacheConfiguration?=?RedisCacheConfiguration.defaultCacheConfig()
    ????????????????.entryTtl(Duration.ofMinutes(30))
    ????????????????.prefixKeysWith("cache:user:")
    ????????????????.disableCachingNullValues()
    ????????????????.serializeKeysWith(keySerializationPair())
    ????????????????.serializeValuesWith(valueSerializationPair());
    ????????return?RedisCacheManager.builder(factory)
    ????????????????.withCacheConfiguration("user",?redisCacheConfiguration).build();
    ????}

    ????private?RedisSerializationContext.SerializationPair?keySerializationPair()?{
    ????????return?RedisSerializationContext.SerializationPair.fromSerializer(new?StringRedisSerializer());
    ????}

    ????private?RedisSerializationContext.SerializationPair?valueSerializationPair()?{
    ????????return?RedisSerializationContext.SerializationPair.fromSerializer(new?GenericJackson2JsonRedisSerializer());
    ????}
    }

    首先通過 RedisCacheConfiguration 生成默認配置,然后對緩存進行自定義化配置,比如過期時間、緩存前綴、key/value 序列化方法等,然后構建出一個 RedisCacheManager,其中通過 keySerializationPair 方法為 key 配置序列化,valueSerializationPair 為 value 配置序列化。

    定義用戶實體類

    在 domain 包下創建一個用戶實體類:

    public?class?User?{

    ????private?Long?id;

    ????private?String?name;

    ????private?String?password;
    ????//?省略?getter/setter
    }

    在服務中使用 SpringCache 注解

    在 service 包下定義用戶接口,分別包含添加用戶、查詢用戶、更新用戶以及刪除用戶四個接口,具體代碼如下:

    public?interface?UserService?{

    ????void?addUser(User?user);

    ????User?getUserById(Long?id);

    ????User?updateUser(User?user);

    ????void?deleteById(Long?id);
    }

    然后編寫實現類,為了方便演示,在這里使用 Map userMap,沒有去連接數據庫,其中用到的注解有 @CacheConfig、@Cacheable、@CachePut 以及 @CacheEvict,具體代碼如下:

    @Service
    @CacheConfig(cacheNames?=?"user")
    public?class?UserServiceImpl?implements?UserService?{

    ????Map?userMap?=?Collections.synchronizedMap(new?HashMap<>());@Overridepublic?void?addUser(User?user)?{
    ????????userMap.put(user.getId(),?user);
    ????}@Override@Cacheable(key?=?"#id")public?User?getUserById(Long?id)?{if?(!userMap.containsKey(id))?{return?null;
    ????????}return?userMap.get(id);
    ????}@Override@CachePut(key?=?"#user.id")public?User?updateUser(User?user)?{if?(!userMap.containsKey(user.getId()))?{throw?new?RuntimeException("不存在該用戶");
    ????????}
    ????????User?newUser?=?userMap.get(user.getId());
    ????????newUser.setPassword(user.getPassword());
    ????????userMap.put(newUser.getId(),?newUser);return?newUser;
    ????}@Override@CacheEvict(key?=?"#id")public?void?deleteById(Long?id)?{
    ????????userMap.remove(id);
    ????}
    }

    在這里說下這幾個注解:

    @CacheConfig 類級別的緩存注解,允許共享緩存名稱

    @Cacheable 觸發緩存入口

    一般用于查詢操作,根據 key 查詢緩存.

  • 如果 key 不存在,查詢 db,并將結果更新到緩存中。
  • 如果 key 存在,直接查詢緩存中的數據。
  • @CacheEvict 觸發移除緩存

    根據 key 刪除緩存中的數據。

    @CacahePut 更新緩存

    一般用于更新和插入操作,每次都會請求 db,通過 key 去 Redis 中進行操作。

  • 如果 key 存在,更新內容
  • 如果 key 不存在,插入內容。
  • 最后,在 controller 包下創建一個 UserController 類,提供用戶 API 接口(未使用數據庫),代碼如下:

    @RestController
    @RequestMapping("/user")
    public?class?UserController?{

    ????@Autowired
    ????private?UserService?userService;

    ????@GetMapping("/{id}")
    ????public?ResponseEntity?getUser(@PathVariable?Long?id)?{
    ????????return?ResponseEntity.status(HttpStatus.CREATED).body(userService.getUserById(id));
    ????}

    ????@PostMapping
    ????public?ResponseEntity?createUser(@RequestBody?User?user)?{
    ????????userService.addUser(user);
    ????????return?ResponseEntity.status(HttpStatus.CREATED).body("SUCCESS");
    ????}

    ????@PutMapping
    ????public?ResponseEntity?updateUser(@RequestBody?User?user)?{
    ????????return?ResponseEntity.status(HttpStatus.CREATED).body(userService.updateUser(user));
    ????}

    ????@DeleteMapping("/{id}")
    ????public?ResponseEntity?deleteUser(@PathVariable?Long?id)?{
    ????????userService.deleteById(id);
    ????????return?ResponseEntity.status(HttpStatus.CREATED).body("SUCCESS");
    ????}
    }

    啟動類添加開啟緩存注解

    @SpringBootApplication
    @EnableCaching
    public?class?RedisCacheApplication?{

    ????public?static?void?main(String[]?args)?{
    ????????SpringApplication.run(RedisCacheApplication.class,?args);
    ????}
    }

    @EnableCaching 表明開啟緩存,Spring Boot 會自動配置 Redis 緩存的 CacheManager。

    啟動項目,先調用添加用戶接口,添加用戶 wupx,id 為 1,在 getUserById 方法打斷點,第一次調用 getUser 接口獲取用戶的時候,會運行到斷點處,第二次調用 getUser 不會運行到斷點處,而是直接從 Redis 中讀取緩存數據。

    通過 Redis 可視化工具 RedisDesktopManager 查看,結果如圖所示:

    到此為止,我們就完成了 Spring Boot 與 Redis 的集成實現數據緩存。

    總結

    Spring Boot 集成 Redis 實現數據緩存還是比較輕松的,Spring 提供了緩存注解,使用這些注解可以有效簡化編程過程,大家可以自己動手實踐下。

    本文的完整代碼在 https://github.com/wupeixuan/SpringBoot-Learn 的 redis-cache 目錄下。

    留言討論

    最好的關系就是互相成就,大家的點贊、在看、分享、留言四連就是我創作的最大動力。

    參考

    https://github.com/wupeixuan/SpringBoot-Learn

    ???●Spring Boot 集成阿里云 OSS 進行文件存儲●Spring Boot 集成 Elasticsearch 實戰●Spring Boot 集成 WebSocket 實現服務端推送消息到客戶端

    總結

    以上是生活随笔為你收集整理的spring boot 缓存_Spring Boot 集成 Redis 实现数据缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。