最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Redis的Spring客戶端使用小結(jié)

 更新時間:2025年04月07日 09:24:52   作者:19歲微操大師  
在Spring中使用Redis,可以極大地提升應(yīng)用程序的性能和響應(yīng)速度,本文主要介紹了Redis的Spring客戶端使用小結(jié),具有一定的參考價值,感興趣的可以了解一下

前面使用 Jedis 時, 是借助 Jedis 對象中的各種方法來對 Redis 進行操作. 而在 Spring 框架中, 則是通過 StringRedisTemplate 來操作 Redis. 最開始提供的類是 RedisTemplate, StringRedisTemplate 是 RedisTemplate 的子類, 專門用于處理文本數(shù)據(jù).

0. 配置 Spring 的 Redis環(huán)境

(1) 引入 Redis 的 Spring 依賴

選中 NoSQL 中的 Spring Data Redis (Access+Driver) 依賴.

image-20250305173733774

(2) 寫 Spring 配置文件

application.yml:

spring:
  data:
    redis:
      host: 127.0.0.1
      port: 8888

(3) 創(chuàng)建 Controller 類, 并注入 StringRedisTemplate 對象.

@RestController
public class MyController { 
    @Autowired
    StringRedisTemplate stringRedisTemplate;
}

[!NOTE]

這里的 RedisTemplate 將 Redis 中的命令, 又做了進一步封裝, 分成了幾個類別 (每個類別操作特定的數(shù)據(jù)類型)

  • opsForValue(): 專門操作 string 類型.
  • opsForList(): 專門操作 list 類型.
  • opsForSet(): 專門操作 set 類型.
  • opsForHash(): 專門操作 hash 類型.
  • opsForZSet(): 專門操作 zset 類型.

這樣一來, 它提供的一些接口風(fēng)格和原生的Redis命令就存在一定差異.

還有一點要注意的是: Spring 并沒有封裝 Redis 的所有命令 (如 flushAll 就沒有封裝), 此時我們可以使用 execute 方法來使用 Redis 的原始命令.

例如:

stringRedisTemplate.execute((RedisConnection connection) -> {
            // execute 要求回調(diào)方法中必須寫 return 語句,返回個東西
            // 這個回調(diào)返回的對象,就會作為 execute 本身的返回值
            connection.flushAll();
            return null;
        });
//這里的RedisConnection對象, 就相當(dāng)于Jedis里的Jedis對象.

1.使用 string

@RestController
public class MyController {
    @Autowired
    StringRedisTemplate stringRedisTemplate;

    @GetMapping("/testString")
    public String testString() {
        stringRedisTemplate.opsForValue().set("key", "111");
        stringRedisTemplate.opsForValue().set("key2", "222");
        stringRedisTemplate.opsForValue().set("key3", "333");

        String value = stringRedisTemplate.opsForValue().get("key");
        System.out.println("value: " + value);

        return "OK";
    }
}
  • 請求結(jié)果:

postman:

image-20250305182121278

日志:

image-20250305182205671

2. 使用 list

    @GetMapping("/testList")
    public String testList() {
        // 先清除之前的數(shù)據(jù)
        tringRedisTemplate.execute((RedisConnection connection) -> {
            // execute 要求回調(diào)方法中必須寫 return 語句,返回個東西
            // 這個回調(diào)返回的對象,就會作為 execute 本身的返回值
            connection.flushAll();
            return null;
        });

        stringRedisTemplate.opsForList().leftPush("key", "111");
        stringRedisTemplate.opsForList().leftPush("key", "222");
        stringRedisTemplate.opsForList().leftPush("key", "333");

        String value = stringRedisTemplate.opsForList().rightPop("key");
        System.out.println("value: " + value);
        value = stringRedisTemplate.opsForList().rightPop("key");
        System.out.println("value: " + value);
        value = stringRedisTemplate.opsForList().rightPop("key");
        System.out.println("value: " + value);

        return "OK";
    }

