Redis之link 链表结构命令详解

6 篇文章 0 订阅

lpush key value

作用: 把值插入到链表(左边)头部

<?php
# 将数据一一加入到列表中
$redis->lpush('today_cost', 30);
$redis->lpush('today_cost', 1.5);
$redis->lpush('today_cost', 10);
$redis->lpush('today_cost', 8);
//array(8,10,1.5,30)
rpop key

作用: 返回并删除链表尾元素

<?php
$redis->rpop('today_cost');//30
rpush key value

作用: 把值插入到链表(右边)尾部

<?php
$redis->rpush('today_cost',70);//70
lpop key 不解释

作用: 返回并删除链表(左边)头部

<?php
$redis->lpop('today_cost');
//array(10,1.5,30)
lrange key start stop

作用: 返回链表中[start ,stop]中的元素
规律: 左数从0开始,右数从-1开始

如果start下标比列表的最大下标end(LLEN list减去1)还要大,或者start > stop,LRANGE返回一个空列表。

如果stop下标比end下标还要大,Redis将stop的值设置为end。

<?php
$redis->lrange('today_cost',0,-1);
//array(8,10,1.5,30)
lrem key count value

作用: 从key链表中删除 value值
注: 删除count的绝对值个value后结束
Count > 0 从表头删除
Count < 0 从表尾删除

<?php
$redis->lPush('key1', 'A');
$redis->lPush('key1', 'B');
$redis->lPush('key1', 'C');
$redis->lPush('key1', 'A');
$redis->lPush('key1', 'A');

$redis->lRange('key1', 0, -1);// array('A', 'A', 'C', 'B', 'A')
$redis->lRem('key1', 'A', 2); // 2
$redis->lRange('key1', 0, -1);// array('C', 'B', 'A')
ltrim key start stop

作用: 剪切key对应的链接,切[start,stop]一段,并把该段重新赋给key

<?php
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');
$redis->lRange('key1', 0, -1); // array('A', 'B', 'C')
$redis->lTrim('key1', 0, 1);
$redis->lRange('key1', 0, -1); // array('A', 'B')
lindex key index

作用: 返回index索引上的值,
如 lindex key 2

<?php
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');  // key1 => [ 'A', 'B', 'C' ]
$redis->lGet('key1', 0);     // 'A'
$redis->lGet('key1', -1);    // 'C'
$redis->lGet('key1', 10);    // `FALSE`
llen key

作用:计算链接表的元素个数
redis 127.0.0.1:6379> llen task
(integer) 3

<?php
$redis->rPush('key1', 'A');
$redis->rPush('key1', 'B');
$redis->rPush('key1', 'C');  // key1 => [ 'A', 'B', 'C' ]
$redis->lLen('key1');       // 3
$redis->rPop('key1');
$redis->lLen('key1');       // 2
linsert key after|before search value

作用: 在key链表中寻找’search’,并在search值之前|之后,.插入value
注: 一旦找到一个search后,命令就结束了,因此不会插入多个value

<?php
$redis->delete('key1');
$redis->lInsert('key1', Redis::AFTER, 'A', 'X');     // 0

$redis->lPush('key1', 'A');
$redis->lPush('key1', 'B');
$redis->lPush('key1', 'C');

$redis->lInsert('key1', Redis::BEFORE, 'C', 'X');    // 4
$redis->lRange('key1', 0, -1);                       // array('A', 'B', 'X', 'C')

$redis->lInsert('key1', Redis::AFTER, 'C', 'Y');     // 5
$redis->lRange('key1', 0, -1);                       // array('A', 'B', 'X', 'C', 'Y')

$redis->lInsert('key1', Redis::AFTER, 'W', 'value'); // -1
rpoplpush source dest

作用: 把source的尾部拿出,放在dest的头部,
并返回 该单元值

例:

<?php
$redis->delete('x', 'y');

$redis->lPush('x', 'abc');
$redis->lPush('x', 'def');
$redis->lPush('y', '123');
$redis->lPush('y', '456');

// move the last of x to the front of y.
var_dump($redis->rpoplpush('x', 'y'));//string(3) "abc"
var_dump($redis->lRange('x', 0, -1)); //array(1) {[0]=> string(3) "def"}
var_dump($redis->lRange('y', 0, -1));//array(3) {[0]=> string(3) "abc" [1]=>string(3) "456" [2]=>string(3) "123"}
brpop,blpop key timeout

作用:等待弹出key的尾/头元素,
Timeout为等待超时时间
如果timeout为0,则一直等待

场景: 长轮询Ajax,在线聊天时,能够用到

<?php
// Non blocking feature
$redis->lPush('key1', 'A');
$redis->delete('key2');

$redis->blPop('key1', 'key2', 10); // array('key1', 'A')
$redis->blPop(array('key1', 'key2'), 10); // array('key1', 'A')
$redis->brPop('key1', 'key2', 10); // array('key1', 'A')
$redis->brPop(array('key1', 'key2'), 10); // array('key1', 'A')

// Blocking feature

// process 1
$redis->delete('key1');
$redis->blPop('key1', 10);// 阻断10秒

// process 2
$redis->lPush('key1', 'A');

// process 1
// array('key1', 'A') is returned
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值