當前位置:首頁 » 存儲配置 » jedis存儲list數據

jedis存儲list數據

發布時間: 2023-03-04 21:53:07

Ⅰ 如何在Redis通過StackExchange.Redis 存儲集合類型List

解決方案
如果你僅僅為了緩存存一批量的 List<Customer> 數據, 那麼自己封裝一個ListGet() 和 ListSet()方法吧。
我對比過使用 List 和 String 兩種類型存儲。
Redis 的List類型和 .NET領域還有所不同,實際上,它是一個雙向隊列,可以左右插入值。
所以如果是批量數據插入 那麼必須一個個插入, 代碼比較簡單如下:
//封裝的ListSet

publicvoidListSet<T>(stringkey,List<T>value)
{
.....
//下面的database是redis的資料庫對象.
foreach(varsingleinvalue)
{
vars=ConvertJson(single);//序列化
database.ListRightPush(key,s);//要一個個的插入
}
}
//封裝的ListGet
publicvoidListGet<T>(stringkey)
{
...
//ListRange返回的是一組字元串對象
//需要逐個反序列化成實體
varvList=database.ListRange(key);
List<T>result=newList<T>();
foreach(variteminvList)
{
varmodel=ConvertObj<T>(item);//反序列化
result.Add(model);
}
returnresult;
}


當然測試了一下性能,取20W條數據平均時間


