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

SpringBoot中RedisTemplate與StringRedisTemplate常用Redis API速查

 更新時(shí)間:2026年06月12日 08:53:10   作者:西涼的悲傷  
這篇文章主要介紹了StringRedisTemplate、RedisTemplate和Redis操作,概括了StringRedisTemplate與RedisTemplate的區(qū)別、常見(jiàn)操作及應(yīng)用場(chǎng)景,特別強(qiáng)調(diào)了StringRedisTemplate在字符串操作中的優(yōu)勢(shì)和常用操作如set、get、increment等,適合用于緩存、計(jì)數(shù)器和Token存儲(chǔ)等

一、StringRedisTemplate 和 RedisTemplate 區(qū)別

1. StringRedisTemplate

@Autowired
private StringRedisTemplate stringRedisTemplate;

特點(diǎn):

  • Key 默認(rèn)使用 StringRedisSerializer
  • Value 默認(rèn)使用 StringRedisSerializer
  • Redis 中存儲(chǔ)的數(shù)據(jù)可直接查看
  • 適合存儲(chǔ):
    • String
    • JSON字符串
    • 計(jì)數(shù)器
    • 緩存數(shù)據(jù)

例如:

stringRedisTemplate.opsForValue().set("user:1", "{\"name\":\"Tom\"}");

Redis中:

user:1
{"name":"Tom"}

2. RedisTemplate

@Autowired
private RedisTemplate<String,Object> redisTemplate;

特點(diǎn):

  • 支持存儲(chǔ)任意對(duì)象
  • 默認(rèn)使用 JDK 序列化
  • Redis 中存儲(chǔ)的是二進(jìn)制數(shù)據(jù)

例如:

User user = new User();
user.setName("Tom");

redisTemplate.opsForValue().set("user:1", user);

Redis中看到:

\xac\xed\x00\x05sr...

3. 兩者對(duì)比

對(duì)比項(xiàng)StringRedisTemplateRedisTemplate
Key類(lèi)型String泛型
Value類(lèi)型StringObject
默認(rèn)序列化StringSerializerJDKSerializer
可讀性
性能較高較低
使用場(chǎng)景緩存、計(jì)數(shù)器、Token存儲(chǔ)對(duì)象

二、StringRedisTemplate 常見(jiàn)操作

1.String(字符串)操作

獲得操作對(duì)象:

ValueOperations<String,String> ops = stringRedisTemplate.opsForValue();

(1) set

設(shè)置值

ops.set("name","Tom");

返回值:

void

Redis:

name=Tom

(2) set(帶過(guò)期時(shí)間)

ops.set(
    "name",
    "Tom",
    10,
    TimeUnit.MINUTES
);

說(shuō)明:

  • 設(shè)置緩存
  • 10分鐘后自動(dòng)過(guò)期

返回值:

void

(3) setIfAbsent(SETNX)

不存在才設(shè)置

Boolean result = ops.setIfAbsent("lock","1");

返回:

true

表示設(shè)置成功

false

表示Key已存在

常用于:

  • 分布式鎖

(4) get

獲取值

String value = ops.get("name");

返回:

Tom

(5) getAndSet

獲取舊值并設(shè)置新值

String old = ops.getAndSet(
            "name",
            "Jerry"
        );

返回:

Tom

(6) increment

自增

Long result = stringRedisTemplate
            .boundValueOps("count")
            .increment(1);

返回:

自增后的值

例如:

1
2
3
...

(7) decrement

自減

Long result =
        stringRedisTemplate
            .boundValueOps("count")
            .increment(-1);

返回:

自減后的值

(8) append

追加字符串

Integer length = ops.append(
            "name",
            "_java"
        );

Redis:

Tom_java

返回:

追加后字符串長(zhǎng)度

(9) multiGet

批量獲取

List<String> list = ops.multiGet(
                Arrays.asList(
                    "k1",
                    "k2",
                    "k3"
                )
        );

