SpringBoot集成Redis

Redis 的介紹

Redis(Remote Dictionary Server)是一個(gè)開源的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),它被廣泛地應(yīng)用于緩存、計(jì)數(shù)器、限速器、消息隊(duì)列、分布式鎖等多種場景中。Redis 支持多種數(shù)據(jù)結(jié)構(gòu),包括字符串、散列、列表、集合和有序集合等,并且具有高性能、高可用性、持久化以及豐富的特性,在企業(yè)級應(yīng)用中逐漸成為關(guān)鍵的一環(huán)。

Redis 的應(yīng)用場景

Redis 在企業(yè)應(yīng)用中的應(yīng)用場景十分廣泛:

  • 緩存:Redis 可以作為一種高速緩存,將一些經(jīng)常訪問但不經(jīng)常變化的數(shù)據(jù)緩存到內(nèi)存中,加快數(shù)據(jù)讀取速度。
  • 計(jì)數(shù)器:Redis 可以處理計(jì)數(shù)器功能,可以方便地實(shí)現(xiàn)有序集合的排名、粉絲量統(tǒng)計(jì)等功能。
  • 限速器:利用 Redis 的計(jì)數(shù)器功能,可以對請求進(jìn)行限速,避免過多的請求造成系統(tǒng)崩潰。
  • 分布式鎖:通過 Redis 的原子操作和持久化特性,可以實(shí)現(xiàn)分布式鎖,避免多個(gè)進(jìn)程同時(shí)修改同一數(shù)據(jù)帶來的問題。
  • 消息隊(duì)列:Redis 提供了 Pub/Sub 機(jī)制,可以實(shí)現(xiàn)分布式環(huán)境下的消息傳遞機(jī)制,例如個(gè)推、金融交易等。
  • 數(shù)據(jù)庫:Redis 可以作為數(shù)據(jù)庫使用,具有快速響應(yīng)、持久化數(shù)據(jù)等特點(diǎn)。
  • 負(fù)載均衡:利用 Redis 的 Cluster 特性,可以實(shí)現(xiàn)負(fù)載均衡,避免服務(wù)器出現(xiàn)過快或過慢的現(xiàn)象。

Redis 的數(shù)據(jù)類型

Redis 支持的數(shù)據(jù)類型具有豐富的特性和嚴(yán)格的限制,可以滿足各種不同數(shù)據(jù)場景的需求。

  • String:字符串類型是 Redis 最基本的數(shù)據(jù)類型,可以存儲任意類型的字符串,包括二進(jìn)制數(shù)據(jù)。
  • List:列表類型是一種有序的元素集合,支持從頭部或尾部添加或刪除元素,支持獲取某個(gè)元素的值。
  • Hash:散列類型是 Redis 中用來表示對象的數(shù)據(jù)結(jié)構(gòu),每個(gè)鍵值對存儲一個(gè)子對象,適合存儲較為復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
  • Set:集合類型是 Redis 中提供了無序元素的集合,一個(gè)鍵值對可以包含多個(gè)元素且元素不能重復(fù),適合存儲無序相關(guān)元素的數(shù)據(jù)結(jié)構(gòu)。
  • Sorted Set:有序集合類型是 Redis 中提供了具有排序功能的集合類型,一個(gè)鍵值對可以包含多個(gè)元素且元素不能重復(fù),適合存儲有關(guān)聯(lián)屬性或有序相關(guān)元素的數(shù)據(jù)結(jié)構(gòu)。

SpringBoot 整合 Redis

下面我們結(jié)合一個(gè)簡單的項(xiàng)目,通過 StringRedisTemplate 來演示各個(gè)數(shù)據(jù)類型的例子。

在 pom.xml 文件中加入如下依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

在 application.properties 文件中加入如下設(shè)置:

# Redis 數(shù)據(jù)庫
spring.redis.database=0
# Redis 服務(wù)器的地址和端口號
spring.redis.host=localhost
spring.redis.port=6379
# Redis 訪問密碼,如果沒有設(shè)置密碼可不填
spring.redis.password=

在 src/main/java/com/example/demo 目錄下新建一個(gè) RedisController 類,并添加如下注解:

@RestController
public class RedisController {
    ...
}

存儲 String 類型數(shù)據(jù)

在 RedisController 類中添加以下依賴注入:

@Autowired
private StringRedisTemplate stringRedisTemplate;

在 RedisController 中添加一個(gè)簡單的 String 類型接口,用于存儲和獲取字符串類型數(shù)據(jù):

