redis--list 命令

本文详细介绍了Redis列表的各种操作,包括增删改查等基本指令及其使用方法,还讲解了阻塞式列表操作以及如何利用RPOPLPUSH实现安全队列。

list:允许重复元素,按照插入顺序,依次排列

1.增:

lpush  key value1 value2:插入到表头

如果key不存在,一个空列表会被创建并执行LPUSH操作。

key存在但不是列表类型时,返回一个错误。

返回值:执行LPUSH命令后,列表的长度。


lpushx key value1 value2:插入到表头

如果key不存在,lpushx就什么也不做。

key存在但不是列表类型时,返回一个错误。


rpush key value1 value2:插入到表尾

如果key不存在,一个空列表会被创建并执行RPUSH操作。

key存在但不是列表类型时,返回一个错误。

返回值:执行LPUSH命令后,列表的长度。


rpushx key value1 value2:插入到表尾

RPUSH命令相反,当key不存在时,RPUSHX命令什么也不做。

返回值:RPUSHX命令执行之后,表的长度。

linsert key before||after pivot value: 在pivot前或者是后添加key value
pivot 不存在于列表 key 时,不执行任何操作。

key不存在时,key被视为空列表,不执行任何操作。

如果 key 不是列表类型,返回一个错误。
返回值:
如果命令执行成功,返回插入操作完成之后,列表的长度。
如果没有找到 pivot,返回 -1
如果 key不存在或为空列表,返回 0


2.删:
lpop key:

移除并返回列表key的头元素。

返回值:删除列表的头元素。key不存在时,返回nil


rpop key:

移除并返回列表key的尾元素。

返回值:得到列表的长度,空的时候返回0,不是列表类型,返回错误。


lrem key count value:
count的值可以是以下几种:
count > 0: 从表头开始向表尾搜索,移除与value相等的元素,数量为count
count < 0: 从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。
count = 0: 移除表中所有与value相等的值。

返回值:被移除的元素的数量。key不存在的时候,lrem就返回0.


LTRIM key start stop:

list 只留下这区间的元素


3.改:

lset key index value: 将列表key下标为index的元素的值设置为value

index参数超出范围,或对一个空列表(key不存在)进行LSET时,返回一个错误。



4.查

llen key:返回key的长度

返回这个key,index位置的数据值,

如果key不是列表类型,返回一个错误。


lindex key index:返回这个key,index位置的数据值,

如果key不是列表类型,返回一个错误。

如果index参数的值不在列表的区间范围内(out of range),返回nil


lrange  key 0 -1 :列出所有的元素。


exists key:查看key是否存在

返回值:key的长度



5.阻塞式


 blpop key [key ...]  timeout:blpop shi lpop 的阻塞式原语

非阻塞行为:

当存在多个给定key时,BLPOP按给定key参数排列的先后顺序,依次检查各个列表。弹出遇到的第一个非空列表的头元素,并和被弹出元素所属的列表的名字一起,组成结果返回给调用者。

redis> BLPOP job command request 0  # job列表为空,被跳过,紧接着command列表的第一个元素被弹出。
1) "command"    # 弹出元素所属的列表
2) "update system..."   # 弹出元素所属的值

阻塞行为:

如果所有给定key都不存在或都是空列表,那么BLPOP命令将阻塞连接,直到等待超时。或有另一个客户端对给定key的任意一个执行LPUSHRPUSH命令为止。

超时参数timeout接受一个以秒为单位的数字作为值。超时参数设为0表示阻塞时间可以无限期延长(block indefinitely) 。

相同的key可以被多个客户端同时阻塞。

不同的客户端被放进一个队列中,按”先阻塞先服务”(first-BLPOP,first-served)的顺序为key执行BLPOP命令。

BLPOP可以用于流水线(pipline,批量地发送多个命令并读入多个回复),但把它用在MULTI/EXEC块当中没有意义。因为这要求整个服务器被阻塞以保证块执行时的原子性,该行为阻止了其他客户端执行LPUSHRPUSH命令。因此,一个被包裹在MULTI/EXEC块内的BLPOP命令,行为表现得就像LPOP一样,对空列表返回nil,对非空列表弹出列表元素,不进行任何阻塞操作。


brpop 同上,只是弹出的是队尾的元素。

brpoplpush 

当列表source为空时,BRPOPLPUSH命令将阻塞连接,直到等待超时,或有另一个客户端对source执行LPUSHRPUSH命令为止。

超时参数timeout接受一个以秒为单位的数字作为值。超时参数设为0表示阻塞时间可以无限期延长(block indefinitely) 。







6.知识点:

rpoplpush  source destination:

命令RPOPLPUSH在一个原子时间内,执行以下两个动作:

将列表source中的最后一个元素(尾元素)弹出,并返回给客户端。

source弹出的元素插入到列表destination,作为destination列表的的头元素。

返回值:被弹出的元素。

返回值:删除列表的尾元素。当key不存在时,返回nil