返回:

List<String>

2.Key 操作

(1) hasKey

判斷Key是否存在

Boolean exists = stringRedisTemplate.hasKey("name");

返回:

true
false

(2) delete

刪除Key

Boolean result =
        stringRedisTemplate.delete("name");

返回:

true
false

(3) 批量刪除

Long count = stringRedisTemplate.delete(
                Arrays.asList(
                    "k1",
                    "k2"
                )
        );

返回:

刪除數(shù)量

(4) expire

設(shè)置過(guò)期時(shí)間

Boolean result = stringRedisTemplate.expire(
                "name",
                30,
                TimeUnit.MINUTES
        );

返回:

true
false

(5) getExpire

獲取剩余過(guò)期時(shí)間

Long expire = stringRedisTemplate.getExpire("name");

返回:

指定單位:

Long expire = stringRedisTemplate.getExpire(
                "name",
                TimeUnit.MINUTES
        );

(6) persist

取消過(guò)期時(shí)間

Boolean result = stringRedisTemplate.persist("name");

返回:

true
false

(7) rename

重命名Key

stringRedisTemplate.rename(
        "oldKey",
        "newKey"
);

返回:

void

3.Hash 操作

相當(dāng)于:

user:1
{
  name:Tom,
  age:18
}

(1) put

stringRedisTemplate.opsForHash()
        .put(
            "user:1",
            "name",
            "Tom"
        );

返回:

void

(2) get

Object value = stringRedisTemplate.opsForHash()
            .get(
                "user:1",
                "name"
            );

返回:

Tom

(3) putAll

批量存儲(chǔ)

Map<String,String> map = new HashMap<>();

map.put("name","Tom");
map.put("age","18");

stringRedisTemplate.opsForHash().putAll("user:1",map);

(4) entries

獲取整個(gè)Hash

Map<Object,Object> map =
        stringRedisTemplate
                .opsForHash()
                .entries("user:1");

(5) delete

刪除字段

Long count = stringRedisTemplate
                .opsForHash()
                .delete(
                    "user:1",
                    "age"
                );

返回:

刪除數(shù)量

(6) hasKey

判斷字段存在

Boolean result = stringRedisTemplate
                .opsForHash()
                .hasKey(
                    "user:1",
                    "name"
                );

4.List 操作

(1) leftPush

頭插

Long size = stringRedisTemplate
            .opsForList()
            .leftPush(
                "list",
                "A"
            );

返回:

插入后長(zhǎng)度

(2) rightPush

尾插

Long size = stringRedisTemplate
            .opsForList()
            .rightPush(
                "list",
                "B"
            );

(3) range

查詢區(qū)間

List<String> list = stringRedisTemplate
            .opsForList()
            .range(
                "list",
                0,
                -1
            );

返回全部元素

(4) leftPop

頭出隊(duì)

String value = stringRedisTemplate
            .opsForList()
            .leftPop("list");

(5) rightPop

尾出隊(duì)

String value = stringRedisTemplate
            .opsForList()
            .rightPop("list");

(6) size

Long size = stringRedisTemplate
            .opsForList()
            .size("list");

5.Set 操作

(1) add

添加元素

Long count = stringRedisTemplate
            .opsForSet()
            .add(
                "user:set",
                "1",
                "2",
                "3"
            );

返回:

新增成功數(shù)量

(2) members

獲取全部元素

Set<String> set = stringRedisTemplate
            .opsForSet()
            .members(
                "user:set"
            );

(3) isMember

判斷元素是否存在

Boolean result = stringRedisTemplate
            .opsForSet()
            .isMember(
                "user:set",
                "1"
            );

(4) remove

刪除元素

Long count = stringRedisTemplate
            .opsForSet()
            .remove(
                "user:set",
                "1"
            );

(5) size

Long size = stringRedisTemplate
            .opsForSet()
            .size("user:set");

