自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring Boot:RedisTemplate的List類型操作

數(shù)據(jù)庫(kù) Redis
Redis中的List類型是一個(gè)雙向鏈表結(jié)構(gòu),支持在頭部或尾部進(jìn)行元素的插入和刪除操作,常用于實(shí)現(xiàn)隊(duì)列、棧等場(chǎng)景。RedisTemplate對(duì)Redis中的List類型提供了多種操作方法,通過(guò)opsForList(),可以進(jìn)行List的增刪查操作。

RedisTemplate支持Redis提供的所有數(shù)據(jù)類型(包括String、Hash、List、Set和ZSet等),并提供靈活的配置選項(xiàng)和事務(wù)支持,方便開(kāi)發(fā)者與Redis交互。

Redis中的List類型是一個(gè)雙向鏈表結(jié)構(gòu),支持在頭部或尾部進(jìn)行元素的插入和刪除操作,常用于實(shí)現(xiàn)隊(duì)列、棧等場(chǎng)景。RedisTemplate對(duì)Redis中的List類型提供了多種操作方法,通過(guò)opsForList(),可以進(jìn)行List的增刪查操作。

一、基本操作

1、添加元素

1)將元素添加到列表的頭部

Long leftPush(K key, V value);

返回值:操作后的列表長(zhǎng)度

2)將元素添加到列表的尾部

Long rightPush(K key, V value);

返回值:操作后的列表長(zhǎng)度

3)將多個(gè)元素批量添加到列表的頭部

Long leftPushAll(K key, V... values);

返回值:操作后的列表長(zhǎng)度

4)將多個(gè)元素批量添加到列表的尾部

Long rightPushAll(K key, V... values);

返回值:操作后的列表長(zhǎng)度

示例:

// 將元素添加到列表的頭部
Long listLength = redisTemplate.opsForList().leftPush("news:user:1001", "news1");
log.info("leftPush listLength: {}", listLength);
// 將元素添加到列表的尾部
listLength = redisTemplate.opsForList().rightPush("news:user:1001", "news2");
log.info("rightPush listLength: {}", listLength);
// 將多個(gè)元素批量添加到列表的頭部
listLength = redisTemplate.opsForList().leftPushAll("news:user:1001", "news3", "news4", "news5");
log.info("leftPushAll listLength: {}", listLength);
// 將多個(gè)元素批量添加到列表的尾部
listLength = redisTemplate.opsForList().rightPushAll("news:user:1001", "news6", "news7", "news8");
log.info("rightPushAll listLength: {}", listLength);

2、獲取元素

1)根據(jù)索引獲取列表中的元素

V index(K key, long index);

參數(shù)K var1:鍵值

參數(shù)long var2:索引(包含),為0時(shí)從頭部第一個(gè)元素開(kāi)始,可以為負(fù)數(shù),-1表示最后一個(gè)元素

返回值V:指定索引的元素值

2)獲取列表中指定范圍的元素

List<String> range(K key, long start, long end);

參數(shù):

key:鍵

start:起始索引(包含),為0時(shí)從頭部第一個(gè)元素開(kāi)始,可以為負(fù)數(shù),-1表示最后一個(gè)元素

end:結(jié)束索引(包含),如果結(jié)束索引大于list的長(zhǎng)度,則取從起始索引往后的所有數(shù)據(jù)

示例:

// 根據(jù)索引獲取列表中的元素
String value1 = redisTemplate.opsForList().index("news:user:1001", 0).toString();
log.info("index 0: {}", value1);
String valueInverse1 = redisTemplate.opsForList().index("news:user:1001", -1).toString();
log.info("index -1: {}", valueInverse1);
// 獲取列表中指定范圍的元素
List<String> values = redisTemplate.opsForList().range("news:user:1001", 0, 2);
log.info("values 0 2 : {}", values.toString());
values = redisTemplate.opsForList().range("news:user:1001", 0, 9);
log.info("values 0 9 : {}", values.toString());
values = redisTemplate.opsForList().range("news:user:1001", 0, -1);
log.info("values 0 -1 : {}", values.toString());
values = redisTemplate.opsForList().range("news:user:1001", 0, -3);
log.info("values 0 -3 : {}", values.toString());
values = redisTemplate.opsForList().range("news:user:1001", -3, -1);
log.info("values -3 -1 : {}", values.toString());

