一.List类型(头尾能高效插入,删除)1.基本介绍⭐Redis中list是一个双端队列,从两头插入/删除都高效1)搭配使用rpush和lpop,相当于队列(先进先出)2)搭配使用rpush和rpop,相当于栈(先进后出)列表(List)特点:①列表元素有序:A-B≠B-A②区分获取命令(lindex)和删除命令(lrem)③列表中的元素是允许重复的 (hash里的field是不能重复的)2.List命令:①:lpush命令:将一个或多个元素头插到list中语法: lpush key element [element...] ---返回list的长度例:lpush key 1 2 3 4 --- [4,3,2,1]注:列表可存多种数据类型的数据,但这些数据只能是同一种数据类型②:lrange命令:查看list中指定范围内的元素,区间:前闭后闭[ ]语法: lrange key start stop ---返回范围内所有元素例: lrange key 0 -1 ---4,3,2,1③:lpushx命令:当key存在,则头插到list中,若不存在,则直接返回语法: lpushx key element [element...] ---返回list长度④:rpush命令:尾插语法: rpush key element [element...]例: rpush key 1 2 3 4 ---[1,2,3,4]⑤:rpushx命令:当key存在,则尾插,不存在,则直接返回语法:rpushx key element [element...]⑥:lpop命令:头删语法:lpop key ---返回删的元素 或者 nil(当key不存在,或则删到key没有值时返回)⑦:rpop命令:尾删语法:rpop key [count]在redis6.2及以上才能用这个count⑧:lindex命令:获取从左往右数第index个元素(根据下标获取元素)语法: lindex key index ---返回这个元素,若下表非法,则返回nil⑨:linsert命令:插入元素在privot(基准值)前/后位置语法: linsert key before/after privot element --返回新列表长度注:当基准值有多个(重复时),则从左往右找的第一个基准值时插入⑩llen命令:获取list长度语法:llen key ---返回值:存在返回list长度,不存在返回0⑪.lrem命令:删除list元素语法: lrem key count element --返回被删除的元素个数count:要删元素个数element:要删元素当count0时:从左往右删当count0时,从右往左删当count0时,删除list中全部element值⑫:ltrim命令:保留区间元素,其他的删了语法: ltrim key start stop --返回OK⑬:lset命令:根据下标修改元素语法: lset key index elementindex:要修改元素的下标element:修改值注:下标越界会报错⑭.阻塞版本命令:blpop和brpop语法:blpop key [key ..] timeout --返回key弹出最左侧第一个元素brpop同理此处可指定一个或多个key;每个key对应一个list.若这些list有任何一个非空,blpop可立即返回,若都为空,就阻塞timeout等待,直到其他redis客户端往list中插入元素①若list中存在元素,blpop和brpop与lpop和rpop作用完全相同②若list中为空,blpop和brpop则残生阻塞,直到阻塞到队列不为空为止(及其他客户端set新的key)注:redis 中的list也相当阻塞队列一样,但redis里的list无容量上限,所以只需要考虑出队阻塞,而不用考虑入队阻塞 .同一个客户端 绝对不能 自己阻塞自己、再自己解除阻塞必须用 另一个客户端 去操作 key才能解除阻塞阻塞版会根据timeout,阻塞一段时间,期间redis仍可以执行其他命令⑮ list小结:1 lpush 2lrange 3lpushx 4rpush 5rpushx 6lpop 7rpop 8 lindex 9linsert 10 llen 11 lrem 12ltrim 13lset 14blpop和brpop4.list内部编码(可用object encoding key命令来查看类型)quicklist:相当于压缩列表和链表的结合5.list应用场景①用list作数组这样的结构,存储多个元素②作消息队列(先进先出)③Redis分频道阻塞消息队列模型④微博Timeline