6.ZSet(有序集合)操作

適用于:

  • 排行榜
  • 熱搜榜
  • 積分榜

(1) add

Boolean result = stringRedisTemplate
            .opsForZSet()
            .add(
                "rank",
                "Tom",
                100
            );

score:

100

(2) incrementScore

分?jǐn)?shù)增加

Double score = stringRedisTemplate
            .opsForZSet()
            .incrementScore(
                "rank",
                "Tom",
                10
            );

返回:

最新score

(3) range

升序查詢

Set<String> set = stringRedisTemplate
            .opsForZSet()
            .range(
                "rank",
                0,
                9
            );

(4) reverseRange

降序查詢

Set<String> set = stringRedisTemplate
            .opsForZSet()
            .reverseRange(
                "rank",
                0,
                9
            );

(5) rank

獲取排名

Long rank = stringRedisTemplate
            .opsForZSet()
            .rank(
                "rank",
                "Tom"
            );

注意:

從0開(kāi)始

三、RedisTemplate 常見(jiàn)操作

因?yàn)?RedisTemplate 支持對(duì)象存儲(chǔ),所以最常見(jiàn)的是:

RedisTemplate<String,Object>

1.存儲(chǔ)對(duì)象

User user = new User(1L, "Tom");

redisTemplate.opsForValue()
        .set(
            "user:1",
            user
        );

2.獲取對(duì)象

User user = (User) redisTemplate
        .opsForValue()
        .get("user:1");

3.setIfAbsent

setIfAbsent用于向 Redis 中設(shè)置一個(gè)鍵值對(duì),如果該鍵不存在時(shí)才進(jìn)行設(shè)置,同時(shí)設(shè)置這個(gè)鍵的過(guò)期時(shí)間,最后返回 true;如果鍵已經(jīng)存,則不做任何修改并返回 false

下面的示例,設(shè)置鍵為 “lock” ,值為 UUID.randomUUID().toString() ,過(guò)期時(shí)間為 30 秒

Boolean lock = redisTemplate
            .opsForValue()
            .setIfAbsent(
                "lock",
                UUID.randomUUID().toString(),
                30,
                TimeUnit.SECONDS
            );

這是分布式鎖常用寫(xiě)法。

3.Hash存儲(chǔ)對(duì)象

Hash 類(lèi)似于 Java 中的 Map。

存值和修改值使用 put :

// 相當(dāng)于:
//Map<String, user> userMap = new HashMap<>();
//userMap.put(user.getId(),user);
redisTemplate.opsForHash()
        .put(
            "userMap",
            user.getId(),
            user
        );

// 相當(dāng)于:
//Map<String, Object> user_1 = new HashMap<>();
//user_1.put("name","Tom");
//user_1.put("age","18");
redisTemplate.opsForHash()
        .put("user_1",
             "name",
             "Tom");

redisTemplate.opsForHash()
        .put("user_1",
             "age",
             18);
        

如果要把整個(gè) Map 存儲(chǔ)到 redis ,可以使用 putAll :

Map<String,Object> userMap = new HashMap<>();

userMap.put("name","Tom");
userMap.put("age",18);

redisTemplate.opsForHash()
        .putAll(
            "userMap",
            map
        );

取值:

Object age = redisTemplate
            .opsForHash()
            .get(
                "user_1",
                "age"
            );

實(shí)際項(xiàng)目常用寫(xiě)法

利用 Bean 轉(zhuǎn) Map:

Map<String,Object> map = BeanUtil.beanToMap(user);

redisTemplate.opsForHash().putAll("user_1", map);

所以:Hash存儲(chǔ)對(duì)象
本質(zhì)上就是把Java對(duì)象拆成Redis Hash

4.multiSet批量存儲(chǔ)

普通寫(xiě)法:

Map<String,Object> map = new HashMap<>();

map.put("user:1","Tom");
map.put("user:2","Jerry");
map.put("user:3","Lucy");

