七、Redis列表(list)类型参考记录(2)
列表(list)类型可以存储一个有序的字符串列表。常用操作是向列表两端添加元素,或者获得列表的某个片段。
列表类型内部使用双向链表(bouble linked list)实现,因此向两端添加元素的时间复杂度为O(1),获取越接近两端的元素速度就越快。
ltrim 只保留列表指定片段的元素
语法:ltrim key start stop
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 只保留索引为1和2对应的元素的值</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> ltrim number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">OK</span>
ltrim可以删除指定索引范围之外的所有元素
linsert 在列表的元素前或后插入元素
语法:linsert key before|after pivot value
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lrange number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"7"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 指定元素之后</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> linsert number after <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">7</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lrange number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"7"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"3"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(98, 151, 85) !important"># 指定元素之前</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> linsert number before <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lrange number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">0</span> <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">-1</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"7"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"1"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"3"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0"</span></span>
linsert先在列表中从左到右查找值为pivot的元素,然后根据第二个参数是before|after来决定将value插入到该元素前面还是后面
rpoplpush 将元素从一个列表转到另一个列表
语法:rpoplpush source destination timeout
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> rpoplpush number number1</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"0"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> rpoplpush number number1</span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"3"</span></span>
rpoplpush先从source列表类型的右边弹出一个元素;然后将它加入到destination列表类型的左边,并返回弹出的元素,整个过程原子性。
rpushx 为已存在的列表添加值
语法:rpushx key value
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> rpushx number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">3</span></span>
lpushx 将值插入到已存在列表的头部
语法:lpushx key value
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> lpushx number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">8</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px">(integer) <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">4</span></span>
blpop 移除并获取列表的第一个元素
语法:blpop key1 [key2] timeout
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> blpop number1 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">300</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"number1"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"3"</span></span>
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
brpop 移除并获取列表的最后一个元素
语法:brpop key1 [key2] timeout
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> brpop number <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">200</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">1</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"number"</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">2</span>) <span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"2"</span></span>
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
brpoplpush 从列表弹出一个值,将弹出的值插入到另外一个列表
语法:brpoplpush source destination timeout
<span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">127</span>.0.0.1:6379> brpoplpush number number1 <span style="box-sizing: border-box;color: rgb(209, 154, 102) !important">500</span></span><br></br><span style="box-sizing: border-box;color: rgb(171, 178, 191);padding-right: 0.1px"><span style="box-sizing: border-box;color: rgb(152, 195, 121) !important">"1"</span></span>
从列表中取出最后一个元素,并插入到另外一个列表的头部; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
我是夕阳何处寻,期待和优秀的你一起同行!
小白
2020年08月31日