3、刪除元素

1)從列表中刪除指定值的元素

Long remove(K key, long count, Object value);

count > 0:從頭部開(kāi)始刪除前count個(gè)匹配元素

count < 0:從尾部開(kāi)始刪除后count個(gè)匹配元素

count = 0:刪除所有匹配元素

value:要?jiǎng)h除的值

返回值:被刪除的元素?cái)?shù)量

2)從列表頭部彈出一個(gè)元素

V leftPop(K key);

返回值:彈出的元素值

3)從列表尾部彈出一個(gè)元素

V rightPop(K key);

返回值:彈出的元素值

4、列表修剪

void trim(K key, long start, long end);

保留指定索引范圍內(nèi)的元素,其余刪除

5、獲取列表長(zhǎng)度

Long size(K key);

返回值:列表的長(zhǎng)度

6、設(shè)置列表中指定索引位置的元素值

void set(K key, long index, V value);

index:元素的索引

value:要設(shè)置的值

二、適用場(chǎng)景

1、消息隊(duì)列

List類型可以用來(lái)實(shí)現(xiàn)簡(jiǎn)單的消息隊(duì)列,生產(chǎn)者將消息放入隊(duì)列,消費(fèi)者從隊(duì)列中取出消息進(jìn)行處理

場(chǎng)景:異步任務(wù)處理、訂單排隊(duì)等需要先進(jìn)先出的場(chǎng)景

2、棧

撤銷操作、瀏覽歷史記錄等后進(jìn)先出的場(chǎng)景

3、緩存最近訪問(wèn)的記錄

可以使用List類型來(lái)緩存最近訪問(wèn)的記錄,例如用戶最近瀏覽的商品

4、任務(wù)調(diào)度

List類型可以用來(lái)實(shí)現(xiàn)任務(wù)調(diào)度,將任務(wù)放入隊(duì)列中,然后由工作線程依次處理

5、分頁(yè)查詢

需要分頁(yè)查詢的數(shù)據(jù)也可以放到List中,如商品列表、評(píng)論

三、注意事項(xiàng)

1、索引范圍

Redis的List的索引從0開(kāi)始,-1表示最后一個(gè)元素,-2表示倒數(shù)第二個(gè),以此類推

2、性能考慮

頻繁的插入/刪除操作在長(zhǎng)列表中部時(shí)性能較低(鏈表結(jié)構(gòu)特性)

使用trim和range時(shí)注意范圍,避免全表掃描

責(zé)任編輯:武曉燕 來(lái)源: 圖南筆記
相關(guān)推薦

2018-11-02 15:45:41

Spring BootRedis數(shù)據(jù)庫(kù)

2017-04-17 10:35:40

Spring BooRedis 操作

2024-01-10 08:20:13

參數(shù)轉(zhuǎn)換技巧

2023-04-28 15:15:39

數(shù)據(jù)庫(kù)JPA

2022-04-28 08:05:05

數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)交互

2022-07-18 09:41:29

屬性類型安全Spring

2022-02-17 13:39:09

AOP接口方式

2023-09-27 08:14:56

2023-11-01 15:07:51

環(huán)境配置方式

2021-07-26 11:09:43

NacosSpring Boot配置

2021-09-15 16:20:02

Spring BootFilterJava

2023-12-08 07:52:51

Spring項(xiàng)目開(kāi)發(fā)

2022-03-07 09:00:00

HTTPS證書(shū)中間件

2024-11-28 09:43:04

2024-08-13 08:41:18

2017-09-20 09:46:38

Spring BootSpring Clou內(nèi)存

2017-03-23 09:29:06

2021-04-13 20:24:57

Spring Boot注解spring

2024-11-21 14:42:31

2024-01-23 08:47:13

BeanSpring加載方式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)