//執(zhí)行了3此設(shè)置,三次網(wǎng)絡(luò)交互
redisTemplate.opsForValue().set("user:1","Tom");
redisTemplate.opsForValue().set("user:2","Jerry");
redisTemplate.opsForValue().set("user:3","Lucy");

批量存儲(chǔ):

Map<String,Object> map = new HashMap<>();

map.put("user:1","Tom");
map.put("user:2","Jerry");
map.put("user:3","Lucy");

redisTemplate.opsForValue() .multiSet(map);

注意:
multiSet 是值的多個(gè)Redis鍵值對(duì)一次進(jìn)行批量存儲(chǔ),不是 Hash。

5.List存儲(chǔ)

redisTemplate.opsForList()
        .rightPush(
            "orderQueue",
            "order1"
        );

redisTemplate.opsForList()
        .rightPush(
            "orderQueue",
            "order2"
        );

Redis 中:

orderQueue:
order1
order2

查詢:

將范圍設(shè)定為從 0-1,即提取該列表從頭到尾的所有數(shù)據(jù)。如果該鍵不存在或?qū)?yīng)的列表為空,則返回一個(gè)空列表。

List<Object> list = redisTemplate
            .opsForList()
            .range(
                "orderQueue",
                0,
                -1
            );

四、總結(jié)

Java結(jié)構(gòu)Redis結(jié)構(gòu)Template操作
StringStringopsForValue()
ObjectString(Value)opsForValue()
MapHashopsForHash()
ListListopsForList()
SetSetopsForSet()
TreeSet/排行榜ZSetopsForZSet()

可以記住一個(gè)核心原則:

opsForValue()
    一個(gè)Key對(duì)應(yīng)一個(gè)Value

opsForHash()
    一個(gè)Key對(duì)應(yīng)多個(gè)Field-Value

opsForList()
    一個(gè)Key對(duì)應(yīng)一個(gè)列表

opsForSet()
    一個(gè)Key對(duì)應(yīng)一個(gè)無(wú)序集合

opsForZSet()
    一個(gè)Key對(duì)應(yīng)一個(gè)帶分?jǐn)?shù)(score)的有序集合

在實(shí)際 Spring Boot 項(xiàng)目里,最常用的其實(shí)是:

opsForValue()   // 緩存對(duì)象、緩存JSON
opsForHash()    // 用戶信息、配置項(xiàng)
opsForZSet()    // 排行榜

五、開(kāi)發(fā)中最常用的 Redis 場(chǎng)景

1 緩存

ops.set(
    "product:1001",
    json,
    30,
    TimeUnit.MINUTES
);

2 分布式鎖

Boolean success =
    ops.setIfAbsent(
        lockKey,
        uuid,
        30,
        TimeUnit.SECONDS
    );

3 計(jì)數(shù)器

ops.increment(
    "article:view:1"
);

4 排行榜

opsForZSet()
    .incrementScore(
        "rank",
        userId,
        score
    );

5 消息隊(duì)列(簡(jiǎn)單場(chǎng)景)

opsForList()
    .rightPush(
        "queue",
        message
    );

6 用戶簽到

opsForSet()
    .add(
        "sign:20260801",
        userId
    );