Ⅱ Redis數據結構之string類型和list類型

        String是redis最基礎和最常用的數據結構,其值最大能存儲 512MB,可以是簡單字元串、復雜的xml/json的字元串、二進制圖像或者音頻的字元串、以及可以是數字的字元串。String底層使用的是SDS,是Redis的一種基本數據結構,主要是用於存儲字元串和整數。

    2.1  set命令  set key value

        用於設置給定key的值,如果key存儲了其他值,覆蓋寫入,無視類型。

    2.2 get命令 get key

        獲取指定key的值,如果key不存在返回nil

    2.3 getset命令 get key [value]

        該命令用於獲取指定的key的舊值,然後按照新值對key進行賦值。當key中沒有舊值的時候返回nil。

    2.4 mget命令 get key1 [key2 keyN]

        返回多個key的值,某個key不存在時返回nil

    2.5 decr命令 decr key

        對key對應的數字做減1操作。如果key不存在,那麼在操作之前,這個key對應的值會被置為0。如果key有一個錯誤類型的value或者是一個不能表示成數字的字元串,就返回錯誤。

    2.6 incr命令 incr key

        對key對應的數字做減1操作。如果key不存在,那麼在操作之前,這個key對應的值會被置為0。如果key有一個錯誤類型的value或者是一個不能表示成數字的字元串,就返回錯誤。

    2.7 append命令 append key value

    如果 key 已經存在,並且值為字元串,那麼這個命令會把 value 追加到原來值(value)的結尾。 如果 key 不存在,那麼它將首先創建一個空字元串的key,再執行追加操作,這種情況 APPEND 將類似於 SET 操作。返回append後字元串值(value)的長度。

    3.1 SDS動態字元串

        struct sdshdr {

            unsigned int len;

            unsigned int free;

            char buf[];

        }

        其中,buf表示數據空間,用於存儲字元串;len表示buf中已佔用的位元組數;free表示空閑的位元組數。

    3.2 新的SDS結構

        增加了一個flags來標識類型,用一個位元組(8位)來存儲,前3位表示字元串的類型;剩餘5位,存儲長度小於32的段字元串。

        創建 SDS 的大致流程是這樣的:首先根據字元串長度計算得到 type,根據 type 計算頭部所需長度,然後動態分配內存空間。

        注意:① 創建空字元串時,SDS_TYPE_5 被強制轉換為 SDS_TYPE_8(原因是創建空字元串後,內容可能會頻繁更新而引發擴容操作,故直接創建為 sdshdr8)

                    ②長度計算有 +1 操作,因為結束符 \0 會佔用一個長度的空間。

                    ③返回的是指向 buf 的指針 s。

    4.1 session共享

    4.2 計數器(商品瀏覽記錄)

     4.3 訪問限速

    list類型用來存儲多個有序的字元串,列表當中的每一個字元看做一個元素,一個列表當中可以存儲有一個或者多個元素,redis的list支持存儲2^32次方-1個元素。

    Redis可以從兩端push和pop元素,支持讀取指定范圍或者制定下表的元素。list是一種靈活的鏈式結構,可以充當隊列或者棧的角色。

    list的元素是有序的,且列表內的元素是可以重復的。

    注意:Redis3.2以前,列表底層的編碼是ziplist(壓縮列表)和linkedlist(雙向列表)實現的,因為雙線列表佔用的內存比壓縮列表多,所以當創建新的列表鍵時,列表會優先考慮用壓縮列表,只有在需要的時候才會轉換到雙向列表實現。3.2以後重新引入了一個quicklist,列表底層都是有quicklist實現,quicklist是一個由ziplist組成的雙向列表,每個節點使用ziplist來存儲數據。

       2.1 Lpush命令 lpush key value

        將一個或多個值插入到列表頭部。 如果 key 不存在,則創建list,然後再插入數據操作。 當 key 存在但不是列表類型時,返回一個錯誤。

    2.2 Rpush命令 rpush key value

        將一個或多個值從list的尾部插入

    2.3 Blpop命令 blpop key seconds

        Blpop是取出列表的第一個元素,如果list中沒有元素則會一直等到到超時,或者發現有數據為止,seconds是指定多少秒返回。如沒有數據,則返回nil。

        同理,Bropo為移除list列表的最後一個元素

    2.4 Linsert命令 linsert key before/after val1 val2

        在list列表的某一個元素前或者後插入另外一個元素。當指的的元素不存在時,不執行任何動作。如果列表不存在時,視為空列表,不執行任何動作。

    2.5 Lindex命令 lindex key index

        通過鏈表的下標獲取列表中的元素,可以是-1表示鏈表最後一個元素,-2代表倒數第二個元素,沒有返回nil

    2.6 Llen命令 llen key

        返回list的長度,如果list不存在,返回0

    2.7 Lrange命令

        返回指定list區間內的元素,區間以偏移量start和end決定。其中 0 表示列表的第一個元素, 1 表示列表的第二個元素,以此類推。 也可以使用負數下標,以 -1 表示列表的最後一個元素, -2 表示列表的倒數第二個元素,以此類推。

    5.1 隊列秒殺搶購

        list類型的lpop和rpush(或者反過來,lpush和rpop)能實現隊列的功能,故而可以用Redis的list類型實現簡單的點對點的消息隊列。不過不推薦在實戰中這么使用,因為現在已經有Kafka、NSQ、RabbitMQ等成熟的消息隊列了,它們的功能已經很完善了,除非是為了更深入地理解消息隊列,不然沒必要去重復造輪子。

    5.2 排行榜

        list類型的lrange命令可以分頁查看隊列中的數據。可將每隔一段時間計算一次的排行榜存儲在list類型中。只有定時計算的排行榜才適合使用list類型存儲,與定時計算的排行榜相對應的是實時計算的排行榜,list類型不能支持實時計算的排行榜。

Ⅲ redis存list(int)如何轉換成string

可以使用Python中的str()函數將int轉換為string,例如:

```
list_int = [1,2,3]
list_str = [str(i) for i in list_int]
```

最後,將list_str存入redis即可。

Ⅳ redis怎麼存儲list對象

方案一:直接使用List結構,List裡面存儲二進制的任務Bean信息,這樣做查詢全部任務很方便,查詢單條任務速度較慢,並且刪除和修改狀態很麻煩;方案二:直接使用Hash結構,Hash的key存儲任務ID,value存儲二進制的Bean信息,這樣做查詢所有任務、查詢單條任務以及刪除任務都很快,但是修改狀態也必須先取出數據再修改再插入!

熱點內容
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:534
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:30
linux485 發布:2025-07-05 14:38:28 瀏覽:310
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:760
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:436
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:721
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:246
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:696
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:288
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:837