Redis學習系列三List列表

2021-09-07 20:49:18 字數 1790 閱讀 5321

一、簡介

redis中的列表相當於c#中的linkedlist,也就是鍊錶,如果你研究過鍊錶這個資料結構,肯定知道.它的插入和刪除是非常快的,但是定位卻很慢,因為必須遍歷所有的元素,才能找到對應的值,所以當你需要對列表進行統計的時候,建立跑後台服務去做,而不是使用redis去遍歷,因為開銷很大.

redis中的列表.常用來做非同步佇列,將需要延後處理的任務物件序列化成字串,追加到redis中的列表中,另外開啟乙個執行緒,或者後台服務,去消費這個列表進行資料處理.

注:鍊錶其實和我前面的隨筆中的鏈式程式設計很像,但是redis中的是雙向鍊錶.

注:本文所有的**在前面的隨筆基礎上進行擴充套件

二、列表的用途

列表的先進先出的資料結構,雖然它也可以先進後出,但是不推薦使用.

c#控制台**如下:

擴充套件redisclient.cs的**,新增幾個擴充套件方法,如下:

///

///非同步在指定索引處,新增乙個值

/// ///

//////

目標索引

///public

static

async task listsetbyindexasync(rediskey key, redisvalue value,long

index)

//////

非同步向列表的右邊追加多個值

/// ///

//////

///public

static

async tasklistrightpushasync(rediskey key, redisvalue value)

//////

非同步獲取列表最左邊的值

/// ///

//////

public

static

async tasklistleftpopasync(rediskey key)

//////

非同步獲取鍊錶的長度

/// ///

///public

static

async tasklistlengthasync(rediskey key)

program.cs **如下:

class

program

static

void main(string

args)

static

async

void

stringsetgetasync()

);console.writeline(

"向鍵為'列表鍵值'的列表成功新增了條記錄

", count);

//模擬消費者,每次取左邊乙個消費

注:這裡我只使用了少量元素,進行測試,如果要測試併發問題,可以將元素繼續增加,然後觀察結果,這裡我就不演示了.

三、注意點

個人覺得列表,上面這種用法掌握就ok了,其它涉及到索引計算,或者獲取所有的列表元素等操作,都不建議使用.因為複雜度過高一般為o(n),記憶體等問題的影響.如果真要做,建議使用後台服務去做,在訪問低谷期去做.

Redis學習(十) 列表 List

redis列表是簡單的字串列表,按照插入順序排序。你可以新增乙個元素到列表的頭部 左邊 或者尾部 右邊 乙個列表最多可以包含 232 1 個元素 4294967295,每個列表超過40億個元素 redis 127.0.0.1 6379 lpush runoobkey redis integer 1r...

Redis系列 list型別

list是乙個鍊錶結構,主要功能是push pop,獲取乙個範圍內的所有值等。key可以理解為鍊錶的名稱。list型別其實每乙個子元素都是string型別的雙向鍊錶。我們可以通過push pop操作從鍊錶頭部或者尾部新增刪除元素,這樣list既可以作為棧也可以作為佇列。lpush 在key對應的頭部...

Redis學習(六) 列表型別(List)

列表型別可以儲存乙個有序的字串列表,常用的操作是向列表的兩端新增元素,或者獲取列表的乙個片段 與雜湊型別最多能容納的字段數量相同,乙個列表型別鍵最多能容納2 32 1個元素。優點 列表型別的內部是使用 double linked list 雙向鍊錶實現的,所以像列表兩端新增元素的時間複雜度為o 1 ...