list类型其实就是一个双向链表。通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list既可以用作栈(上进上出),也可以用作队列(上进下出)。
list类型操作:
Ipush key string | 在key对应list的头部添加字符串元素 |
rpop key | 从list的尾部删除元素,并返回删除元素 |
rpush key string | 在key对应list的尾部添加字符串元素 |
Ipop key | 从list的头部删除元素,并返回删除元素 |
llen key 返回 key | 对应list的长度,key不存在返回0,如果key对应类型不是list返回错误 |
Irange key start end | 返回指定区间内的元素,下标从0开始 |
Itrim key start end | 截取list,保留指定区间内元素 |
该list链表类型应用场合:
例:获得最新的5个登录用户信息:select * from user order by logintime desc limit 5;
以上sql语句可以实现用户需求,但是数据多的时候,全部数据都要受到影响,对数据库的负载比较高。必要情况还需要给关键字段(id或logintime)设置索引,索引也比较耗费系统资源。如果通过list链表实现以上功能,可以在list链表中只保留最新的5个数据,每进来一个新数据就删除一个旧数据,每次就可以从链表中直接获得需要的数据。极大节省各方面资源消耗。
设置一个list链表key login,内部有5个元素:
127.0.0.1:6379[1]> keys *
(empty list or set)
127.0.0.1:6379[1]> lpush login xiaoming
(integer) 1
127.0.0.1:6379[1]> lpush login liqiang
(integer) 2
127.0.0.1:6379[1]> lpush login wangkai
(integer) 3
127.0.0.1:6379[1]> lpush login zhanghua
(integer) 4
127.0.0.1:6379[1]> lpush login baifei
(integer) 5
127.0.0.1:6379[1]> keys *
1) "login"
127.0.0.1:6379[1]>
该链表每增加一个新元素,就删除一个旧元素,并且通过范围查找链表内部的全部元素信息:
127.0.0.1:6379[1]> lpush login lihong
(integer) 6
127.0.0.1:6379[1]> rpop login
"xiaoming"
127.0.0.1:6379[1]> lrange login 0 4
1) "lihong"
2) "baifei"
3) "zhanghua"
4) "wangkai"
5) "liqiang"
127.0.0.1:6379[1]> lpush login zhaoya
(integer) 6
127.0.0.1:6379[1]> rpop login
"liqiang"
127.0.0.1:6379[1]> lrange login 0 100
1) "zhaoya"
2) "lihong"
3) "baifei"
4) "zhanghua"
5) "wangkai"
127.0.0.1:6379[1]>
截取list,保留指定区间内元素:
127.0.0.1:6379[1]> ltrim login 1 3
OK
127.0.0.1:6379[1]> llen login
(integer) 3
127.0.0.1:6379[1]> lrange login 0 100
1) "lihong"
2) "baifei"
3) "zhanghua"
127.0.0.1:6379[1]>
转载请注明出处:BestEternity亲笔。