運行結(jié)果:

image-20250305195044857

3. 使用 set

    @GetMapping("/testSet")
    public String testSet() {
        stringRedisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });

        stringRedisTemplate.opsForSet().add("key", "111", "222", "333");
        Set<String> result = stringRedisTemplate.opsForSet().members("key");
        System.out.println("result: " + result);

        Boolean exists = stringRedisTemplate.opsForSet().isMember("key", "111");
        System.out.println("exists: " + exists);

        Long count = stringRedisTemplate.opsForSet().size("key");
        System.out.println("count: " + count);

        stringRedisTemplate.opsForSet().remove("key", "111", "222");
        result = stringRedisTemplate.opsForSet().members("key");
        System.out.println("result: " + result);

        return "OK";
    }

運行結(jié)果:

image-20250305195721095

4. 使用 Hash

    @GetMapping("/testHash")
    public String testHash() {
        stringRedisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });

        stringRedisTemplate.opsForHash().put("key", "f1", "111");
        stringRedisTemplate.opsForHash().put("key", "f2", "222");
        stringRedisTemplate.opsForHash().put("key", "f3", "333");

        String value = (String) stringRedisTemplate.opsForHash().get("key", "f1");
        System.out.println("value: " + value);

        Boolean exists = stringRedisTemplate.opsForHash().hasKey("key", "f1");
        System.out.println("exists: " + exists);

        stringRedisTemplate.opsForHash().delete("key", "f1", "f2");

        Long size = stringRedisTemplate.opsForHash().size("key");
        System.out.println("size: " + size);

        return "OK";
    }

運行結(jié)果:

image-20250305201837017

5. 使用 zset

    @GetMapping("/testZSet")
    public String testZSet() {
        stringRedisTemplate.execute((RedisConnection connection) -> {
            connection.flushAll();
            return null;
        });

        stringRedisTemplate.opsForZSet().add("key", "zhangsan", 10D);
        stringRedisTemplate.opsForZSet().add("key", "lisi", 20D);
        stringRedisTemplate.opsForZSet().add("key", "wangwu", 30D);

        Set<String> members = stringRedisTemplate.opsForZSet().range("key", 0, -1);
        System.out.println("members: " + members);

        Set<ZSetOperations.TypedTuple<String>> membersWithScore = stringRedisTemplate.opsForZSet().rangeWithScores("key", 0, -1);
        System.out.println("membersWithScore: " + membersWithScore);

        Double score = stringRedisTemplate.opsForZSet().score("key", "zhangsan");
        System.out.println("score: " + score);

        stringRedisTemplate.opsForZSet().remove("key", "zhangsan");

        Long size = stringRedisTemplate.opsForZSet().size("key");
        System.out.println("size: " + size);

        Long rank = stringRedisTemplate.opsForZSet().rank("key", "lisi");
        System.out.println("rank: " + rank);

        return "OK";
    }

運行結(jié)果:

image-20250305202913409

