常用php操作redis命令整理(三)LIST类型

摘要:
如果密钥不存在,将创建一个空列表并执行LPUSH操作。phpvar_dump;//IntRPUSHX插入在链接列表的末尾/右侧。如果链接列表不存在,则返回0。如果存在,则插入成功。返回当前链接列表长度lpush;//插入链接列表的头/左侧并返回链接列表的长度int$redis-˃lpush//插入链接列表头/左侧,返回链接列表长度int$reis-˃lppush//插入链接的头/右侧并返回链接的列表长度intvar_dump;//数组{[0]=˃字符串“E”[1]=˃字符串“D”[2]=˃字符串“A”[3]=˃字符串“E”[4]=˃字符串“B”[5]=˃字符串“A”[6]=˃字符串“C”[7]=˃字符串“D”[8]=˃字符串“C”[9]=˃字符串”B“[10]=˃字符串”A“}var_ dump;//删除链接列表左侧的2个A元素;Int//array{[0]=˃string“E”[1]=˃string“D”[2]=˃string“E”[3]=˃string“D”[4]=˃string“C”[5]=˃string”D“[6]=˃string”C“[7]=˃string”B“[8]=˃string“A”}LSET将列表键下标要索引的元素的值设置为偶数。

LIST

头元素和尾元素:头元素指的是列表左端/前端第一个元素,尾元素指的是列表右端/后端第一个元素。举个例子,列表list包含三个元素:x, y, z,其中x是头元素,而z则是尾元素。
空列表:指不包含任何元素的列表,Redis将不存在的key也视为空列表。

LPUSH

将一个或多个值value插入到列表key的表头。如果key不存在,一个空列表会被创建并执行LPUSH操作。

<?php
var_dump($redis->lpush('list-key','A')); //插入链表头部/左侧,返回链表长度 int(1) 
var_dump($redis->lpush('list-key','B')); //插入链表头部/左侧,返回链表长度 int(2)    
var_dump($redis->lpush('list-key','C','D'));  //插入链表头部/左侧,返回链表长度 int(4)    

RPUSH

将一个或多个值value插入到列表key的表尾。如果key不存在,一个空列表会被创建并执行LPUSH操作。

<?php
var_dump($redis->rpush('list-key','A')); //插入链表尾部/右侧,返回链表长度int(1)
var_dump($redis->rpush('list-key','B')); //插入链表尾部/右侧,返回链表长度int(2)
var_dump($redis->rpush('list-key','C','D')); //插入链表尾部/右侧,返回链表长度 int(4)

LPUSHX

插入链表头部/左侧,链表不存在返回0,存在即插入成功,返回当前链表长度

<?php
var_dump($redis->lpushx('list-key', 'E'));  //int(5) 

RPUSHX

 插入链表尾部/右侧,链表不存在返回0,存在即插入成功,返回当前链表长度

<?php
var_dump($redis->rpushx('list-key', 'E'));  //int(5) 

LPOP

移除并返回列表key的头元素,当key不存在时,返回nil。

<?php
$redis->lpush('list-key','A'); //插入链表头部/左侧,返回链表长度 int(1) $redis->lpush('list-key','B'); //插入链表头部/左侧,返回链表长度 int(2) $redis->lpush('list-key','C','D'); //插入链表头部/左侧,返回链表长度 int(4) var_dump($redis->lpop('list-key')); // string(1) "D"

RPOP

移除并返回列表key的尾元素,当key不存在时,返回nil。

<?php
$redis->lpush('list-key','A'); //插入链表头部/左侧,返回链表长度 int(1) 
$redis->lpush('list-key','B'); //插入链表头部/左侧,返回链表长度 int(2)    
$redis->lpush('list-key','C','D');  //插入链表头部/左侧,返回链表长度 int(4)    

var_dump($redis->rpop('list-key'));  //string(1) "A"

LLEN/LSIZE

返回列表key的长度;如果key不存在,则key被解释为一个空列表,返回0.如果key不是列表类型,返回一个错误。

<?php
var_dump($redis->lsize('list-key'));  //int(3)
var_dump($redis->llen('list-key'));  //int(3)

LRANGE

