`
songzhan
  • 浏览: 248804 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Redis详解:lists数据类型及操作

 
阅读更多

原文章地址:http://tech.it168.com/a2011/0926/1251/000001251881.shtml

 

 

【IT168 专稿】 list是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理解为链表的名字。

  系列文章:

  Redis详解:strings数据类型及操作

  Redis详解:hashes数据类型及操作

  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的头部添加字符串元素:

redis 127.0.0.1:6379> lpush mylist "world"
(
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的尾部添加字符串元素:

redis 127.0.0.1:6379> rpush mylist2 "hello"
(
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的特定位置之前或之后添加字符串元素:

redis 127.0.0.1:6379> rpush mylist3 "hello"
(
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开始):

redis 127.0.0.1:6379> rpush mylist4 "one"
(
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时,按从头到尾的顺序删除,具体如下:

redis 127.0.0.1:6379> rpush mylist5 "hello"
(
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时,按从尾到头的顺序删除,具体如下:

redis 127.0.0.1:6379> rpush mylist6 "hello"
(
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时,删除全部,具体如下:

redis 127.0.0.1:6379> rpush mylist7 "hello"
(
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概述 Redis是一种开源的内存数据结构存储系统,被广泛应用于缓存、消息队列等多种场景。它提供了丰富的数据结构操作能力,如字符串(Strings)、哈希(Hashes)、列表...

    redis快速入门详解.ppt

    Redis 的键值可以包括字符串(strings)类型,同时它还包括哈希(hashes)、列表(lists)、集合(sets)和有序集合(sorted sets)等数据类型。对这些数据类型,你可以执行原子操作。 Redis 的功能包括: * 持久...

    Redis之五种数据类型的简单增删改查

    ### Redis五种数据类型的基本操作详解 #### 一、字符串(Strings) 在Redis中,**字符串**是最基本的数据类型之一,它可以存储任何类型的数据(如:数字、字符串等)。通过以下命令可以对字符串进行基本的增删改查...

    Redis讲解(刚刚接触REDIS的看看)

    【Redis详解:初学者入门指南】 Redis 是一个高效、开源的键值对数据库,由 C 语言编写,常被用于缓存、分布式集群中的会话分离、消息队列等多种应用场景。其支持的数据类型包括字符串、散列、列表、集合和有序集合...

    Redis支持的数据类型、相关命令和功能

    ### Redis支持的数据类型及相关命令详解 #### 一、Redis简介及数据类型概述 Redis是一种开源的、基于内存的键值存储系统,同时也被广泛视为一种数据结构服务器。它支持多种数据类型,包括字符串(Strings)、列表...

    Redis新手入门详解

    Redis支持多种数据类型,包括简单字符串(Strings)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)和哈希(Hashes)等。这些数据类型的特点及其应用场景将在接下来的部分详细介绍。 1. **字符串(Strings)** 最...

    第二十讲redis实用命令实战.pptx

    通过上述介绍,我们可以看到 Redis 提供了非常丰富且灵活的数据类型以及操作方法。列表和集合都是非常常用的数据类型,在实际应用中能够帮助解决许多问题。例如,列表可以用来构建简单的消息队列,而集合则可用于...

    redis安装及使用

    ### Redis安装及使用详解 #### 一、Redis简介 Redis是一种高性能的键值对存储系统,采用内存存储机制,能够实现快速的数据访问速度。它支持多种数据结构,包括字符串(Strings)、散列(Hashes)、列表(Lists)、...

    redis学习笔记,redis详解,Java

    Redis支持多种数据类型,包括字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)和有序集合(Sorted Sets),这些数据结构为解决实际问题提供了极大的便利。例如,字符串可以用来存储简单的键值,哈希则适合存储...

    redis详细介绍

    Redis(Remote Dictionary Server)是一款开源的高级键值存储系统,由意大利开发者Salvatore Sanfilippo(网名antirez)开发,并且经常被称作数据结构服务器,因为它支持多种数据类型的存储,如字符串(strings)、...

    linux下Redis安装详解.docx

    不同于 memcached,Redis 支持多种复杂的数据类型如字符串(Strings)、列表(Lists)、集合(Sets)以及有序集合(Sorted Sets)等,这些特性使得 Redis 在数据处理和管理方面更加灵活和强大。 #### 二、Redis 安装步骤 #...

    Redis 编译安装手册详解

    Redis是:a disk backed in memory database,而且有丰富的数据类型:strings,hashes, lists, sets, sorted sets, bitmaps和hyperloglogs.

    05-Redis 核心数据结构 & Redis 6 新特性详解-郭嘉.zip

    1. 字符串(String):Redis最基础的数据类型,可存储字符串、数字,支持自增自减操作。 2. 哈希(Hash):用于存储键值对集合,适合表示对象。可以将多个字段(field)及其对应的值(value)存储在一个键下。 3. 列表...

    redis(简介、数据结构、常用命令).docx

    这种多样的数据类型支持使得Redis不仅仅是一个简单的键值存储系统,而是被广泛认为是一种“数据结构服务器”。 ##### 1.2 Redis 的数据类型 - **字符串(Strings)**:最基础的数据类型,可以存储任何二进制数据,...

    redis 使用说明

    2. **丰富的数据类型**:Redis支持多种数据类型,包括但不限于二进制安全的字符串(Strings)、列表(Lists)、哈希(Hashes)、集合(Sets)以及有序集合(Ordered Sets)。 3. **原子操作**:所有的Redis操作都是原子性的...

    redis桌面链接工具redis-desktop

    - 支持多种数据类型的直观展示和编辑,包括但不限于: - 字符串(Strings) - 哈希表(Hashes) - 列表(Lists) - 集合(Sets) - 有序集合(Sorted Sets) 3. **脚本支持** - RDM支持执行Lua脚本,这为...

    Redis非关系型数据库笔记-数据持久化-主从同步-缓存-笔记-五大数据类型-三大特殊数据类型

    - **丰富的数据类型**: 支持字符串(Strings)、哈希(Hashes)、列表(Lists)、集合(Sets)、有序集合(Sorted Sets)等。 - **高速**: Redis能够达到极高的读写速度,例如每秒处理超过11万个集合操作和81000多个记录。 ...

Global site tag (gtag.js) - Google Analytics