以上就是SpringBoot中RedisTemplate與StringRedisTemplate常用Redis API速查的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot常用Redis API速查的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一個(gè)Java中BigDecimal的問(wèn)題記錄

    一個(gè)Java中BigDecimal的問(wèn)題記錄

    這篇文章主要給大家介紹了關(guān)于Java中一個(gè)BigDecimal問(wèn)題的相關(guān)資料,通過(guò)文中介紹的方法可以很方便的解決BigDecimal進(jìn)行計(jì)算的時(shí)候不管怎么計(jì)算,最后得到的值都沒(méi)有變化的問(wèn)題,需要的朋友可以參考下
    2021-11-11
  • Java線程隊(duì)列LinkedBlockingQueue的使用

    Java線程隊(duì)列LinkedBlockingQueue的使用

    本文主要介紹了Java線程隊(duì)列LinkedBlockingQueue的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • idea中javaweb的jsp頁(yè)面圖片加載不出來(lái)問(wèn)題及解決

    idea中javaweb的jsp頁(yè)面圖片加載不出來(lái)問(wèn)題及解決

    這篇文章主要介紹了idea中javaweb的jsp頁(yè)面圖片加載不出來(lái)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 高可用架構(gòu)etcd選主故障主備秒級(jí)切換實(shí)現(xiàn)

    高可用架構(gòu)etcd選主故障主備秒級(jí)切換實(shí)現(xiàn)

    這篇文章主要為大家介紹了高可用架構(gòu)etcd選主故障主備秒級(jí)切換的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • mybatis模糊查詢、分頁(yè)和別名配置的方法

    mybatis模糊查詢、分頁(yè)和別名配置的方法

    這篇文章主要介紹了mybatis模糊查詢、分頁(yè)和別名配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java Socket實(shí)現(xiàn)多人聊天系統(tǒng)

    Java Socket實(shí)現(xiàn)多人聊天系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java Socket實(shí)現(xiàn)多人聊天系統(tǒng),具有圖形界面,實(shí)現(xiàn)文件傳輸功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java集合Iterator迭代的實(shí)現(xiàn)方法

    Java集合Iterator迭代的實(shí)現(xiàn)方法

    這篇文章主要介紹了Java集合Iterator迭代接口的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒家,對(duì)Java 結(jié)合iterator知識(shí)感興趣的朋友一起看看吧
    2016-08-08
  • 在IDEA里Git特別慢的問(wèn)題及解決過(guò)程

    在IDEA里Git特別慢的問(wèn)題及解決過(guò)程

    IDEA中Git操作慢的問(wèn)題可以通過(guò)重命名`runnerw.exe`和`runnerw64.exe`文件來(lái)解決,這可能是由于殺毒軟件或防火墻攔截導(dǎo)致的
    2025-12-12
  • Java 動(dòng)態(tài)代理你真的懂了嗎(動(dòng)態(tài)和代理)

    Java 動(dòng)態(tài)代理你真的懂了嗎(動(dòng)態(tài)和代理)

    動(dòng)態(tài)代理分兩部分,動(dòng)態(tài)和代理,今天通過(guò)本文給大家普及代碼模式及動(dòng)態(tài)代理的概念及示例代碼,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • Spring Cloud實(shí)現(xiàn)5分鐘級(jí)區(qū)域切換的操作方法

    Spring Cloud實(shí)現(xiàn)5分鐘級(jí)區(qū)域切換的操作方法

    Spring Cloud 2023.x通過(guò)智能路由預(yù)熱、多活數(shù)據(jù)同步和自動(dòng)化流量切換,實(shí)現(xiàn)5分鐘內(nèi)完成跨區(qū)域故障轉(zhuǎn)移,本文以某電商平臺(tái)從AWS亞太切換至阿里云華東的實(shí)戰(zhàn)為例,詳解關(guān)鍵技術(shù)路徑,需要的朋友可以參考下
    2025-04-04

最新評(píng)論

栾城县| 德保县| 中牟县| 余姚市| 毕节市| 瓦房店市| 临沭县| 阿巴嘎旗| 秀山| 营山县| 乌拉特中旗| 慈利县| 青阳县| 绍兴县| 弥渡县| 佳木斯市| 喀喇| 临汾市| 白银市| 顺平县| 玉门市| 台州市| 肥城市| 开封县| 囊谦县| 南木林县| 西乡县| 龙里县| 盐津县| 兴隆县| 柘城县| 博湖县| 沾化县| 广宗县| 崇明县| 即墨市| 元朗区| 全州县| 化德县| 尚志市| 汕尾市|