list類型是簡單的字符串列表,按照插入順序排序。每一個列表最多能夠存儲 232 - 1 個元素(40多億) ,list類型主要有如下應用場景。。html
1. 消息隊列redis
list類型的lpop和rpush(或者反過來,lpush和rpop)能實現隊列的功能,故而能夠用Redis的list類型實現簡單的點對點的消息隊列。不過我不推薦在實戰中這麼使用,由於如今已經有Kafka、NSQ、RabbitMQ等成熟的消息隊列了,它們的功能已經很完善了,除非是爲了更深刻地理解消息隊列,否則我以爲不必去重複造輪子。htm
2. 排行榜blog
list類型的lrange命令能夠分頁查看隊列中的數據。可將每隔一段時間計算一次的排行榜存儲在list類型中,如京東每日的手機銷量排行、學校每次月考學生的成績排名、鬥魚年終盛典主播排名等,下圖是酷狗音樂「K歌擂臺賽」的昨日打擂金曲排行榜,每日計算一次,存儲在list類型中,接口訪問時,經過page和size分頁獲取打擂金曲。(打個小廣告,酷狗音樂「K歌擂臺賽」天天都能產生一批優質翻唱做品,對普通人優質歌聲有興趣的朋友不妨來聽聽)。排序
可是,並非全部的排行榜都能用list類型實現,只有定時計算的排行榜才適合使用list類型存儲,與定時計算的排行榜相對應的是實時計算的排行榜,list類型不能支持實時計算的排行榜,以後在介紹有序集合sorted set的應用場景時會詳細介紹實時計算的排行榜的實現。接口
3. 最新列表隊列
list類型的lpush命令和lrange命令能實現最新列表的功能,每次經過lpush命令往列表裏插入新的元素,而後經過lrange命令讀取最新的元素列表,如朋友圈的點贊列表、評論列表。內存
可是,並非全部的最新列表都能用list類型實現,由於對於頻繁更新的列表,list類型的分頁可能致使列表元素重複或漏掉,舉個例子,當前列表裏由表頭到表尾依次有(E,D,C,B,A)五個元素,每頁獲取3個元素,用戶第一次獲取到(E,D,C)三個元素,而後表頭新增了一個元素F,列表變成了(F,E,D,C,B,A),此時用戶取第二頁拿到(C,B,A),元素C重複了。只有不須要分頁(好比每次都只取列表的前5個元素)或者更新頻率低(好比天天凌晨更新一次)的列表才適合用list類型實現。對於須要分頁而且會頻繁更新的列表,需用使用有序集合sorted set類型實現。另外,須要經過時間範圍查找的最新列表,list類型也實現不了,也須要經過有序集合sorted set類型實現,如以成交時間範圍做爲條件來查詢的訂單列表。以後在介紹有序集合sorted set類型的應用場景時會詳細介紹sorted set類型如何實現最新列表。字符串
那麼問題來了,對於排行榜和最新列表兩種應用場景,list類型能作到的sorted set類型都能作到,list類型作不到的sorted set類型也能作到,那爲何還要使用list類型去實現排行榜或最新列表呢,直接用sorted set類型不是更好嗎?緣由是sorted set類型佔用的內存容量是list類型的數倍之多(以後會在容量章節詳細介紹),對於列表數量很少的狀況,能夠用sorted set類型來實現,好比上文中舉例的打擂金曲排行榜,天天全國只有一份,兩種數據類型的內存容量差距能夠忽略不計,可是若是要實現某首歌曲的翻唱做品地區排行榜,數百萬的歌曲,300多個地區,會產生數量龐大的榜單,或者數量更加龐大的朋友圈點贊列表,就須要慎重地考慮容量的問題了。get
list類型的經常使用命令可參考http://www.runoob.com/redis/redis-lists.html
加入list類型的應用場景後的思惟導圖以下。