首页 > 数据库 >四 redis之list

四 redis之list

时间:2024-09-17 20:36:20浏览次数:8  
标签:count 下标 list 元素 redis element key

redis提供的list类型扩展了平时说的列表,不仅可以用来当队列用,还可以当阻塞队列,栈使用.

注意: 以下命令中涉及删除元素的,当list中最后一个元素被删除了,list也被删除

队列

队列是一种先进先出的线性数据结构.数据只能从队头出去,从队尾加入.像平时的排队就是队列.

每个元素可以是连续的,用数组实现,也可以是不连续的,用连表实现.

当以右边为队头,左边为队尾时:

LPUSH

LPUSH key element [element ...]

往队列的左边加入若干个元素.

可以看到,lpush命令中左边的数据加入到list中后,位置靠右边.

LPUSHX

LPUSHX key element [element ...]

LPUSHX和LPUSH含义相同,除了当key存在时才会加入list中.

RPOP

RPOP key [count]

从list右边移除count个元素.

注意元素间的顺序.

LRANGE

LRANGE key start stop

返回key对应的list中从start到stop指定范围的元素.可以是负数,-1表示最后一个元素,-2表示倒数第二个元素.

可以看到,指定的下标超出了元素的范围也能正常执行.

当以左边为队头,右边为队尾时:

RPUSH

RPUSH key element [element ...]

从list的右边加入若干个元素.

注意,1在最左边.

RPUSH

RPUSHX key element [element ...]

RPUSHX和RPUSH含义相同,除了当key存在时才会加入list中.

LPOP

LPOP key [count]

从key对应的list的左边移除count个元素并返回.

栈是一种先进后出的数据结构.

栈底不能删除,新增元素,只能从栈顶新增,删除元素.

将list作为栈使用,可将右边或左边看为栈底,然后从另一边使用新增,删除元素即可.比如右边作为栈底,入栈使用lpush,出栈使用lpop.

阻塞队列

阻塞队列:当队列为空时,从队列中取元素会阻塞.

当list为空时,lpop会返回nil.

BLPOP

BLPOP key [key ...] timeout

BLPOP在超时时间内阻塞等待元素到达,如果超时返回nil.

在开另一个窗口:

执行blpop后,会在超时时间到来之前或者list中有元素为止.如果list有元素则返回.如果超时了则返回nil.

BRPOP

BRPOP key [key ...] timeout

BRPOP和BLPOP含义一致,只是从右边移除元素.

当有多个key时,超时时间内只要其中一个key有元素则返回.

其他命令

LINDEX

LINDEX key index

返回key对应的list中下标index出的元素.

下标可以使用负数,-1表示最后一个元素.如果下标超出list的范围则返回nil.

LINSERT

LINSERT key BEFORE|AFTER pivot element

在key中element前(BEFORE)或后(AFTER)插入pivot.

如果element不存在key中,不会插入数据.

LLEN

LLEN key

返回key对应的list中元素个数.

LMOVE

LMOVE source destination LEFT|RIGHT LEFT|RIGHT

将source中的元素移出并插入到destination中.

第一个LEFT|RIGHT表示source中移出元素的方向,LEFT表示从左边移除,RIGHT表示从右边移除.第二个LEFT|RIGHT表示destination中插入元素的方向,LEFT表示从左边插入,RIGHT表示从右边插入.

如果source不存在元素则什么也不做.

LMPOP

LMPOP numkeys key [key ...] LEFT|RIGHT [COUNT count]

从提供的键名列表中的第一个非空列表键中弹出一个或多个元素。根据传递的参数,从第一个非空列表的左侧或右侧弹出元素。返回元素的数量限制在非空列表的长度和count参数(默认为1)之间的较低值。

从第一个非空list key中移除指定的元素,就算key中的数量小于指定的数量,也不会在选择其他的key.

LPOS

LPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]

该命令返回Redis列表中匹配元素的索引。默认情况下,当没有给出选项时,它将从头到尾扫描列表,寻找第一个匹配的“元素”。如果找到该元素,则返回其索引(列表中从零开始的位置)。否则,如果没有找到匹配项,则返回nil。

mylist中c从左到右数,出现在第三个位置(下标从0计算).

list中数据可能有重复值.有时需要查找第n次出现的位置.这就需要rank选项了.rank 1表示第一次出现的位置:

c在mylist中第二次出现的下标是6.

rank也可以使用负数,-1表示最后一个.c在mylist中最后一次出现的下标是7.无论rank是正数还是负数,lpos返回的结果都是从左往右数的下标.

有时我们不仅要返回第N个匹配元素,还要返回所有前N个匹配元素的位置。这可以通过使用COUNT选项来实现:

我们可以组合COUNT和RANK,表示从RANK选项指定的第N个匹配开始, 进行count次匹配:

count 0表示返回所有匹配.

最后,MAXLEN选项告诉命令仅将所提供的元素与给定的最大列表项数进行比较。因此,例如指定MAXLEN 1000将确保该命令仅执行1000次比较.如果list中元素很多,要匹配所有元素要花费很长时间.MAXLEN 0 表示匹配所有.