返回列表key中指定区间内的元素,区间以偏移量start和stop指定。下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素,以此类推。结束位置为-1 获取开始位置之后的全部

<?php
var_dump($redis->lrange('list-key',0,1));   //array(2) { [0]=> string(1) "D" [1]=> string(1) "C" }
var_dump($redis->lrange('list-key',0,-1));  //array(3) { [0]=> string(1) "D" [1]=> string(1) "C" [2]=> string(1) "B" }

LREM

根据参数count的值,移除列表中与参数value相等的元素。

$redis->lpush('list-key','A'); //插入链表头部/左侧,返回链表长度 int(1) 
$redis->lpush('list-key','B'); //插入链表头部/左侧,返回链表长度 int(2)    
$redis->lpush('list-key','C','D','C','A','D','E','A','D','E');  //插入链表头部/左侧,返回链表长度 int(4)    

var_dump($redis->lrange('list-key',0,-1)); 
 //array(11) {
  [0]=>
  string(1) "E"
  [1]=>
  string(1) "D"
  [2]=>
  string(1) "A"
  [3]=>
  string(1) "E"
  [4]=>
  string(1) "D"
  [5]=>
  string(1) "A"
  [6]=>
  string(1) "C"
  [7]=>
  string(1) "D"
  [8]=>
  string(1) "C"
  [9]=>
  string(1) "B"
  [10]=>
  string(1) "A"
}
var_dump($redis->lrem('list-key','A',2));  // 链表从左开始删除元素2个A ;    int(2)
//array(9) {
  [0]=>
  string(1) "E"
  [1]=>
  string(1) "D"
  [2]=>
  string(1) "E"
  [3]=>
  string(1) "D"
  [4]=>
  string(1) "C"
  [5]=>
  string(1) "D"
  [6]=>
  string(1) "C"
  [7]=>
  string(1) "B"
  [8]=>
  string(1) "A"
}

LSET

将列表key下标为index的元素的值甚至为value。

<?php
$redis->lpush('list-key','A'); //插入链表头部/左侧,返回链表长度 int(1) 
$redis->lpush('list-key','B'); //插入链表头部/左侧,返回链表长度 int(2)    
var_dump($redis->lset('list-key',1,'D'));  // bool(true) 
var_dump($redis->lrange('list-key',0,-1)); array(2) { [0]=> string(1) "B" [1]=> string(1) "D" }

LTRIM

对一个列表进行修剪(trim),让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。
举个例子,执行命令LTRIM list 0 2,表示只保留列表list的前三个元素,其余元素全部删除。
下标(index)参数start和stop都以0为底,也就是说,以0表示列表的第一个元素,以1表示列表的第二个元素

<?php
$redis->lpush('list-key','A'); //插入链表头部/左侧,返回链表长度 int(1) 
$redis->lpush('list-key','B'); //插入链表头部/左侧,返回链表长度 int(2)    
$redis->lpush('list-key','C','D','E');  //插入链表头部/左侧,返回链表长度 int(4)    

var_dump($redis->ltrim('list-key',2,3));  // bool(true) 
var_dump($redis->lrange('list-key',0,-1));//array(2) { [0]=> string(1) "C" [1]=> string(1) "B" }

LINDEX

返回列表key中,下标为index的元素

<?php
$redis->lpush('list-key','A'); //插入链表头部/左侧,返回链表长度 int(1) 
$redis->lpush('list-key','B'); //插入链表头部/左侧,返回链表长度 int(2)    
$redis->lpush('list-key','C','D','E');  //插入链表头部/左侧,返回链表长度 int(4)    

var_dump($redis->lindex('list-key',3));//string(1) "B"

LINSERT

将值value插入到列表key当中,位于值pivot之前或之后。当pivot不存在于列表key时,不执行任何操作。当key不存在时,key被视为空列表,不执行任何操作。

Redis::AfTER(表示后面插入)

<?php
$redis->lpush('list-key','A'); //插入链表头部/左侧,返回链表长度 int(1) 
$redis->lpush('list-key','B'); //插入链表头部/左侧,返回链表长度 int(2)    
$redis->lpush('list-key','C','D','E');  //插入链表头部/左侧,返回链表长度 int(4)    