@GetMapping("/redis/setString")
public String setString() {
    String key = "name";
    String value = "Redis";
    stringRedisTemplate.opsForValue().set(key, value);
    return "set success";
}

@GetMapping("/redis/getString")
public String getString() {
    String key = "name";
    String value = stringRedisTemplate.opsForValue().get(key);
    return "get value:" + value;
}

存儲 List 類型數(shù)據(jù)

在 RedisController 類中添加以下依賴注入:

@Autowired
private RedisTemplate<String, Object> redisTemplate;

在 RedisController 中添加一個(gè) List 類型的接口,用于存儲和獲取 List 類型數(shù)據(jù):

@GetMapping("/redis/setList")
public String setList() {
    String key = "list";
    List<String> values = Arrays.asList("Redis", "Java", "Python");
    redisTemplate.opsForList().rightPushAll(key, values);
    return "set success";
}

@GetMapping("/redis/getList")
public List<String> getList() {
    String key = "list";
    List<String> values = redisTemplate.opsForList().range(key, 0, -1);
    return values;
}

存儲 Hash 類型數(shù)據(jù)

在 RedisController 類中添加以下依賴注入:

@Autowired
private StringRedisTemplate stringRedisTemplate;

在 RedisController 中添加一個(gè) Hash 類型的接口,用于存儲和獲取 Hash 類型數(shù)據(jù):

@GetMapping("/redis/setHash")
public String setHash() {
    String key = "user";
    stringRedisTemplate.opsForHash().put(key, "name", "Redis");
    stringRedisTemplate.opsForHash().put(key, "age", "18");
    return "set success";
}

@GetMapping("/redis/getHash")
public Map<String, String> getHash() {
    String key = "user";
    Map<String, String> result = stringRedisTemplate.opsForHash().entries(key);
    return result;
}

存儲 Set 類型數(shù)據(jù)

在 RedisController 類中添加以下依賴注入:

@Autowired
private StringRedisTemplate stringRedisTemplate;

在 RedisController 中添加一個(gè) Set 類型的接口,用于存儲和獲取 Set 類型數(shù)據(jù):

@GetMapping("/redis/setSet")
public String setSet() {
    String key = "set";
    stringRedisTemplate.opsForSet().add(key, "Redis", "Java", "Python");
    return "set success";
}

@GetMapping("/redis/getSet")
public Set<String> getSet() {
    String key = "set";
    Set<String> result = stringRedisTemplate.opsForSet().members(key);
    return result;
}

存儲 Sorted Set 類型數(shù)據(jù)

在 RedisController 類中添加以下依賴注入:

@Autowired
private StringRedisTemplate stringRedisTemplate;

在 RedisController 中添加一個(gè) Sorted Set 類型的接口,用于存儲和獲取 Sorted Set 類型數(shù)據(jù):

@GetMapping("/redis/setSortedSet")
public String setSortedSet() {
    String key = "sortedSet";
    Set<ZSetOperations.TypedTuple<String>> values = new HashSet<>();
    values.add(new DefaultTypedTuple<>("Redis", 1D));
    values.add(new DefaultTypedTuple<>("Java", 2D));
    values.add(new DefaultTypedTuple<>("Python", 3D));
    stringRedisTemplate.opsForZSet().add(key, values);
    return "set success";
}

@GetMapping("/redis/getSortedSet")
public Set<String> getSortedSet() {
    String key = "sortedSet";
    Set<String> result = stringRedisTemplate.opsForZSet().range(key, 0, -1);
    return result;
}

運(yùn)行 SpringBoot 項(xiàng)目,在瀏覽器中訪問以上接口,可以看到相應(yīng)的數(shù)據(jù)類型存儲和獲取效果。

總結(jié)

Redis 是一個(gè)非常優(yōu)秀的內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲系統(tǒng),具有高可用性、高性能、持久化和支持多種數(shù)據(jù)結(jié)構(gòu)等特點(diǎn),在大數(shù)據(jù)領(lǐng)域得到了廣泛應(yīng)用。同時(shí),使用 SpringBoot 也可以快速地實(shí)現(xiàn) Redis 的使用,并且 StringRedisTemplate 提供了豐富的 API,可以方便地操作 Redis 中的數(shù)據(jù)。各個(gè)數(shù)據(jù)類型的實(shí)現(xiàn)需要根據(jù)具體業(yè)務(wù)場景而定,可以根據(jù)需要自由地選擇數(shù)據(jù)結(jié)構(gòu)和使用方式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容