styxmx 发表于 2016-12-17 10:41:36

Redis lists操作

  list 是一个链表结构,主要功能是push、pop、获取一个范围的所有值等等,操作中key理
  解为链表的名字。 
  Redis的list 类型其实就是一个每个子元素都是string类型的双向链表。链表的最大长度是(2
  的32次方)。我们可以通过push,pop操作从链表的头部或者尾部添加删除元素。这使得list
  既可以用作栈,也可以用作队列。 
  有意思的是list 的pop操作还有阻塞版本的,当我们pop一个list 对象时,如果list 是空,
  或者不存在,会立即返回nil。但是阻塞版本的bpop可以则可以阻塞,当然可以加超时时
  间,超时后也会返回nil。为什么要阻塞版本的pop呢,主要是为了避免轮询。举个简单的
  例子如果我们用list 来实现一个工作队列。执行任务的thread可以调用阻塞版本的pop去获
  取任务这样就可以避免轮询去检查是否有任务存在。当任务来时候工作线程可以立即返回,
  也可以避免轮询带来的延迟。
  redis 127.0.0.1:6379> lpush mylist "world" 从头部往list中添加数据
  (integer) 1
  redis 127.0.0.1:6379> lpush mylist "hello"
  (integer) 2
  redis 127.0.0.1:6379> lrange mylist 0 -1 获取list中的全部数据
  1) "hello"
  2) "world"
  redis 127.0.0.1:6379> rpush mylist2 "hello" 从尾部往list中添加数据
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist2 "world"
  (integer) 2
  redis 127.0.0.1:6379> lrange mylist2 0 -1
  1) "hello"
  2) "world"
  redis 127.0.0.1:6379> rpush mylist3 hello
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist3 world
  (integer) 2
  redis 127.0.0.1:6379> linsert mylist3 before world there 往list中指定位置插入数据
  (integer) 3
  redis 127.0.0.1:6379> lrange mylist3 0 -1
  1) "hello"
  2) "there"
  3) "world"
  redis 127.0.0.1:6379> rpush mylist4 one
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist4 two
  (integer) 2
  redis 127.0.0.1:6379> rpush mylist4 three
  (integer) 3
  redis 127.0.0.1:6379> lset mylist4 0 four 根据下标索引往list中插入数据
  OK
  redis 127.0.0.1:6379> lset mylist4 -2 five
  OK
  redis 127.0.0.1:6379> lrange mylist4 0 -1
  1) "four"
  2) "five"
  3) "three"
  redis 127.0.0.1:6379> rpush mylist5 hello
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist5 hello
  (integer) 2
  redis 127.0.0.1:6379> rpush mylist5 foo
  (integer) 3
  redis 127.0.0.1:6379> rpush mylist5 hello
  (integer) 4
  redis 127.0.0.1:6379> lrem mylist5 2 hello 删除list中重复个数的数据,当个数大于0从头部删除,小于0从尾部删除,等于0删除全部,返回删除的个数
  (integer) 2
  redis 127.0.0.1:6379> lrange mylist5 0 -1
  1) "foo"
  2) "hello"
  redis 127.0.0.1:6379> rpush mylist6 hello
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist6 hello
  (integer) 2
  redis 127.0.0.1:6379> rpush mylist6 foo
  (integer) 3
  redis 127.0.0.1:6379> rpush mylist hello
  (integer) 3
  redis 127.0.0.1:6379> lrem mylist6 -1 hello
  (integer) 1
  redis 127.0.0.1:6379> lrange mylist6 0 -1
  1) "hello"
  2) "foo"
  redis 127.0.0.1:6379> lrem mylist6 0 hello
  (integer) 1
  redis 127.0.0.1:6379> lrange mylist6 0 -1
  1) "foo"
  redis 127.0.0.1:6379> rpush mylist7 one
  (integer) 1
  redis 127.0.0.1:6379> rpush mylist7 two
  (integer) 2
  redis 127.0.0.1:6379> rpush mylist7 three
  (integer) 3
  redis 127.0.0.1:6379> rpush mylist7 four
  (integer) 4
  redis 127.0.0.1:6379> ltrim mylist7 1 -1  更具指定下标截取list中部分的数据
  OK
  redis 127.0.0.1:6379> lrange mylist7 0 -1
  1) "two"
  2) "three"
  3) "four"
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "hello"
  2) "world"
  3) "hello"
  redis 127.0.0.1:6379> lpop mylist 从头部删除一个数据
  "hello"
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "world"
  2) "hello"
  redis 127.0.0.1:6379> lpop mylist
  "world"
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "hello"
  redis 127.0.0.1:6379> lpush mylist peng
  (integer) 2
  redis 127.0.0.1:6379> lpush mylist di
  (integer) 3
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "di"
  2) "peng"
  3) "hello"
  redis 127.0.0.1:6379> rpop mylist 从尾部删除一个数据
  "hello"
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "di"
  2) "peng"
  redis 127.0.0.1:6379> lrange mylist1 0 -1
  (empty list or set)
  redis 127.0.0.1:6379> lrange mylist2 0 -1
  1) "hello"
  2) "world"
  redis 127.0.0.1:6379> rpoplpush mylist mylist2 将list1中的数据从尾部删除,头部新增到list2中
  "peng"
  redis 127.0.0.1:6379> lrange mylist2 0 -1
  1) "peng"
  2) "hello"
  3) "world"
  redis 127.0.0.1:6379> lrange mylist 0 -1
  1) "di"
  redis 127.0.0.1:6379> lindex mylist5 0 获得指定下标的值
  "foo"
  redis 127.0.0.1:6379> llen mylist5 获得list的长度
  (integer) 2
页: [1]
查看完整版本: Redis lists操作