redis-cli,spring-boot-route(十二)整合redis做為緩存

 2023-10-17 阅读 27 评论 0

摘要:redis簡介 redis作為一種非關系型數據庫,讀寫非常快,應用十分廣泛,它采用key-value的形式存儲數據,value常用的五大數據類型有string(字符串),list(鏈表),set(集合),zset(有序集合)和hash(哈希表)。 redis的特

redis簡介

redis作為一種非關系型數據庫,讀寫非常快,應用十分廣泛,它采用key-value的形式存儲數據,value常用的五大數據類型有string(字符串),list(鏈表),set(集合),zset(有序集合)和hash(哈希表)。

redis的特性決定了它的功能,它可以用來做以下這些事情!

  1. 排行榜,利用zset可以方便的實現排序功能
  2. 計數器,利用redis中原子性的自增操作,可以統計到閱讀量,點贊量等功能
  3. 簡單消息隊列,list存儲結構,滿足先進先出的原則,可以使用lpush/rpop或rpush/lpop實現簡單消息隊列
  4. session共享,分布式系統中,可以利用redis實現session共享。spring官方提供的分布式解決方案Spring Session就是利用redis 實現的。

Spring Boot對redis也實現自動化裝配,使用非常方便。

Spring Boot整合redis

1. 引入redis依賴

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-pool2</artifactId></dependency>
</dependencies>

2. 配置redis相關信息

spring:redis:# redis庫database: 0# redis 服務器地址host: localhost# redis 端口號port: 6379# redis 密碼password:# 連接超時時間(毫秒)timeout: 1000lettuce:pool:# 連接池最大鏈接數(負數表示沒有限制)max-active: 8# 連接池最大阻塞等待時間(負數表示沒有限制)max-wait: -1# 連接池最大空閑連接數max-idle: 8# 連接池最小空閑連接數min-idle: 0

3. 操作redis

redis-cli,SpringBoot提供了兩個bean來操作redis,分別是RedisTemplate?和?StringRedisTemplate,這兩者的主要區別如下。

RedisTemplate使用的是JdkSerializationRedisSerializer?存入數據會將數據先序列化成字節數組然后在存入Redis數據庫。

StringRedisTemplate使用的是StringRedisSerializer。

下面一起來看看效果:

@RestController
public class RedisDemo {@Autowiredprivate RedisTemplate redisTemplate;@Autowiredprivate StringRedisTemplate stringRedisTemplate;@GetMapping("redisTmeplateData")public void redisTemplateData(){redisTemplate.opsForValue().set("name","Java旅途");}@GetMapping("stringRedisTemplateData")public void stringRedisTemplateData(){stringRedisTemplate.opsForValue().set("desc","堅持分享java技術棧");}
}

redis怎么用?第一個方法存入的數據如下圖

第二個方法存入的數據如下圖

redis做緩存,由于RedisTemplate是序列化成字節數組存儲的,因此在redis客戶端的可讀性并不好。

自動緩存

@Cacheable可以標記在一個方法上,也可以標記在一個類上。當標記在一個方法上時表示該方法是支持緩存的,當標記在一個類上時則表示該類所有的方法都是支持緩存的。

如果添加了@Cacheable注解,那么方法被調用后,值會被存入redis,下次再調用的時候會直接從redis中取值返回。

@GetMapping("getStudent")
@Cacheable(value = "student:key")
public Student getStudent(){log.info("我不是緩存,我是new的對象!");Student student = new Student("Java旅途",26);return student;
}

記得要開啟緩存,在啟動類加上@EnableCaching注解

springboot2redis,訪問上面的方法,如果不打印日志,則是從緩存中獲取的值。

封裝redisUtils

RedisTemplate提供了很多方法來操作redis,但是找起來比較費事,為了更好的操作redis,一般會封裝redisUtils來滿足業務開發。這里簡單封裝幾個做個示例,如果開發中有需求可以自己封裝。

public class RedisUtils {@Autowiredprivate RedisTemplate redisTemplate;/*** 普通存入* @param key* @param value* @return*/public boolean set(String key,Object value){try {redisTemplate.opsForValue().set(key,value);return true;}catch (Exception e){e.printStackTrace();return false;}}/*** 普通獲取key* @param key* @return*/public Object get(String key){return key == null ? null : redisTemplate.opsForValue().get(key);}/*** 存入key,設置過期時長* @param key* @param value* @param time* @return*/public boolean set(String key,Object value,long time){try {if(time > 0){redisTemplate.opsForValue().set(key,value,time, TimeUnit.SECONDS);}else{redisTemplate.opsForValue().set(key,value);}return true;}catch (Exception e){e.printStackTrace();return false;}}/*** 判斷key是否存在* @param key* @return*/public boolean exists(String key){try {return redisTemplate.hasKey(key);}catch (Exception e){e.printStackTrace();return false;}}/*** 刪除key* @param key*/public void del(String key){try {if(key != null && key.length() > 0){redisTemplate.delete(key);}}catch (Exception e){e.printStackTrace();}}
}

此是spring-boot-route系列的第十二篇文章,這個系列的文章都比較簡單,主要目的就是為了幫助初次接觸Spring Boot 的同學有一個系統的認識。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/142141.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息