Redis数据类型之LIST类型,redis数据类型list
Web程序猿博客:http://blog.csdn.net/thinkercode
list类型-特点
list 是一个链表结构,主要功能是 push、pop、获取一个范围的所有值等等,操作中 key理解为链表的名字。
Redis 的 list类型其实就是一个每个子元素都是 string 类型的双向链表。链表的最大长度是(2的 32 次方)。我们可以通过 push,pop 操作从链表的头部或者尾部添加删除元素。这使得 list既可以用作栈,也可以用作队列。
有意思的是 list 的 pop 操作还有阻塞版本的,当我们[lr]pop 一个 list 对象时,如果 list 是空,或者不存在,会立即返回 nil。但是阻塞版本的 b[lr]pop 可以则可以阻塞,当然可以加超时时间,超时后也会返回 nil。为什么要阻塞版本的 pop 呢,主要是为了避免轮询。举个简单的例子如果我们用 list 来实现一个工作队列。 执行任务的 thread 可以调用阻塞版本的 pop 去获取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,也可以避免轮询带来的延迟。
list类型-应用场景
Redis list应用场景非常多,也是Redis最重要的数据结构之一,比如微博的关注列表,粉丝列表等都可以用Redis的list结构来实现;博客实现中,可为每篇日志设置一个list,在该list中推入进博客评论;也可以使用Redis list实现消息队列。
list中的数据逻辑上存在顺序关系(数组的下表),适合存储带有顺序特性(空间、时间属性)的数据。比如,记录用户在网站上浏览商品id,这种带时间属性的数据可以用来分析用户的购物行为。
list作为queue,一端加入数据,另一端读取数据,最典型的就是生产者/消费者模型,比如:商品秒杀,从已经初始化队列中pop出数据,直到队列为空。
list作为stack,只操作list的一端,数据先进后出。