目录
lpush
1.语法
lpush key value [value]
2.解析
将一个或多个值value插入到列表key的表头
如果有多个value值,那么各个value值按从左到右的顺序依次插入到表头:比如说,对空列表mylist
执行命令lpush mylist a b c,列表的值将是c,b,a,这等同于原子性地执行lpush mylist a等三个命令
如果key不存在,一个空列表会被创建并执行lpush操作
当key存在但不是列表类型时,返回一个错误
2.4以前lpush只接受单个value值
3.返回值:
执行lpush命令后,列表的长度
4.例子:
#加入单个元素
lpush student sunny
#加入重复元素
lpush student sunny
lrange student 0 -1
#加入多个元素
lpush student sunny jack sony
lrange student 0 -1
lpushx
1.语法
lpushx key value
2.解析
将值value插入到列表key的表头,当且仅当key存在并且是一个列表
当key不存在时,lpushx什么也不做
3.返回值:
lpushx命令执行之后,表的长度
4.例子:
#对空列表执行lpushx
llen student
lpushx student sunny //失败 因为列表为空
#对非空列表执行lpushx
lpush student sunny
lpushx student jack
lrange student 0 -1
rpush
1.语法
rpush key value [value...]
2.解析
将一个或多个值value插入到列表key的表尾(最右边)
如果有多个value值,那么各个value值按从左到右的顺序依次插入到表尾
比如一个空列表m执行rpush m a b c,得出的结果列表为a b c,相当于执行三个命令
如果key不存在,一个空列表会被创建并执行rpush操作
当key存在但不是列表类型是,返回一个错误
2.4以前的rpush命令,只接受单个value值
3.返回值:
执行rpush操作之后,表的长度
4.例子:
#添加单个元素
rpush student sunny
#添加重复元素
rpush student sunny
lrange studeny 0 -1
#添加多个元素
rpush student sunny jack sony
lrange student 0 -1
rpushx
1.语法
rpushx key value
2.解析
将值value插入到列表key的末尾,当且仅当key存在并且是一个列表
当key不存在时,rpushx命令什么也不做
3.返回值:
rpushx命令执行之后,表的长度
4.例子:
#key不存在
llen student
rpushx student sunny //执行失败 不存在的key
#key存在并且是一个非空列表
rpush student sunny
rpushx student jack
lrange student 0 -1
lpop
1.语法
lpop key
2.解析
移除并返回列表key的元素头
3.返回值:
列表的头元素,当key不存在,返回nil
4.例子:
llen student
rpush student sunny
rpush student jack
lpop student
rpop
1.语法
rpop key
2.解析
移除并返回列表key的尾元素
3.返回值:
列表的尾元素,当key不存在时,返回nil
4.例子:
rpush student sunny
rpush student jack
rpush student sony
rpop student
lrange student 0 -1
rpoplpush
1.语法
rpoplpush source destination
2.解析
命令rpoplpush在一个原子时间内,执行以下两个动作:
将列表source中的最后一个元素弹出(尾元素),并返回给客户端
将source弹出的元素插入到列表destination,作为destination列表的头元素
举个例子:
有两个列表source和desitination,source列表有元素a,b,c,destination有元素想,x,y,z
执行rpoplpush之后,source列表元素包含a,b,destination有c,x,y,z,并且返回元素c给客户端
如果source不存在,值nil被返回,并且不执行其他动作
如果source和destination相同,则列表中的表尾元素被移动到表头,并返回该元素,可以把这种情况视作列表的旋转操作
3.返回值:
被弹出的元素
4.例子:
#s和d不同
lpush s a b c d
rpoplpush s d
lrange s 0 -1
lrange d 0 -1
#s和d相同
rpush s 1 2 3 4
lrange s 0 -1
rpoplpush s s
lrange s 0 -1
模式
模式:安全的队列
redis的列表经常被用作队列,用于不同程序之间有序地交换信息.一个客户d端通过lpush命令将消息放入队列中
而另一个客户端通过rpop或者brpop命令取出队列中等待时间最长的消息
注意的是,上面的队列方法是不可靠的,因为在这个过程中,一个客户端可能在取出一个消息之后崩溃,
而未处理完的消息也因此丢失。
使用rpoplpush命令可以解决这个问题,因为它不仅返回一个消息,同时将这个消息添加到另一个备份列表当中
如果一切正常的话,当一个客户端完成某个消息的处理之后,可以用lrem命令将这个消息从备份中删除
最后,还可以添加一个客户端专门用于监视备份表,它自动地将超过一定处理时限的消息重新放入到队列中区,这样不会丢失任何笑了
模式:循环列表
通过使用相同的key作为rpoplpush命令的两个参数,客户端可以用一个接一个地获取列表元素的方式
取得列表的所有元素,而不必像lrange命令那样一下子将所有列表元素都从服务器传送到客户端
以上两个模式设置在以下的两个情况下也能正常的工作:
有多个客户端同时对一个列表进行旋转,他们获取不同的元素,直到所有元素都被读取完 之后从头 开始
有客户端在向列表尾部(右边)添加新元素
这个模式使得我们可以很容易实现这一类系统:有N个客户端,需要连续不断的对一些元素进行处理
而且处理的过程必须尽可能的快.一个典型的例子就是服务器的监控程序,他们需要在短时间内
,并行的检查一组网站,确保他们的可访问性。