1、redis LIST 数据类型
在说历史数据存储的具体方式前,先说说redis的list类型。
Redis目前支持5种数据类型,分别是:
- String(字符串)
- List(列表)
- Hash(字典)
- Set(集合)
- Sorted Set(有序集合)
List(列表)
Redis列表是简单的字符串列表,可以类比到C++中的std::list,简单的说就是一个链表或者说是一个队列。可以从头部或尾部向Redis列表添加元素。列表的最大长度为2^32 - 1,也即每个列表支持超过40亿个元素。
Redis list的实现为一个双向链表,即可以支持反向查找和遍历,更方便操作,不过带来了部分额外的内存开销,Redis内部的很多实现,包括发送缓冲队列等也都是用的这个数据结构。
应用场景
Redis list的应用场景非常多,也是Redis最重要的数据结构之一,比如twitter的关注列表、粉丝列表等都可以用Redis的list结构来实现,再比如有的应用使用Redis的list类型实现一个简单的轻量级消息队列,生产者push,消费者pop/bpop。
相关命令
- BLPOP
BLPOP key1 [key2 ] timeout 取出并获取列表中的第一个元素,或阻塞,直到有可用 - BRPOP
BRPOP key1 [key2 ] timeout 取出并获取列表中的最后一个元素,或阻塞,直到有可用 - BRPOPLPUSH
BRPOPLPUSH source destination timeout 从列表中弹出一个值,它推到另一个列表并返回它;或阻塞,直到有可用 - LINDEX
LINDEX key index 从一个列表其索引获取对应的元素 - LINSERT
LINSERT key BEFORE|AFTER pivot value 在列表中的其他元素之后或之前插入一个元素 - LLEN
LLEN key 获取列表的长度 - LPOP
LPOP key 获取并取出列表中的第一个元素 - LPUSH
LPUSH key value1 [value2] 在前面加上一个或多个值的列表 - LPUSHX
LPUSHX key value 在前面加上一个值列表,仅当列表中存在 - LRANGE
LRANGE key start stop 从一个列表获取各种元素 - LREM
LREM key count value 从列表中删除元素 - LSET
LSET key index value 在列表中的索引设置一个元素的值 - LTRIM
LTRIM key start stop 修剪列表到指定的范围内 - RPOP
RPOP key 取出并获取列表中的最后一个元素 - RPOPLPUSH
RPOPLPUSH source destination 删除最后一个元素的列表,将其附加到另一个列表并返回它 - RPUSH
RPUSH key value1 [value2] 添加一个或多个值到列表 - RPUSHX
RPUSHX key value 添加一个值列表,仅当列表中存在
使用示例
redis 127.0.0.1:6379> lpush list1 redis (integer) 1 redis 127.0.0.1:6379> lpush list1 hello (integer) 2 redis 127.0.0.1:6379> rpush list1 world (integer) 3 redis 127.0.0.1:6379> llen list1 (integer) 3 redis 127.0.0.1:6379> lrange list1 0 3 1) "hello" 2) "redis" 3) "world" redis 127.0.0.1:6379> lpop list1 "hello" redis 127.0.0.1:6379> rpop list1 "world" redis 127.0.0.1:6379> lrange list1 0 3 1) "redis"
2、历史数据存储需求
3、