一、簡介
redis中的列表相當於c#中的linkedlist,也就是鍊錶,如果你研究過鍊錶這個資料結構,肯定知道.它的插入和刪除是非常快的,但是定位卻很慢,因為必須遍歷所有的元素,才能找到對應的值,所以當你需要對列表進行統計的時候,建立跑後台服務去做,而不是使用redis去遍歷,因為開銷很大.
redis中的列表.常用來做非同步佇列,將需要延後處理的任務物件序列化成字串,追加到redis中的列表中,另外開啟乙個執行緒,或者後台服務,去消費這個列表進行資料處理.
注:鍊錶其實和我前面的隨筆中的鏈式程式設計很像,但是redis中的是雙向鍊錶.
注:本文所有的**在前面的隨筆基礎上進行擴充套件
二、列表的用途
列表的先進先出的資料結構,雖然它也可以先進後出,但是不推薦使用.
c#控制台**如下:
擴充套件redisclient.cs的**,新增幾個擴充套件方法,如下:
///program.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)
classprogram
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 ...