Redis学习笔记(四)-数据类型之list类型

  redis的list类型其实就是一个每个子元素都是string类型的双向链表。所以[lr]push和[lr]pop命令的算法时间复杂度都是O(1)。另外list会记录链表的长度。所以llen操作也是O(1).链表的最大长度是(2的32次方-1)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈,也可以用作队列。有意思的是list的pop操作还有阻塞版本的。当我们[lr]pop一个list对象是,如果list是空,或者不存在,会立即返回nil。但是阻塞版本的b[lr]pop可以则可以阻塞,当然可以加超时时间,超时后也会返回nil。

  为什么要阻塞版本的pop呢,主要是为了避免轮询。举个简单的例子如果我们用list来实现一个工作队列。执行任务的thread可以调用阻塞版本的pop去获取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,也可以避免轮询带来的延迟。

  list相关命令:

  lpush key string 在key对应list的头部添加字符串元素,返回1表示成功,0表示key存在且不是list类型

  rpop key 从list的尾部删除元素,并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对应值不是list返回错误

  llen key 返回key对应list的长度,key不存在返回0,如果key对应类型不是list返回错误

  

  rpush key string 在key对应list的尾部添加字符串元素,返回1表示成功,0表示key存在且不是list类型

  lpop key 从list的头部删除元素,并返回删除元素。如果key对应list不存在或者是空返回nil,如果key对应值不是list返回错误

  

  lrange key start end 返回指定区间内的元素,下标从0开始,负值表示从后面计算,-1表示倒数第一个元素,key不存在返回空列表

  ltrim key start end 截取list,保留指定区间内元素,成功返回1,key不存在返回错误

  

  lset key index value 设置list中指定下标的元素值,成功返回OK,key或者下标不存在返回错误

  

  lrem key count value 从key对应list中删除count个和value相同的元素。

  

  blpop key1...keyN timeout 从左到右扫描返回对第一个非空list进行lpop操作并返回,比如blpop list1 list2 list3 0 ,如果list不存在,list2,list3都是非空则对list2做lpop并返回从list2中删除的元素。

  

  如果所有的list都是空或不存在,则会阻塞timeout秒,timeout为0表示一直阻塞。当阻塞时,如果有client对key1...keyN中的任意key进行push操作,则第一在这个key上被阻塞的client会立即返回。如果超时发生,则返回nil。有点像unix的select或者poll。

  

  

  

  brpopblpop不再赘述,一个是从头部删除一个是从尾部删除。

    rpoplpush srckey destkey 从srckey对应list的尾部移除元素并添加到destkey对应list的头部,最后返回被移除的元素值,整个操作是原子的.如果srckey是空或者不存在返回nil。

    

时间: 2024-10-06 14:32:49

Redis学习笔记(四)-数据类型之list类型的相关文章

Redis学习笔记08Redis数据类型之(1) 字符串类型

1.1.1. set 设置字符串类型的键值,如果键已存在,则之前的值被覆盖,不关注之前的键值的类型. 语法: SET key value [EX seconds] [PX milliseconds] [NX|XX] 参数: key  键名 value 键值 EX seconds - 过期时间,秒. PX milliseconds -- 过期时间,毫秒. NX -- 仅仅当键不存在时才设置. XX -- 仅仅当键已经存在时才设置. 返回值: OK:操作成功. nil:操作失败. 例子: redis

Redis学习笔记09Redis数据类型之(2) 哈希表类型

1.1.1. hset 向hash中添加键值对. 语法: HSET key field value 参数: key :键名称,键值为一个hash表对象. field:hash表中的键名. value:hash表中的键值. 返回值: 整数:1,成功添加了一个原来不存在的新的键对应的键值对. 0,成功的更新了一个原来存在的键对应的键值对. ERROR:key对应的对象存在,但是并不是哈希表类型. 例子: redis.coe2coe.me:6379> hset myhash  host redis.c

Redis学习笔记10Redis数据类型之(3) 链表类型

