Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
Redis的列表其实就是一个双向链表,他对于操作列表里面的数据就是0(1)的时间复杂度,到这里我们说一下链表和数组对于内存中的优劣势
其实在c或者c++中每一个变量的申明都会去内存申请空间,然而我们知道数组类型来说就是一段连续的,而对于链表来说他可以是不连续的,如果后面有别的变量占用了内存他就会寻找下一个空缺位置然后位置告诉指针就可以。数组内存存储因为是连续的他要么就是把后面的往后延要么就是重新申请一片足够容纳新数组的内存空间。
以上的结果我们可以看出来:数组必须是在内存中是有一段连续的内存,所以在存储空间有限的情况下数组是慎之又慎的去选择用,申请的多了其他的空间就会浪费,申请的少了就会遇到后期添加的时候对于内存的申请和占用造成不必要的时间浪费。所以对于链表和数组的优劣性一看就已经明白了。因为数组是连续的对于数据的查询是一步到位可以说是0(1)的时间复杂度,然而相对于链表来说就是0(n)的时间复杂度了,因为他所处的是一段不连续的内存空间,要由指针去一一查询。对于增删这种操作来说链表就体现出它的优势了,只要告诉指针删除或者添加键值,就会在内存中找出一点内存存进值在链表中记录键值就可以,时间复杂度为0(1),对于数组来说会重新审批内存这样,它的复杂度就是0(n)了
应用场景:像我前面写的那篇swoole 队列来做消息通知功能就可以用列表来做,最常用的就是博客文章或者是新闻这一类的存储id然后再首页显示的时候前100条或者多少条来取,这样的按块来取Redis列表提供了函数LRANGE key start stop 这样的来取