最多匹配5次,也就是最多匹配到箭头的位置.

LREM

LREM key count element

从左到右移除count个element.

LSET

LSET key index element

在index处设置元素element,如果index超出list长度则报错.

index可以使用负数.

LTRIM

LTRIM key start stop

start和stop都是从0开始的下标.ltrim mylist 0 2表示只保留mylist中下标0到下标2的元素.

下标也可以使用负数.以上表示保留最后两个元素.

RPOPLPUSH

RPOPLPUSH source destination

原子性地返回并删除存储在源位置的列表的最后一个元素(尾部),并将该元素推送到存储在目标位置的列表第一个元素(头部)。

将mylist的最后一个元素移除并插入到mylist1的左边第一个位置.

BLMOVE

BLMOVE source destination LEFT|RIGHT LEFT|RIGHT timeout

BLMOVE是LMOVE的阻塞版本.

BLMPOP

BLMPOP timeout numkeys key [key ...] LEFT|RIGHT [COUNT count]

BLMPOP是LMPOP的阻塞版本.

BRPOPLPUSH

BRPOPLPUSH source destination timeout

BRPOPLPUSH是RPOPLPUSH的阻塞版本.

标签:count,下标,list,元素,redis,element,key
From: https://www.cnblogs.com/shigongp/p/18417189

相关文章

  • C++基础知识7 list
    list1.list的介绍及使用1.1list的介绍1.2list的使用1.2.1list的构造1.2.2listiterator的使用1.2.3listcapacity1.2.4listelementaccess1.2.5listmodifiers1.2.6list的迭代器失效2.1模拟实现list1.list的介绍及使用1.1list的介绍1.2list的使用1.......
  • Redis学习以及SpringBoot集成使用Redis
    目录一、Redis概述二、Linux下使用Docker安装Redis三、SpringBoot集成使用Redis3.1添加redis依赖 3.2配置连接redis3.3 实现序列化3.4注入RedisTemplate3.5测试四、Redis数据结构 一、Redis概述什么是redis?redis是一个高性能的,键值对的,将数据存储在内存......
  • Redis 常用命令
    Redis常用命令转载:Redis键(key)|菜鸟教程(runoob.com)键操作命令描述SETkeyvalue将字符串值存储在指定的键中。如果键已经存在,则覆盖旧值。GETkey获取指定键的值。DELkey删除指定的键。如果键不存在,忽略操作。EXISTSkey检查指定的键是否存在,返......
  • redis 简介
    Redis简介转载自:Redis简介|菜鸟教程(runoob.com)Redis(RemoteDictionaryServer)是一个开源的内存数据库,遵守BSD协议,它提供了一个高性能的键值(key-value)存储系统,常用于缓存、消息队列、会话存储等应用场景。性能极高:Redis以其极高的性能而著称,能够支持每秒数十万次的读......
  • C++实现redis分布式锁
    实现Redis分布式锁在C++中通常涉及到使用Redis客户端库来与Redis服务器通信。下面是一个简单的例子,展示如何使用C++和Redis实现一个基于Redis的分布式锁。首先,你需要安装一个支持Redis的C++客户端库。例如,可以使用`lib_redis`或者`cpp-redis`等库。这里我将提供一个伪代码级别......
  • redis哨兵模式和集群模式
    ###哨兵模式 想象一下你有一家便利店,这个便利店就是你的Redis服务器。为了确保便利店能一直营业,你需要有人来监督这家店是否正常运作。这就是哨兵模式的基本思想。 -**哨兵(Sentinel)**:哨兵就像是便利店的保安,它们的任务是监视便利店是否正常开门营业(也就是监视Redis服务......
  • 解析Redisson 限流器源码
     工具类publicclassRedisUtils{  privatestaticfinalRedissonClientCLIENT=SpringUtils.getBean(RedissonClient.class);  /**  *限流  *  *@paramkey     限流key  *@paramrateType  限流类型  *@paramrate ......
  • redis基础
    一.前言我们前几篇文章说了mysql的基础,不是很深入,但是在我们开发中绝对够用,这篇文章我们来讲我们的redis,我们先来介绍一下我们的redis顺便介绍一下我们的nosql。在Web应用发展的初期,那时关系型数据库受到了较为广泛的关注和应用,原因是因为那时候Web站点基本上访问和并发不高......
  • 60.《Java集合框架-List-Set-Map》
    此篇所写不知道你们是否在网页开发的时候当看到要写Map集合什么HashMap之类的突然蒙了虽然之前学过突然让你调用方法懵了所以在此总结一下以备后需对比数组可存储任意类型对象且存储长度是可以变的集合类乃内存层面对数据进行存储数据库是持久层断电后仍长期存在......
  • WPF JumpList JumpList ApplicationPath IconResourcePath
    //App.xaml<Applicationx:Class="WpfApp369.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local=&......