RPUSH RPUSH key- name value [value ...]—— 将 一个 或 多个 值 推入 列表 的 右端 LPUSH LPUSH key- name value [value ...]—— 将 一个 或 多个 值 推入 列表 的 左端 RPOP RPOP key- name—— 移 除 并 返回 列表 最 右端 的 元素 LPOP LPOP key- name—— 移 除 并 返回 列表 最 左端 的 元素 LINDEX LINDEX key- name offset—— 返回 列表 中 偏移量 为 offset 的 元素 LRANGE LRANGE key- name start end—— 返回 列表 从 start 偏移量 到 end 偏移量 范围内 的 所有 元素, 其中 偏移量 为 start 和 偏移量 为 end 的 元素 也会 包含 在被 返回 的 元素 之内 LTRIM LTRIM key- name start end—— 对列 表 进行 修剪, 只 保留 从 start 偏移量 到 end 偏移量 范围内 的 元素, 其中 偏移量 为 start 和 偏移量 为 end 的 元素 也会 被 保留 BLPOP BLPOP key- name [key- name ...] timeout—— 从 第一个 非 空 列表 中弹 出 位于 最 左端 的 元素, 或者 在 timeout 秒 之内 阻塞 并 等待 可 弹出 的 元素 出现 BRPOP BRPOP key- name [key- name ...] timeout—— 从 第一个 非 空 列表 中弹 出 位于 最 右端 的 元素, 或者 在 timeout 秒 之内 阻塞 并 等待 可 弹出 的 元素 出现 RPOPLPUSH RPOPLPUSH source- key dest- key—— 从 source- key 列表 中弹 出 位于 最 右端 的 元素, 然后 将 这个 元素 推入 dest- key 列表 的 最 左端, 并向 用户 返回 这个 元素 BRPOPLPUSH BRPOPLPUSH source- key dest- key timeout—— 从 source- key 列表 中弹 出 位于 最 右端 的 元素, 然后 将 这个 元素 推入 dest- key 列表 的 最 左端, 并向 用户 返回 这个 元素; 如果 source- key 为 空, 那么 在 timeout 秒 之内 阻塞 并 等待 可 弹出的元素出现 List数据结构是用来存储多个有序的字符串,List中的每个字符串成为元素,List提供了节点重排和节点顺序访问的能力,在Redis中,List可以在两端push和pop元素,还可以获取指定范围的元素列表,获取指定索引下标的元素等,List数据结构主要有zipList(压缩链表)和LinkedList(双向链表)两种实现方式。首先我们可以先看看LinkedList的结构: type struct list{ //表头节点 listNode \*head; //表尾节点 listNode \*tail; //包含的节点总数 unsigned long len; }; 可以看到每个LinkedList中都会包含一个表头节点*head和一个表尾结点*tail,在LinkedList中每个节点都会有一个*prev指向前一个元素,同时还有一个*next指向后一个元素,每个节点的value就是节点的值。从而实现双向链表,理解起来实际上和C中的双向链表有很大程度的相似性。而另一种实现方式zipList是基于连续内存实现,有点类似于数组方式,但是和数组有点不一致的是zipList的每一个entry的大小可能不一致,需要特殊方法去控制解决,但是在执行push,pop操作时会有数据的迁移,时间复杂度为O(n), 所以一般只有在元素较少时才会使用zipList,我们可以看看zipList的结构: type struct ziplist{ //整个压缩列表的字节数 uint32\_t zlbytes; //记录压缩列表尾节点到头结点的字节数,直接可以求节点的地址 uint32\_t zltail\_offset; //记录了节点数,有多种类型,默认如下 uint16\_t zllength; //节点 List entryX; } zipList中每个节点都会有以下几个参数信息: * previous\_entry\_length:记录前一个节点的字节长度 * content:节点所存储的内容,可以是一个字节数组或者整数 * encoding:记录content属性中所保存的数据类型以及长度 \*\*\* List数据类型适用场景\*\* 在渲染文章列表时可以使用List数据类型,一般情况下每个用户都会有自己发布的文章列表,如果需要展示文章列表,就可以使用List数据类型,不但可以有序而且可以按照索引范围去查询文章列表。