原文章地址:http://tech.it168.com/a2011/0926/1251/000001251881.shtml
【IT168 专稿】 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去获取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候 工作线程可以立即返回,也可以避免轮询带来的延迟。说了这么多,接下来看一下实际操作的方法吧:
1、lpush
在key对应list的头部添加字符串元素:
(integer) 1
redis 127.0.0.1:6379> lpush mylist "hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist 0-1
1) "hello"
2) "world"
redis 127.0.0.1:6379>
在此处我们先插入了一个world,然后在world的头部插入了一个hello。其中lrange是用于取mylist的内容。
2、rpush
在key对应list的尾部添加字符串元素:
(integer) 1
redis 127.0.0.1:6379> rpush mylist2 "world"
(integer) 2
redis 127.0.0.1:6379> lrange mylist2 0-1
1) "hello"
2) "world"
redis 127.0.0.1:6379>
在此处我们先插入了一个hello,然后在hello的尾部插入了一个world。
3、linsert
在key对应list的特定位置之前或之后添加字符串元素:
(integer) 1
redis 127.0.0.1:6379> rpush mylist3 "world"
(integer) 2
redis 127.0.0.1:6379> linsert mylist3 before "world""there"
(integer) 3
redis 127.0.0.1:6379> lrange mylist3 0-1
1) "hello"
2) "there"
3) "world"
redis 127.0.0.1:6379>
在此处我们先插入了一个hello,然后在hello的尾部插入了一个world,然后又在world的前面插入了there。
4、lset
设置list中指定下标的元素值(下标从0开始):
(integer) 1
redis 127.0.0.1:6379> rpush mylist4 "two"
(integer) 2
redis 127.0.0.1:6379> rpush mylist4 "three"
(integer) 3
redis 127.0.0.1:6379> lset mylist4 0"four"
OK
redis 127.0.0.1:6379> lset mylist4 -2"five"
OK
redis 127.0.0.1:6379> lrange mylist4 0-1
1) "four"
2) "five"
3) "three"
redis 127.0.0.1:6379>
在此处我们依次插入了one,two,three,然后将标是0的值设置为four,再将下标是-2的值设置为five。
5、lrem
从key对应list中删除count个和value相同的元素。
count>0时,按从头到尾的顺序删除,具体如下:
(integer) 1
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist5 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist5 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist5 2"hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist5 0-1
1) "foo"
2) "hello"
redis 127.0.0.1:6379>
count<0时,按从尾到头的顺序删除,具体如下:
(integer) 1
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist6 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist6 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist6 -2"hello"
(integer) 2
redis 127.0.0.1:6379> lrange mylist6 0-1
1) "hello"
2) "foo"
redis 127.0.0.1:6379>
count=0时,删除全部,具体如下:
(integer) 1
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 2
redis 127.0.0.1:6379> rpush mylist7 "foo"
(integer) 3
redis 127.0.0.1:6379> rpush mylist7 "hello"
(integer) 4
redis 127.0.0.1:6379> lrem mylist7 0"hello"
(integer) 3
redis 127.0.0.1:6379> lrange mylist7 0-1
1) "foo"
redis 127.0.0.1:6379>
相关推荐
### Redis详解及数据结构类型 #### 一、Redis概述 Redis是一种开源的内存数据结构存储系统,被广泛应用于缓存、消息队列等多种场景。它提供了丰富的数据结构操作能力,如字符串(Strings)、哈希(Hashes)、列表...
Redis 的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和有序集合(sorted sets)等数据类型。对这些数据类型,你可以执行原子操作。 Redis 的功能包括: * 持久...
### Redis五种数据类型的基本操作详解 #### 一、字符串(Strings) 在Redis中,**字符串**是最基本的数据类型之一,它可以存储任何类型的数据(如:数字、字符串等)。通过以下命令可以对字符串进行基本的增删改查...
【Redis详解:初学者入门指南】 Redis 是一个高效、开源的键值对数据库,由 C 语言编写,常被用于缓存、分布式集群中的会话分离、消息队列等多种应用场景。其支持的数据类型包括字符串、散列、列表、集合和有序集合...
### Redis支持的数据类型及相关命令详解 #### 一、Redis简介及数据类型概述 Redis是一种开源的、基于内存的键值存储系统,同时也被广泛视为一种数据结构服务器。它支持多种数据类型,包括字符串(Strings)、列表...
Redis支持多种数据类型,包括简单字符串(Strings)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)和哈希(Hashes)等。这些数据类型的特点及其应用场景将在接下来的部分详细介绍。 1. **字符串(Strings)** 最...
通过上述介绍,我们可以看到 Redis 提供了非常丰富且灵活的数据类型以及操作方法。列表和集合都是非常常用的数据类型,在实际应用中能够帮助解决许多问题。例如,列表可以用来构建简单的消息队列,而集合则可用于...
### Redis安装及使用详解 #### 一、Redis简介 Redis是一种高性能的键值对存储系统,采用内存存储机制,能够实现快速的数据访问速度。它支持多种数据结构,包括字符串(Strings)、散列(Hashes)、列表(Lists)、...
Redis支持多种数据类型,包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets),这些数据结构为解决实际问题提供了极大的便利。例如,字符串可以用来存储简单的键值,哈希则适合存储...
不同于 memcached,Redis 支持多种复杂的数据类型如字符串(Strings)、列表(Lists)、集合(Sets)以及有序集合(Sorted Sets)等,这些特性使得 Redis 在数据处理和管理方面更加灵活和强大。 #### 二、Redis 安装步骤 #...
Redis是:a disk backed in memory database,而且有丰富的数据类型:strings,hashes, lists, sets, sorted sets, bitmaps和hyperloglogs.
1. 字符串(String):Redis最基础的数据类型,可存储字符串、数字,支持自增自减操作。 2. 哈希(Hash):用于存储键值对集合,适合表示对象。可以将多个字段(field)及其对应的值(value)存储在一个键下。 3. 列表...
这种多样的数据类型支持使得Redis不仅仅是一个简单的键值存储系统,而是被广泛认为是一种“数据结构服务器”。 ##### 1.2 Redis 的数据类型 - **字符串(Strings)**:最基础的数据类型,可以存储任何二进制数据,...
2. **丰富的数据类型**:Redis支持多种数据类型,包括但不限于二进制安全的字符串(Strings)、列表(Lists)、哈希(Hashes)、集合(Sets)以及有序集合(Ordered Sets)。 3. **原子操作**:所有的Redis操作都是原子性的...
- **丰富的数据类型**: 支持字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等。 - **高速**: Redis能够达到极高的读写速度,例如每秒处理超过11万个集合操作和81000多个记录。 ...
- 支持多种数据类型的直观展示和编辑,包括但不限于: - 字符串(Strings) - 哈希表(Hashes) - 列表(Lists) - 集合(Sets) - 有序集合(Sorted Sets) 3. **脚本支持** - RDM支持执行Lua脚本,这为...