Redis之lists类型以及操作
list是一个链表结构,主要功能是push、pop,获取一个范围的所有值等等。操作中key理解为链表的名字。Redis的list类型其实就是一个每个子元素都是string类型的双向链表。可以通过push、pop操作从链表的头部或者尾部添加删除元素,这样list既可以作为栈,也可以作为队列。
栈和队列的特性 栈:先进后出;队列:先进先出。
1. lpush 为链表的头部添加字符串元素
格式: lpush mylist1 "allen"
含义:在链表mylist1中,从头部添加一个元素allen
2. lrange 列出链表中的元素
格式: lrange mylist1 0 -1
含义: 列出链表mylist1中,从第一个到最后一个元素。0,表示从头开始的第一个元素。-1,表示尾部的第一个元素,整个的意思就是从头取到尾。
3. rpush 从尾部压入元素
格式: rpush mylist1 “age”
含义: 为链表mylist1,从尾部压入一个元素age。
ps:切记一点,指向头的方向为前。
4. lset 设置list中指定下标的元素值。
格式: lset mylist1 0 “frank”
含义: 为链表mylist1,下标为0的元素,值修改为frank。
注意: 下标是从头开始的。成功返回OK,下标不存在:(error) ERR index out of range
5. lrem 从链表中删除N个和给定值一样的元素。
格式: lrem mylist1 2 allen
含义: 从链表mylist1中,删掉2个值为allen的元素。
注意: 是从头部依次往下删除的。删除成功:返回删除掉的个数;删除失败返回0。
注意的注意: 如果n小于0,表示从尾部开始删除;n=0,代表全部删除。
6. ltrim 保留指定key的值范围内的数据。
格式: ltrim mylist1 1 2
含义: 保留链表mylist1中下标1到下标2之间的所有元素,这个区间之外的元素都删掉了。
注意: 这是保留其中的数据,不在其中的就会删掉。删除成功返回OK。如果下标不存在,就会把整个链表清空。
7. lpop 从头部弹出一个元素
格式: lpop mylist1
含义: 从链表mylist1的头部弹出一个元素。返回值是弹出元素的值。
8. rpop 从尾部弹出一个元素
格式: rpop mylist1
含义: 从链表mylist1的尾部弹出一个元素。返回值是弹出元素的值。
9. rpoplpush 从第一个list的尾部弹出一个元素,然后添加到第二个list的头部。
格式: rpoplpush mylist1 mylist2
含义: 从链表mylist1的尾部弹出一个元素,然后添加到第二个链表mylist2的头部。
举例:
127.0.0.1:6379> LRANGE mylist1 0 -1
1) "age"
2) "allen"
127.0.0.1:6379> LRANGE mylist2 0 -1
1) "sex"
127.0.0.1:6379> rpoplpush mylist1 mylist2
"allen"
127.0.0.1:6379> LRANGE mylist1 0 -1
1) "age"
127.0.0.1:6379> LRANGE mylist2 0 -1
1) "allen"
2) "sex"
由例子同时可以知道,返回值是弹出的那个值。
10. lindex 指定下标,返回对应的元素。
格式: lindex mylist2 2
含义: 把链表2中下标为2的元素返回。
11. llen 返回链表中元素的个数。
格式: llen mylist2
含义: 查看链表mylist2中的元素个数。
学PHP的小蚂蚁 原创博客 http://my.oschina.net/woshixiaomayi/blog