var_dump($redis->linsert('list-key',Redis::BEFORE,'C','X'));
var_dump($redis->lrange('list-key',0,-1));

//array(6) { [0]=> string(1) "E" [1]=> string(1) "D" [2]=> string(1) "X" [3]=> string(1) "C" [4]=> string(1) "B" [5]=> string(1) "A" }

RPOPLPUSH

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

①将列表source中的最后一个元素(尾元素)弹出,并返回给客户端。
②将source弹出的元素插入到列表destination,作为destination列表的的头元素。

举个例子,你有两个列表source和destination,source列表有元素a, b, c,destination列表有元素x, y, z,执行RPOPLPUSH source destination之后,source列表包含元素a, b,destination列表包含元素c, x, y, z ,并且元素c被返回。
如果source不存在,值nil被返回,并且不执行其他动作。
如果source和destination相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种特殊情况视作列表的旋转(rotation)操作。

设计模式: 一个安全的队列

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

<?php
$redis->lpush('list-key','A'); 
$redis->lpush('list-key','B'); 
$redis->lpush('list-key','C','D','E'); 


$redis->lpush('list-key2','X','Y','Z');  
var_dump($redis->rpoplpush('list-key','list-key2')); //string(1) "A" 
var_dump($redis->lrange('list-key',0,-1));// array(4) { [0]=> string(1) "E" [1]=> string(1) "D" [2]=> string(1) "C" [3]=> string(1) "B" } 
var_dump($redis->lrange('list-key2',0,-1));//array(4) { [0]=> string(1) "A" [1]=> string(1) "Z" [2]=> string(1) "Y" [3]=> string(1) "X" }

免责声明:文章转载自《常用php操作redis命令整理(三)LIST类型》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇css盒子模型的宽度问题(转)仅供个人学习-接口测试工具:jmeter、postman、soapUI的区别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

fastreport对象的属性和方法

对象的属性和方法 报表的报表可视对象都是TfrView的继承类。在脚本中可以使用下列属性和方法: 属性 类型 描    述 BandAlign Integer 设置对象在band中的位置。 可选值:baNone, baLeft, baRight, baCenter, baWidth, baBottom。 Enabled Boolean...

linux 常用操作以及概念

一、常用操作以及概念 查看LINUX发行版的名称及其版本号的命令: lsb_release -a cat /etc/redhat-release(针对redhat,Fedora) 0.rpm包路径:/mnt/Packages 1. --help 指令的基本用法与选项介绍。 2. man man 是 manual 的缩写,将指令的具体信息显示出来。...

Asp.net 面向接口可扩展框架之数据处理模块及EntityFramework扩展和Dapper扩展(含干货)

接口数据处理模块是什么意思呢?实际上很简单,就是使用面向接口的思想和方式来做数据处理。 还提到EntityFramework和Dapper,EntityFramework和Dapper是.net环境下推崇最高的两种ORM工具。 1、EntityFramework是出自微软根正苗红的.net下的ORM工具,直接在Vs工具和Mvc框架中集成了,默认生成的项目就...

20个2020年最优秀的PHP框架回顾

这篇文章主要介绍了20个2020年最优秀的PHP框架回顾,简单分析了目前比较主流的优秀框架供大家参考,需要的朋友可以参考下   对于Web开发者来说,PHP是一款非常强大而又受欢迎的编程语言。世界上很多顶级的网站都是基于PHP开发的。本文我们就来回顾一下20个2020年最优秀的PHP框架。 每一个开发者都知道,拥有一个强大的框架可以让开发工作变得更加快捷...

分布式中使用Redis实现Session共享(二)

上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理。在阅读之前假设你已经会使用nginx+iis实现负载均衡搭建负载均衡站点了,这里我们会搭建两个站点来验证redis实现的session是否能共享。 阅读目录 Session实现原理 sessio...

Oracle中对列加密的方法

Oracle中对列加密的方法 2011-12-22 17:21:13 分类: Linux Oracle支持多种列加密方式: 1,透明数据加密(TDE):create table encrypt_col(id int,txt varchar2(100) encrypt using '算法名称' identified by '密钥' no salt);优...