redis学习 第三章 5种数据类型----list类型
来源:互联网 发布:python爬虫实例 编辑:程序博客网 时间:2024/05/17 12:19
跟着Redis入门指南学习
第三章 5种数据类型----列表类型(list)
3.4 列表类型
列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获取列表的某一个片段。
列表类型内部使用双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度为O(1).
3.4.2 命令
1.向列表两端增加元素
<span style="font-size:14px;">lpush key value [value ...]rpush key value [value ...]</span>返回值表示增加元素后的列表长度。
<span style="font-size:14px;">127.0.0.1:6379[1]> lpush numbers 1(integer) 1127.0.0.1:6379[1]> lpush numbers 2 4(integer) 3127.0.0.1:6379[1]> rpush numbers 7 9(integer) 5</span>numbers健中数据为:4 2 1 7 9
2.从列表两端弹出元素
<span style="font-size:14px;">lpop key rpop key</span>lpop命令执行两步操作:第一步将列表左边的元素从列表中移除,第二步是返回被移除的元素值。
<span style="font-size:14px;">127.0.0.1:6379[1]> lpop numbers"4"127.0.0.1:6379[1]> lpop numbers"2"127.0.0.1:6379[1]> rpop numbers"9"127.0.0.1:6379[1]> rpop numbers"7"127.0.0.1:6379[1]> rpop numbers"1"127.0.0.1:6379[1]> rpop numbers(nil)</span>
3.获取列表中元素的个数
<span style="font-size:14px;">llen key</span>当健不存在时llen会返回0
<span style="font-size:14px;">127.0.0.1:6379[1]> llen numbers(integer) 0127.0.0.1:6379[1]> lpush numbers 1 3 4 5(integer) 4127.0.0.1:6379[1]> llen numbers(integer) 4</span>4.获取列表片段
<span style="font-size:14px;">lrange key start stop</span>返回索引从[start,stop]之间的所有值,redis索引也是从0开始
numbers 现在列表中数据为:0 9 8 6 5 4 3 1
<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 31) "0"2) "9"3) "8"4) "6"</span>lrange 命令在取值得到列表片段的同时不会像lpop一样删除该片段。
lrange 命令也支持负索引,表示从右边开始计算序数,如“-1”表示最右边第一个元素,依次类推:
显然,lrange numbers 0 -1可以获取列表中的所有元素,另外一些特殊情况如下:
(1)如果start的索引位置比stop的索引位置靠后,则会返回空列表。
(2)若果stop大余实际的索引范围,则会到列表最右边的元素。
<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 -11) "0"2) "9"3) "8"4) "6"5) "5"6) "4"7) "3"8) "1"127.0.0.1:6379[1]> lrange numbers 1 9991) "9"2) "8"3) "6"4) "5"5) "4"6) "3"7) "1"127.0.0.1:6379[1]> lrange numbers 4 0(empty list or set)</span>5.删除列表中指定的值
<span style="font-size:14px;">lrem key count value</span>lrem 命令会删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值得不同,lrem命令的执行方式会略有差异:
当count>0时 lrem命令会从列表左边开始删除前面count值为value的元素;
当count<0时lrem命令会从列表右边开始删除前|count|个值为value的元素;
当count=0是lrem命令会删除所有值为value的元素。
<span style="font-size:14px;">127.0.0.1:6379[1]> lrem numbers -1 3(integer) 1127.0.0.1:6379[1]> lrange numbers 0 -11) "3"2) "5"3) "4"4) "3"5) "1"127.0.0.1:6379[1]> lrem numbers 0 3(integer) 2127.0.0.1:6379[1]> lrange numbers 0 -11) "5"2) "4"3) "1"</span>3.4.5 命令拾遗
1.获取/设置指定索引的元素值
<span style="font-size:14px;">lindex key indexelset key index value</span>返回指定索引的元素,索引从0开始。如果index是负值则表示从右边开始计算索引,最右边元素的索引是-1.
<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 -11) "5"2) "4"3) "1"127.0.0.1:6379[1]> lindex numbers 0"5"127.0.0.1:6379[1]> lindex numbers 4(nil)127.0.0.1:6379[1]> lindex numbers 2"1"127.0.0.1:6379[1]> lindex numbers -1"1"127.0.0.1:6379[1]> lset numbers 1 9OK127.0.0.1:6379[1]> lset numbers 4 6(error) ERR index out of range127.0.0.1:6379[1]> lset numbers 2 6OK127.0.0.1:6379[1]> lrange numbers 0 -11) "5"2) "9"3) "6"</span>
2.只保留列表指定片段
<span style="font-size:14px;"><span style="font-size:14px;">ltrim key start end</span></span>ltrim 命令可以删除指定范围之外的所有元素,其指定列表范围的方法和lrange 命令相同。
<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 -11) "8"2) "5"3) "9"4) "6"127.0.0.1:6379[1]> ltrim numbers 1 2OK127.0.0.1:6379[1]> lrange numbers 0 -11) "5"2) "9"</span>
lrim命令常和lpush命令一起使用来限制列表中元素的数量,比如记录日志时我们希望保留最近的100条日志,则每次加入新元素时调用一次ltrim命令即可:
<span style="font-size:14px;">lpush logs $newlogltrim logs 0 99</span>3.向列表中插入元素
<span style="font-size:14px;">linsert key before|after pivot value</span>linsert 命令首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是before 还是after来决定将value插入到改元素前面还是后面。
<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 -11) "5"2) "9"127.0.0.1:6379[1]> linsert numbers after 5 8(integer) 3127.0.0.1:6379[1]> lrange numbers 0 -11) "5"2) "8"3) "9"127.0.0.1:6379[1]> linsert numbers before 8 0(integer) 4127.0.0.1:6379[1]> lrange numbers 0 -11) "5"2) "0"3) "8"4) "9"</span>
4.将元素从一个列表转到另一个列表
<span style="font-size:14px;">rpoplpush source destination</span>
<span style="font-size:14px;">127.0.0.1:6379[1]> lrange numbers 0 -11) "5"2) "0"3) "8"4) "9"127.0.0.1:6379[1]> rpoplpush numbers newnumbers"9"127.0.0.1:6379[1]> lrange newnumbers 0 -11) "9"</span>
散列类型没有类似字符串类型的mget命令那样可以通过一条命令同时获得多个健的健值的版本,所以对于每个健值都需要请求一个数据库,也就都会产生一次往返时延,之后会介绍使用管道和脚本优化这个问题。
0 0
- redis学习 第三章 5种数据类型----list类型
- redis学习 第三章 5种数据类型----String类型
- redis学习 第三章 5种数据类型----hash类型
- redis学习 第三章 5种数据类型----set类型
- redis学习 第三章 5种数据类型
- redis学习 第三章 5种数据类型----sorted set类型
- redis的五种数据类型---list类型
- redis五种数据类型学习笔记
- redis学习-5种数据类型和相关命令
- Redis的5种数据类型
- Redis的5种数据类型
- Redis五种数据类型
- 【Redis】五种数据类型
- redis 五种数据类型
- redis 五种数据类型
- Redis五种数据类型
- redis操作以及5种数据类型string,hash,list,set,zset
- Redis学习-List类型
- 下载并启动paddle
- Android 应用程序进程启动过程源码分析
- 解决jquery中,使用append增加元素时,该元素的绑定监听事件失效的办法
- Android开发之反射与注解
- 数据结构之栈(C++)
- redis学习 第三章 5种数据类型----list类型
- CDOJ 1157 数列(seq) (分块)
- 2-URLs and Resources
- 大数据面试宝典
- VOLTDB的第一个helloworld实例
- android中访问assets文件夹下的资源
- Java Web开发环境搭建(jdk+eclipse+tomcat+maven+mysql)
- IPv4和IPv6支持
- Android webView 缓存 Cache + HTML5离线功能 解决