Redis之List 1.特点 队列:先进先出 栈:先进后出 数组:LIndEX LSET 阻塞:BL BR 2.操作 栈原则:lpush lpop:先进后出 rpop:先进先出 127.0.0.1:6379...lk 0 -1 1) "c" 2) "abc" 3) "c" 4) "123" 5) "bj" 6) "ab" 7) "redis" 8) "list" 127.0.0.1:6379> lrem lk...) "list" 127.0.0.1:6379> rpush lk1 c abc c ab 123 ab bj ab redis list (integer) 10 127.0.0.1:6379> lrange..." 2) "123" 3) "bj" 4) "redis" 5) "list" 127.0.0.1:6379> ltrim lk1 0 -1 OK 127.0.0.1:6379> lrange lk1...0 -1 1) "abc" 2) "123" 3) "bj" 4) "redis" 5) "list" 127.0.0.1:6379> ltrim lk1 0 0 OK 127.0.0.1:6379>
在Redis中 可以对列表两端插入push 或者弹出pop,或者获取指定访问的元素列表,获取指定索引的下标的元素。...list2 list3 0 1) "list1" 2) "a" (65.15s) 同理,如果多个客户端对一个key 执行brpop,那么最早发出brpop的会优先弹出元素值。...内部编码 list类型的内部编码有2种: ziplist 压缩列表:当列表类型元素个数小于list-max-ziplist-entries配置(默认512个),同时所有值都小于list-max-ziplist-value...配置(默认64个字节)redis会使用ziplist作为列表的内部实现。...linkedlist链表当list类型无法满足ziplist的条件是,redis会使用linkedlist作为列表的内部实现。
序列(list)两端推入、或弹出元素,修剪、查找、移除元素。...list 中可以有重复值 lpush list1 12 lpush list1 13 rpop list1 数据不唯一 lpush list2 12 lpush list2 13 lpush list1...12 llen list2
127.0.0.1:6379> lpush list a (integer) 1 127.0.0.1:6379> lpush list b c (integer) 3 127.0.0.1:6379> object...encoding list "quicklist" quicklist quicklist(快速列表)是ziplist和linkedlist的结合体。...fill factor for individual nodes */ unsigned int compress : 16; /* 压缩深度 0: 不压缩 */ } quicklist; redis.conf...相关配置: |参数|含义| |--|--| |list-max-ziplist-size(fill)|正数表示单个ziplist最多所包含的entry个数。...应用场景 简单的消息队列(生产环境建议使用专业的MQ服务) List提供了两个阻塞的弹出操作:BLPOP/BRPOP,可以设置超时时间。
Redis 列表(List) Redis列表是简单的字符串列表,按照插入顺序排序。...实例 [root@localhost ~]# redis-cli 127.0.0.1:6379> LPUSH testkey redis (integer) 1 127.0.0.1:6379> LPUSH...6379> LPUSH testkey mysql (integer) 3 127.0.0.1:6379> LRANGE testkey 0 10 1) "mysql" 2) "mongodb" 3) "redis...Redis 列表命令 下表列出了列表相关的基本命令: 序号 命令及描述 1 BLPOP key1 [key2 ] timeout移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
redis系列文章: https://liudongdong.top/categories/redis 本篇来源: https://liudongdong.top/archives/rediswu-redis-zhi-list...一、List概述 Redis列表是简单的字符串列表,按照插入顺序排序。...list可以理解为一个通道,可以左边进,也可以右边进。...16293521471.png 根据上边的通道,也可以变体为俩种方式: 左进右出:队列 左进左出:桶 二、List分类 根据个人理解和便于学习,个人进行了list命令的分类!...根据命令性质分为: 增:增加list数据 删:删除list数据 改:修改list数据 查:查询list数据 1.
List命令 Redis的列表允许用户从序列的两端推入元素或者弹出元素。可以来创建常见的队列信息。 List常用命令 blpop: 列表阻塞式弹出。
在 Redis 中,List 是一种非常常见的数据类型,用于表示一个有序的字符串集合。...与传统的链表结构类似,Redis 的 List 支持在两端进行高效的插入和删除操作,因此非常适合实现队列(Queue)和栈(Stack)等数据结构。...Redis List 的基本概念 有序的字符串集合:List中的元素按插入顺序排列,每个元素都是一个字符串。...双端队列:Redis List 是一个双端队列(Deque),允许你在列表的两端高效地进行操作(插入和删除)。...最大长度:Redis 的 List 数据类型没有最大长度限制,理论上可以存储无限多的元素,除非内存不足。 List命令: LPUSH LPUSH 命令用于将一个或多个元素插入到列表的头部(即左侧)。
个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ ③Redis List...操作命令汇总 redis列表是简单的字符串列表,可添加元素至表头或表尾。...rpop list1 # 移出列表list1最后五个元素,展示 rpop list1 5 6. lindex 根据索引下标获取元素(由上到下) lindex key index # 获取指定下标的元素,...索引由列表头至列表尾,即:由上到下 lindex list1 0 lindex list1 1 lindex list1 2 lindex list1 3 7. llen 获取指定列表的元素个数 llen...list2中4个值为d的元素 lrem list2 4 d 9. ltrim 指定索引区间,对列表进行修剪(保留区间内元素) ltrim key start stop # 对列表list2进行修剪,保留
since: 1.0.0 Redis Rpop 命令用于移除并返回列表的最后一个元素。...语法 redis Rpop 命令基本语法如下: redis 127.0.0.1:6379> RPOP KEY_NAME 可用版本 >= 1.0.0 返回值 列表的最后一个元素。...实例 redis> RPUSH mylist "one" (integer) 1 redis> RPUSH mylist "two" (integer) 2 redis> RPUSH mylist "three..." (integer) 3 redis> RPOP mylist "three" redis> LRANGE mylist 0 -1 1) "one" 2) "two" redis> 16.移除列表中的最后一个元素...: Append a value to a list, only if the list exists since: 2.2.0
Redis的List Redis列表是简单的字符串列表,按照插入顺序排序。...因为Redis的List同时支持头和尾的操作,所以实际上我们直接理解为List为一个双向的链表,即可用作栈,也可以用作队列。...List的应用场景 我们假设要获得最新的10个用户的登录的信息,传统关系型数据库的话,我们可以如下操作: select * from user order by logintime limit 10 我们可以很简单的用一个...这个时候就轮到nosql上场了,我们可以利用redis的list类型,在list中只保留最新的10个数据,每进来一个新数据,就删除一个旧数据,这样我们在list中维护的就永远是最新登录的十个用户。...redis Lpush 命令基本语法如下: redis 127.0.0.1:6379> LPUSH KEY_NAME VALUE1..
list类型存储结构如下,它区分正数索引、负数索引。索引可以帮我定位到具体几个元素,类似java中List的下标。...[redis list结构] api 命令 说明 LPUSH key value value ......应用场景 实现消息队列 由于list的BLPOP命令的特性,我们是不是可以实现一个简单消息队列,其实在github,你可以找到类似的基于redis的消息队列框架,实现思路图如下。...[list实现消息队列] 生产者在队列的左边push消息进去,而消费者使用BRPOP阻塞的监听队列,有消息到达时,消费者就会马上收到。...传言,新浪微博组建了160T的redis集群来干这么一件事情。但是可以断定先期新浪微博就是这样实现的。
list类型操作 设置操作: lpush: lpush key value 在list左侧插入value rpush: rpush key value... 在list右侧插入value linsert: linsert key before value1 value2 在原来存在的value1前面插入value2
3.lrange key start stop 作用: 返回链表中[start ,stop]中的元素 规律: 左数从0开始,右数从-1开始
List简介 列表list是一个单键多值的 Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。...redis 127.0.0.1:6379> LPUSH list1 "foo" (integer) 1 redis 127.0.0.1:6379> LPUSH list1 "bar" (integer)...redis 127.0.0.1:6379> LPUSH list1 "foo" (integer) 1 redis 127.0.0.1:6379> LPUSHX list1 "bar" (integer...) 2 redis 127.0.0.1:6379> LPUSHX list2 "bar" (integer) 0 redis 127.0.0.1:6379> LRANGE list1 0 -1 1) "...redis 127.0.0.1:6379> RPUSH list1 "foo" (integer) 1 redis 127.0.0.1:6379> RPUSH list1 "bar" (integer)
列表类型简介 列表(list)用于存储多个有序的字符串。...因为列表为空,brpop会一直阻塞着等待元素的进入 此时新开一个redis-cli,新增元素入列表 127.0.0.1:6379> lpush list:test 1 (integer) 1 brpop...立即返回元素: 127.0.0.1:6379> brpop list:test 0 1) "list:test" 2) "1" (59.07s) 列表不为空,客户端立即返回结果 127.0.0.1:6379...> lpush list:test 2 (integer) 1 127.0.0.1:6379> brpop list:test 1 1) "list:test" 2) "2" 注意: 如果有多个键,那么...列表的时间复杂度 应用场景 消息队列 redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的抢列表尾部的元素
在右侧客户端中向new_list中压入一个元素,可以看到左侧返回 ? BRPOPLPUSH命令演示案例 左侧等待source_list中有键值可以移动到dest_list中 ?...右侧向source_list压入值,左侧看到成功返回 ? 查看source_list中的值,可以看到没有了(已经移动到dest_list列表中了),右侧查看dest_list列表 ?...三、内部编码 列表类型的内部编码有两种: ziplist(压缩列表):当列表的元素个数小于list-max-ziplist-entries配置 (默认512个),同时列表中每个元素的值都小于list-max-ziplist-value...配置时 (默认64字节),Redis会选用ziplist来作为列表的内部实现来减少内存的使 用 linkedlist(链表):当列表类型无法满足ziplist的条件时,Redis会使用 linkedlist...四、使用场景 ①消息队列 如下图所示,Redis的lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的“抢”列表尾部的元素
Redis 中的 list 是类似于双端队列的一种实现,其底层的数据结构涉及到 linkedlist、ziplist、quicklist 和 listpack 的演进linkedlistredis 中的...linkedlist 是双链表,这也是我们实现 list 时首先想到的数据结构之一。...redis 中的双链表并没有非常特殊的地方,我们来简单看下对应的代码实现即可typedef struct list { listNode *head;//头指针 listNode *tail...(void *ptr);//节点释放函数 int (*match)(void *ptr, void *key);//节点值是否相等 unsigned long len;//链表节点数量} list...为了解决连锁更新的问题,redis 又造了一个新的结构:quicklistquicklisttodolistpacktodo
----List简介列表list是一个单键多值的Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。...redis 127.0.0.1:6379> LPUSH list1 "foo"(integer) 1redis 127.0.0.1:6379> LPUSH list1 "bar"(integer) 2redis...redis 127.0.0.1:6379> LPUSH list1 "foo"(integer) 1redis 127.0.0.1:6379> LPUSHX list1 "bar"(integer) 2redis...redis 127.0.0.1:6379> RPUSH list1 "foo"(integer) 1redis 127.0.0.1:6379> RPUSH list1 "bar"(integer) 2redis...redis 127.0.0.1:6379> LPUSH list1 "foo"(integer) 1redis 127.0.0.1:6379> LPUSH list1 "bar"(integer) 2redis
领取专属 10元无门槛券
手把手带您无忧上云