前言:
列表类型(LIST)可以储存一个有序字符串,常用的方法是从两端进行元素操作,也可以获取某一个片段,不过大量数据的索引存在瓶颈(不建议那么做)。
列表类型内部使用双向链表(double linked list)实现的,因此从几千万个元素的两端获取的获取元素,其效率与从10个元素两端获取效率是相同的。
应用场景分析:例如微博,空间,新鲜事消息推送等。因为获取列表前m条信息是非常快速的。列表还可以作为队列实现,之前的文章涉及到一点。
这次带有应用场景的场景,all in the memories。尝试使用redis作为唯一数据库进行场景举例。
正文
命令: Lpush Rpush key value 从两边开始进行压入操作 返回元素增加后列表长度。
LPOP RPOP 从两边移除元素 返回移除元素值。
LIEN numbers 获取 元素量
//例如获取评论列表,或者文章列表第N-M条。
LRANGE key start stop 返回范围值 初始索引为0 stop 范围若越界则返回列表最右边元素。
LREM key count value 删除列表中前 count 个值为value 的元素,返回实际LREM删除的个数。 例如:LREM numbers -3,2 移除右边3个为 2的元素。
LINDEX key index 获取索引值 LSET key index value 设置索引的值
//可以作为一个保存100条记录的日志 (LPUSH logs “系统记录第101条”; LTRIM logs 0,99;)
LTRIM key start end 删除索引之外所有元素
LINSERT key BEFORE|AFTER fkwebs value 向 key 中fkwebs前|后 中插入值value的数字。
//此命令可以不断的从两个列表之间进行进行转移接受的操作,例如实现一个网址监控系统,进行循环的转移检测的队列。
RPOPLPUSH source desination 从source执行RPOP 压入desination 左边。
//若第source为空可进行阻塞,直到有新的元素被添加,可设置超时阻塞时间。
BRPOPLPUSH source desonation TIMEOUT
RPUSHX key value 向已有的LIST 添加多个值,若不存在操作无效
//用于阻塞,执行LIST的队列操作 详情看优先级队列那篇。
BLPOP key1 [key2 ] timeout //第一个 BRPOP key1 [key2 ] timeout //从后