前言
Redis是一款内存高速缓存数据库。Redis全称为:Remote Dictionary Server(远程数据服务),使用C语言编写,Redis是一个key-value存储系统(键值存储系统),支持丰富的数据类型,如:String、list、set、zset、hash。Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。
五种基本数据结构
String
String是Redis中最基本的数据类型,一个Key对应一个value。
String类型是二进制安全的,意思是 redis 的 string 可以包含任何数据。如数字,字符串,jpg图片或者序列化的对象。命令如下
命令 | 简述 | 用法 |
---|---|---|
GET | 获取指定键的值 | GET KEY |
SET | 为指定键赋值 | SET KEY VALUE |
DEL | 删除存储在键中的值 | DEL KEY |
INCR | 给指定键的值+1 | INCR KEY |
DECR | 给指定键的值-1 | DECR KEY |
INCRBY | 将指定键的值加上整数 | INCRBY KEY AMOUNT |
DECRBY | 将指定键的值减去整数 | DECRBY KEY AMOUNT |
List列表
使用List结构,我们能够轻松地实现最新消息排队功能。List另一个应用就是消息队列,可以利用List的push操作,将任务放入list中,然后工作线程再用pop操作将任务取出进行执行
命令 | 简述 | 用法 |
---|---|---|
RPUSH | 将给定值推入列表右端 | RPUSH KEY VALUE |
LPUSH | 将给定值推入列表左端 | LPUSH KEY VALUE |
RPOP | 从列表右端弹出一个值,并返回 | RPOP KEY |
LPOP | 从列表左端弹出一个值,并返回 | LPOP KEY |
LRANGE | 获取列表在给定范围的所有值 | LRANGE KEY 0,-1 |
LINDEX | 通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 | LINDEX KEY INDEX |
使用列表的技巧:
- lpush+lpop=Stack(栈)
- lpush+rpop=Queue(队列)
- lpush+ltrim=Capped Collection(有限集合)
- lpush+brpop=Message Queue(消息队列)
Set集合
Redis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
命令 | 简述 | 用法 |
---|---|---|
SADD | 向集合中添加一个或多个成员 | GET KEY |
SCARD | 获取集合的成员数 | SET KEY VALUE |
SMEMBERS | 返回集合中的所有成员 | DEL KEY |
SISMEMBER | 判断member元素是否是集合中的一员 | INCR KEY |
ZSet有序集合
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有续集合的成员是唯一的 ,但分数(scope)是可重复的
命令 | 简述 | 用法 |
---|---|---|
ZADD | 将一个带有指定分值的成员添加到有序集合里面 | ZADD zset-key 178 member1 |
ZRANGE | 根据元素在有序集合中的位置,从集合中获取多个元素 | ZRANGE zset-key 0-1 withccores |
ZREM | 如果有序集合中有这个元素,那么移除这个元素 | ZREM zset-key member1 |
Hash散列
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
命令 | 简述 | 用法 |
---|---|---|
HSET | 添加键值对 | HSET hash-key sub-key1 value1 |
HGET | 获取该散列键对应的值 | HGET hash-key key1 |
HGETALL | 返回所有键值对 | HGETALL hash-key |
HDEL | 如果给定键存在,就移除这个键 | HDEL hash-key sub-key1 |