Redis List 命令技巧
1.实现栈的功能(先进后出)
lpush + lpop = stack
127.0.0.1:6379> lpush mylist 1 2 3 4 5 (integer) 5 127.0.0.1:6379> lpop mylist "5" 127.0.0.1:6379> lpop mylist "4" 127.0.0.1:6379> lrange mylist 0 -1 1) "3" 2) "2" 3) "1"
2. 实现队列功能
lpush + rpop = queue
127.0.0.1:6379> lpush mylist 4 5 (integer) 5 127.0.0.1:6379> lrange mylist 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> rpop mylist "1" 127.0.0.1:6379> rpop mylist "2" 127.0.0.1:6379> lrange mylist 0 -1 1) "5" 2) "4" 3) "3"
3. 实现有限数据集合
lpush + ltrim = capped collection
ltrim [ltrim key range_l range_r]:保留区域类的元素,其他的删除
127.0.0.1:6379> rpush mylist 2 1 (integer) 5 127.0.0.1:6379> lrange mylist 0 -1 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> ltrim mylist 2 3 OK 127.0.0.1:6379> lrange mylist 0 -1 1) "3" 2) "2"
4.实现消息队列
lpush + brpop = message queue
Redis Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。
操作命令 BRPOP list timeout
brpop mylist 10
返回值
假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。
127.0.0.1:6379> lpush mylist 1 2 3 4 5 (integer) 5 127.0.0.1:6379> brpop mylist 10 1) "mylist" 2) "1" 127.0.0.1:6379> brpop mylist 100 1) "mylist" 2) "2" 127.0.0.1:6379> brpop mylist 10000 1) "mylist" 2) "3" 127.0.0.1:6379> brpop mylist 10 1) "mylist" 2) "4" 127.0.0.1:6379> brpop mylist 10 1) "mylist" 2) "5" 127.0.0.1:6379> brpop mylist 10 (nil) (10.05s)