1.1.1. lpush 在链表的头部插入一个或多个值. 语法: LPUSH key value [value ...] 参数: key 键名.键值为一个链表. value  要插入的值. 返回值: 整数:在插入之后,链表的长度. ERROR:key对应的对象不是链表类型. 例子: redis.coe2coe.me:6379> lpush mylist host redis.coe2coe.me (integer) 2 redis.coe2coe.me:6379> lpush mylist p

Redis学习笔记13Redis数据类型之(6)HyperLogLogs类型

1.1.1. pfadd 向指定的hyperloglog中添加一个或多个元素.hyperloglog中重复的元素将被合并成一个元素. 语法: PFADD key element [element ...] 参数: key: 键名,键值为一个hyperloglog对象. element:待添加的元素. 返回值: 1:hyperloglog的基数评估变化了. 0: 没有变化. 例子: redis.coe2coe.me:6379> pfadd myhpp green blue yellow (inte

StackExchange.Redis学习笔记(四) 事务控制和Batch批量操作

Redis事物 Redis命令实现事务 Redis的事物包含在multi和exec(执行)或者discard(回滚)命令中 和sql事务不同的是,Redis调用Exec只是将所有的命令变成一个单元一起执行,期间不会插入其他的命令. 这种方式不保证事务的一致性,即使中间有一条命令出错了,其他命令仍然可以正常执行,并且无法回滚 下面的例子演示了一个基本的事务操作 127.0.0.1:6379> multi OK 127.0.0.1:6379> set name mike QUEUED 127.0.

Swift学习笔记_数据类型_浮点类型

浮点类型 是有小数部分的数字.表示的范围比整数类型更大,可存储比Int类型更大或更小的数字. 提供了3种表示形式: (1)Float 表示32位浮点数,可精确到小数点后6位. (2)Double 表示64位浮点数,可精确到小数点后15位. (3)Float80 表示80位浮点数,可精确到小数点后17位. ※Float32和Float64分别是Float和Double的类型别名 var floatv:Float = 0.12345678912345  //0.1234568 var floatv2

Swift学习笔记_数据类型_整数类型

1 整数类型 整数就是没有小数部分的数字. 整数类型分为两种: (1)有符号整数类型:表示负整数.零.和正整数 (2)无符号整数类型:表示零.和正整数 有符号整数类型有5种表示方式: (1)Int8:在内存中占8位,表示的范围是:-128-127 (2)Int16:在内存中占16位,表示的范围是:-32768-32767 (3)Int32:在内存中占32位,表示的范围是:-2147483648-2147483647 (4)Int64:在内存中占64位,表示的范围是:-92233720368547

Redis 学习笔记四 Mysql 与Redis的同步实践

一.测试环境在Ubuntu kylin 14.04 64bit 已经安装Mysql.Redis.php.lib_mysqludf_json.so.Gearman. 点击这里查看测试数据库及表参考 本文也有些基本操作,在之前文章里有介绍. 1.安装 安装gearman-mysql-udf apt-get install libgearman-dev wget https://launchpad.net/gearman-mysql-udf/trunk/0.6/+download/gearman-my

Swift学习笔记_数据类型_布尔类型

布尔类型 指逻辑上的,只能是真或者假.用Bool表示. 有两个布尔常量:true和false. 主要用于条件判断语句中, 如在需要使用Bool类型的地方使用了非布尔值,swift的类型安全机制会报错. var boolvalue1 = true var boolvalue2 = false var isFinished = true //type bool if isFinished {     print("Finished!") } else {     print("n

Redis学习笔记4-Redis配置具体解释

在Redis中直接启动redis-server服务时, 採用的是默认的配置文件.採用redis-server   xxx.conf 这种方式能够依照指定的配置文件来执行Redis服务. 依照本Redis学习笔记中Redis的依照方式依照后,Redis的配置文件是/etc/redis/6379.conf.以下是Redis2.8.9的配置文件各项的中文解释. #daemonize no 默认情况下, redis 不是在后台运行的.假设须要在后台运行,把该项的值更改为 yes daemonize ye