List 列表

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

RPUSH key value [value …]

向存于 key 的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。

  1. redis> RPUSH mylist "hello"
  2. (integer) 1
  3. redis> RPUSH mylist "world"
  4. (integer) 2
  5. redis> LRANGE mylist 0 -1
  6. 1) "hello"
  7. 2) "world"
  8. redis>

LPOP key

移除并且返回 key 对应的 list 的第一个元素。

  1. redis> RPUSH mylist "one"
  2. (integer) 1
  3. redis> RPUSH mylist "two"
  4. (integer) 2
  5. redis> RPUSH mylist "three"
  6. (integer) 3
  7. redis> LPOP mylist
  8. "one"
  9. redis> LRANGE mylist 0 -1
  10. 1) "two"
  11. 2) "three"
  12. redis>

LTRIM key start stop

修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。

start 和 stop 都是由0开始计数的, 这里的 0 是列表里的第一个元素(表头),1 是第二个元素,以此类推。

例如: LTRIM foobar 0 2 将会对存储在 foobar 的列表进行修剪,只保留列表里的前3个元素。

start 和 end 也可以用负数来表示与表尾的偏移量,比如 -1 表示列表里的最后一个元素, -2 表示倒数第二个,等等。

应用场景:

1.取最新N个数据的操作

比如典型的取你网站的最新文章,通过下面方式,我们可以将最新的5000条评论的ID放在Redis的List集合中,并将超出集合部分从数据库获取

  • 使用LPUSH latest.comments命令,向list集合中插入数据
  • 插入完成后再用LTRIM latest.comments 0 5000命令使其永远只保存最近5000个ID
  • 然后我们在客户端获取某一页评论时可以用下面的逻辑(伪代码)
    FUNCTION get_latest_comments(start,num_items):
    id_list = redis.lrange("latest.comments",start,start+num_items-1)
    IF id_list.length < num_items
    1. id_list = SQL_DB(&#34;SELECT ... ORDER BY time LIMIT ...&#34;)
    END
    RETURN id_list

如果你还有不同的筛选维度,比如某个分类的最新N条,那么你可以再建一个按此分类的List,只存ID的话,Redis是非常高效的。

示例

取最新N个评论的操作

  1. 127.0.0.1:6379> lpush mycomment 100001
  2. (integer) 1
  3. 127.0.0.1:6379> lpush mycomment 100002
  4. (integer) 2
  5. 127.0.0.1:6379> lpush mycomment 100003
  6. (integer) 3
  7. 127.0.0.1:6379> lpush mycomment 100004
  8. (integer) 4
  9. 127.0.0.1:6379> LRANGE mycomment 0 -1
  10. 1) "100004"
  11. 2) "100003"
  12. 3) "100002"
  13. 4) "100001"
  14. 127.0.0.1:6379> LTRIM mycomment 0 1
  15. OK
  16. 127.0.0.1:6379> LRANGE mycomment 0 -1
  17. 1) "100004"
  18. 2) "100003"
  19. 127.0.0.1:6379> lpush mycomment 100005
  20. (integer) 3
  21. 127.0.0.1:6379> LRANGE mycomment 0 -1
  22. 1) "100005"
  23. 2) "100004"
  24. 3) "100003"
  25. 127.0.0.1:6379> LTRIM mycomment 0 1
  26. OK
  27. 127.0.0.1:6379> LRANGE mycomment 0 -1
  28. 1) "100005"
  29. 2) "100004"
  30. 127.0.0.1:6379>

原文: https://piaosanlang.gitbooks.io/redis/content/01day/list.html