如果source不存在,值nil被返回,并且不执行其他动作。

如果 source destination 相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转(rotation)操作。

设计模式: 一个安全的队列 Redis的列表经常被用作队列(queue),用于在不同程序之间有序地交换消息(message)。一个程序(称之为生产者,producer)通过 LPUSH 命令将消息放入队列中,而另一个程序(称之为消费者,consumer)通过 RPOP 命令取出队列中等待时间最长的消息。 不幸的是,在这个过程中,一个消费者可能在获得一个消息之后崩溃,而未执行完成的消息也因此丢失。 使用 RPOPLPUSH 命令可以解决这个问题,因为它在返回一个消息之余,还将该消息添加到另一个列表当中,另外的这个列表可以用作消息的备份表:假如一切正常,当消费者完成该消息的处理之后,可以用 LREM 命令将该消息从备份表删除。 另一方面,助手(helper)程序可以通过监视备份表,将超过一定处理时限的消息重新放入队列中去(负责处理该消息的消费者可能已经崩溃),这样就不会丢失任何消息了。








<think>好的,我现在要解决用户遇到的“redis-cli command not found”的问题。首先,我需要确定这个问题的常见原因。通常,这种错误是因为Redis没有正确安装,或者安装路径没有添加到系统的环境变量中。可能用户尝试在终端中运行redis-cli,但系统找不到这个命令。 接下来,我应该分步骤来引导用户解决问题。首先,检查Redis是否已经安装。用户可能没有安装Redis,或者安装过程中出现了问题。我需要建议他们用包管理器来安装,比如在Ubuntu上使用apt,或者在macOS上使用Homebrew。不同的操作系统有不同的安装方法,所以需要分别说明。 如果用户已经安装了Redis,但依然出现这个错误,可能是路径问题。这时候需要检查Redis的安装路径是否在PATH环境变量中。例如,默认情况下,Redis可能安装在/usr/local/bin/,但如果用户自定义了安装路径,可能需要手动添加。可以教用户如何用which或者whereis命令来查找redis-cli的位置,然后根据情况更新PATH。 另外,如果用户是通过源代码编译安装的,可能需要手动构建并安装。这时候需要指导用户进入Redis源码目录,执行make和make install命令,并确保有足够的权限。 还有可能用户安装的是Redis服务器,但没有安装客户端工具。这时候需要确认安装的包是否包含redis-cli,比如在Ubuntu上,redis-server和redis-tools是分开的包,用户可能需要单独安装redis-tools。 最后,如果所有步骤都检查过了,还是有问题,可能需要建议用户重新安装Redis,或者检查系统日志和安装过程中的错误信息。同时,提供验证安装是否成功的命令,比如redis-cli --version,让用户确认安装结果。 在回答过程中,要确保使用中文,结构清晰,分步骤说明,并且引用相关参考资料。同时,生成相关问题,帮助用户进一步理解和解决问题,比如如何配置环境变量,或者如何通过源码安装Redis等。</think>### Redis-cli命令未找到的解决方案 #### 一、检查Redis安装状态 1. 通过包管理器验证Redis是否安装: ```bash # Ubuntu/Debian系统 dpkg -l | grep redis-server # CentOS/RHEL系统 rpm -qa | grep redis # macOS (Homebrew) brew list | grep redis ``` 2. 若未安装,选择对应系统的安装方式: ```bash # Ubuntu/Debian sudo apt update && sudo apt install redis-tools # 包含redis-cli的客户端工具[^1] # CentOS/RHEL sudo yum install redis # macOS brew install redis ``` #### 二、路径配置检查 当出现`command not found`时,可能是环境变量未正确配置: ```bash # 查找redis-cli实际路径 find / -name redis-cli 2>/dev/null # 典型安装路径示例 /usr/local/bin/redis-cli # 源码编译默认路径 /usr/bin/redis-cli # 包管理器安装路径 /opt/homebrew/bin/redis-cli # macOS ARM架构Homebrew路径 ``` 若路径不在`$PATH`中,手动添加环境变量: ```bash # 临时生效 export PATH="$PATH:/your/redis-cli/path" # 永久生效(推荐) echo 'export PATH="$PATH:/your/redis-cli/path"' >> ~/.bashrc source ~/.bashrc ``` #### 三、源码编译安装(特殊场景) 若需要通过源码安装最新版本: ```bash wget https://download.redis.io/redis-stable.tar.gz tar xzf redis-stable.tar.gz cd redis-stable make && sudo make install # 需要gcc编译工具链 ``` #### 四、验证安装结果 ```bash redis-cli --version # 成功输出示例:redis-cli 7.2.4 ``` #### 五、典型错误排查 | 现象 | 解决方案 | |------|----------| | 安装后仍提示未找到 | 执行`hash -r`清除缓存路径 | | 权限不足错误 | 使用`sudo redis-cli`或修正文件权限 | | 多版本冲突 | 使用`update-alternatives`配置默认版本 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值