到此這篇關(guān)于Redis的Spring客戶端使用小結(jié)的文章就介紹到這了,更多相關(guān)Redis Spring客戶端使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Redis請求處理的流程分析

    Redis請求處理的流程分析

    這篇文章主要介紹了Redis?是如何進行請求處理,這篇文章介紹了整個?Redis?的請求處理模型到底是怎樣的。從注冊監(jiān)聽?fd?事件到執(zhí)行命令,到最后將數(shù)據(jù)回寫給客戶端都做了個大概的分析,需要的朋友可以參考下
    2022-07-07
  • 使用JMeter插件Redis Data Set如何實現(xiàn)高性能數(shù)據(jù)驅(qū)動測試

    使用JMeter插件Redis Data Set如何實現(xiàn)高性能數(shù)據(jù)驅(qū)動測試

    RedisDataSet插件是JMeter的一個插件,可以實現(xiàn)從Redis中動態(tài)加載數(shù)據(jù),并將其用作測試參數(shù),本文詳細介紹如何在JMeter中使用RedisDataSet插件,幫助你實現(xiàn)高效的數(shù)據(jù)驅(qū)動測試
    2025-01-01
  • Redis實現(xiàn)Session持久化的示例代碼

    Redis實現(xiàn)Session持久化的示例代碼

    Redis是內(nèi)存數(shù)據(jù)庫,數(shù)據(jù)都是存儲在內(nèi)存中,為了避免服務(wù)器斷電等原因?qū)е翿edis進程異常退出后數(shù)據(jù)的永久丟失,本文主要介紹了Redis實現(xiàn)Session持久化的示例代碼,感興趣的可以了解一下
    2023-09-09
  • Redis中pipeline(管道)的實現(xiàn)示例

    Redis中pipeline(管道)的實現(xiàn)示例

    Redis管道(Pipeline)技術(shù)是一種提高數(shù)據(jù)處理效率的機制,允許客戶端通過一次網(wǎng)絡(luò)往返(RTT)發(fā)送多個命令到服務(wù)端,并一次性接收所有響應(yīng),本文就來實現(xiàn)管道,感興趣的可以了解一下
    2024-10-10
  • Redis中秒殺場景下超時與超賣問題的解決方案

    Redis中秒殺場景下超時與超賣問題的解決方案

    當(dāng)我們在linux中使用ab來模擬高并發(fā)秒殺時可能會遇到兩種問題,“超時和超賣”,本文就詳細介紹了Redis中秒殺場景下超時與超賣問題的解決方案,感興趣的可以了解一下
    2022-05-05
  • 一文帶你了解Redis的三種集群模式

    一文帶你了解Redis的三種集群模式

    Redis?的常用的集群方式主要有以下三種,分別是主從復(fù)制模式、哨兵模式、Redis-Cluster集群模式,那么下面我們就分別了解一下這三種集群模式的優(yōu)點與缺點
    2023-06-06
  • Redis網(wǎng)絡(luò)I/O模型的使用及說明

    Redis網(wǎng)絡(luò)I/O模型的使用及說明

    文章詳細介紹了Redis的網(wǎng)絡(luò)模型,包括單線程和多線程模型,以及I/O多路復(fù)用、事件通知機制、信號驅(qū)動I/O和異步I/O等技術(shù),同時簡要介紹了Redis的通信協(xié)議RESP
    2025-12-12
  • redis啟動失敗問題之完美解決方案

    redis啟動失敗問題之完美解決方案

    這篇文章主要介紹了redis啟動失敗問題之完美解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • redis requires ruby version2.2.2的解決方案

    redis requires ruby version2.2.2的解決方案

    本文主要介紹了redis requires ruby version2.2.2的解決方案,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Redis過期鍵與內(nèi)存淘汰策略深入分析講解

    Redis過期鍵與內(nèi)存淘汰策略深入分析講解

    因為redis數(shù)據(jù)是基于內(nèi)存的,然而內(nèi)存是非常寶貴的資源,然后我們就會對一些不常用或者只用一次的數(shù)據(jù)進行存活時間設(shè)置,這樣才能提高內(nèi)存的使用效率,下面這篇文章主要給大家介紹了關(guān)于Redis中過期鍵與內(nèi)存淘汰策略,需要的朋友可以參考下
    2022-11-11

最新評論

渝中区| 灵璧县| 溧阳市| 郴州市| 尼木县| 丁青县| 崇文区| 海口市| 惠州市| 云安县| 威宁| 六安市| 崇仁县| 高陵县| 秦安县| 伊金霍洛旗| 县级市| 通山县| 云霄县| 贵州省| 四会市| 横峰县| 方山县| 稻城县| 郎溪县| 日土县| 华亭县| 南岸区| 西平县| 黔西| 长寿区| 阿尔山市| 曲周县| 桂阳县| 元朗区| 福建省| 安岳县| 三门县| 进贤县| 高唐县| 临邑县|