redis--lists类型及操作

lists类型

List是一个链表结构,主要功能是push、pop、获取 一个范围的所有值等等,操作中key理解为链表的名字。redis的list类型其实就是一个每个子元素都是string类型的双向链表。我们可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既 可以作为栈,又可以作为队列。

lpush

在key对应的list的头部压入字符串元素

127.0.0.1:6379> lpush list word
(integer) 1
127.0.0.1:6379> lpush list hello
(integer) 2
127.0.0.1:6379> lpush list 0 -1
(integer) 4
127.0.0.1:6379> lrange list 0 -1
1) "-1"
2) "0"
3) "hello"
4) "word"

注:lrange list 0 -1 其中0是指第一个,-1是指最后一个,这句话代表从头开始取到尾,如下图

示例

此处遵循栈的规则,先进后出(即最先进去的最后出去)

rpush

在key对应的list的尾部添加字符串元素

例如:从尾部压入两个数据,word和hello,然后从头取到尾

127.0.0.1:6379> rpush list1 word
(integer) 1
127.0.0.1:6379> rpush list1 hello
(integer) 2
127.0.0.1:6379> lrange list1 0 -1
1) "word"
2) "hello"

示例

上述例子相当于一个队列,先进先出

linsert

在key对应list的特定位置前或后添加字符串

如果要从one和two中间压入一个元素three,(注:指向头的方向为前)

示例

127.0.0.1:6379> lpush list one
(integer) 1
127.0.0.1:6379> rpush list two
(integer) 2
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "two"
127.0.0.1:6379> linsert list before two three
(integer) 3
127.0.0.1:6379> lrange list 0 -1
1) "one"
2) "three"
3) "two"

lset

设置list中指定下标的元素值

在PHP数组中,例如:

$arr = array(1,2,3);
$arr[0]=4;

则数组将会变成

array(4,2,3);

同样:

127.0.0.1:6379> lpush list5 one
(integer) 1
127.0.0.1:6379> lpush list5 two
(integer) 2
127.0.0.1:6379> lpush list5 three
(integer) 3
127.0.0.1:6379> lrange list5 0 -1
1) "three"
2) "two"
3) "one"
127.0.0.1:6379> lset list5 0 four
OK
127.0.0.1:6379> lrange list5 0 -1
1) "four"
2) "two"
3) "one"

注:指向头的方向为前。

lrem

从key对应的list中删除n个和value相同的元素。(n<0从尾删除,n=0全部删除)

127.0.0.1:6379> lpush list6 one
(integer) 1
127.0.0.1:6379> lpush list6 one
(integer) 2
127.0.0.1:6379> lpush list6 one
(integer) 3
127.0.0.1:6379> lrange list6 0 -1
1) "one"
2) "one"
3) "one"
127.0.0.1:6379> lrem list6 2 one
(integer) 2
127.0.0.1:6379> lrange list6 0 -1
1) "one"

lrem list6 2 one 是指从list6中删除2个one,返回的数为删除掉的个数

ltrim

保留指定key的值范围内的数据

例如:

list8中

1.one

2.two

3.three

4.four

ltrim list8 1 -1

是指保留从下标为1的(即第二个)到下标为-1的(即最后一个)元素,删除其余的,所得结果就是 two , three ,four

如果要保留two,three,就是ltrim list8 1 2

127.0.0.1:6379> rpush list8 one
(integer) 1
127.0.0.1:6379> rpush list8 two
(integer) 2
127.0.0.1:6379> rpush list8 three
(integer) 3
127.0.0.1:6379> rpush list8 four
(integer) 4
127.0.0.1:6379> lrange list8 0 -1
1) "one"
2) "two"
3) "three"
4) "four"
127.0.0.1:6379> ltrim list8 1 2
OK
127.0.0.1:6379> lrange list8 0 -1
1) "two"
2) "three"

lpop

从list的头部删除元素,并返回删除元素

rpop

从list的尾部删除元素,并返回删除元素

127.0.0.1:6379> rpush list10 one
(integer) 1
127.0.0.1:6379> rpush list10 two
(integer) 2
127.0.0.1:6379> rpush list10 three
(integer) 3
127.0.0.1:6379> lrange list10 0 -1
1) "one"
2) "two"
3) "three"
127.0.0.1:6379> lpop list10
"one"
127.0.0.1:6379> lrange list10 0 -1
1) "two"
2) "three"
127.0.0.1:6379> rpop list10
"three"
127.0.0.1:6379> lrange list10 0 -1
1) "two"

rpoplpush

从第一个list的尾部移出元素并添加到第二个list的头部

示例

127.0.0.1:6379> rpush list11 three
(integer) 1
127.0.0.1:6379> rpush list11 hello
(integer) 2
127.0.0.1:6379> lrange list11 0 -1
1) "three"
2) "hello"
127.0.0.1:6379> rpush list12 hello
(integer) 1
127.0.0.1:6379> rpush list12 foo
(integer) 2
127.0.0.1:6379> lrange list12 0 -1
1) "hello"
2) "foo"
127.0.0.1:6379> rpoplpush list11 list12
"hello"
127.0.0.1:6379> lrange list12 0 -1
1) "hello"
2) "hello"
3) "foo"
127.0.0.1:6379> lrange list11 0 -1
1) "three"

lindex

返回名称为key的list中index位置的元素

127.0.0.1:6379> lrange list12 0 -1
1) "hello"
2) "hello"
3) "foo"
127.0.0.1:6379> lindex list12 0
"hello"
127.0.0.1:6379> lindex list12 1
"hello"
127.0.0.1:6379> lindex list12 2
"foo"
127.0.0.1:6379> lindex list12 3
(nil)

注:nil代表空

llen

返回key对应list的长度

127.0.0.1:6379> lrange list12 0 -1
1) "hello"
2) "hello"
3) "foo"
127.0.0.1:6379> llen list12
(integer) 3
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值