Redis 入门 - 数据类型:5种基础数据类型
一、Redis五种数据类型
Redis除了存储键之外还可以存储常见的5种数据类型,分别是:String、List、Set、Zset、Hash。
结构类型 | 结构存储的值 | 结构的读写能力 |
---|---|---|
String字符串 | 可以是字符串、整数或浮点数 | 对整个字符串或字符串的一部分进行操作;对整数或浮点数进行自增或自减操作 |
List列表 | 一个链表,链表上的每个节点都包含一个字符串 | 对链表的两端进行push和pop操作,读取单个或多个元素,根据值查找或删除元素 |
Set集合 | 包含字符串的无序集合,集合中每个字符串都是独一无二的 | 添加、获取、删除元素。检查一个元素是否存在于集合中;计算交集、并集、差集 |
Hash散列 | 包含键值对的无序散列表 | 添加、获取、删除单个元素;获取所有键值对元素 |
Zset有序集合 | 和散列一样,用于存储键值对;字符串成员与浮点数分数之间的有序映射;元素的排列顺序由分数的大小决定 | |
添加、获取、删除单个元素;根据分值范围或成员来获取元素 |
二、String字符串类型
Redis中的String类型就是一个由字符串组成的序列。
1.下图是一个String类型的实例,其中键为hello,值为world。
2.常用命令如下:
参数 | 作用 | 命令 |
---|---|---|
GET | 获取存储在给定键中的值 | get name |
SET | 设置存储在给定键中的值 | set name lll |
DEL | 删除存储在给定键中的值 | del name |
INCR | 将键存储的值加一 | INCR key |
DECR | 将键存储的值减1 | DECR key |
INCRBY | 将键存储的值加上整数 | INCRBY key amount |
DECRBY | 将键存储的值减去整数 | DECRBY key amount |
3.应用场景:
String是常用的一种数据类型,普通的key/value存储都可以归为此类,value不仅是String,还可以是数字。比如想知道什么时候封锁一个IP地址(访问超过几次),INCRBY命令让这些变得很容易,通过原子递增保持计数。
三、List列表类型
Redis中的List其实就是链表(Redis用双端链表实现List)。使用List结构,我们可以轻松地实现最新消息排队功能(比如新浪微博的TimeLine)。List的另一个应用就是消息队列,可以利用List的 PUSH 操作,将任务存放在List中,然后工作线程再用 POP 操作将任务取出进行执行。
常用命令:
参数 | 作用 | 命令 |
---|---|---|
RPUSH | 将给定值推入到列表右端 | RPUSH key value |
LPUSH | 将给定值推入到列表左端 | LPUSH key value |
RPOP | 从列表的右端弹出一个值,并返回被弹出的值 | RPOP key |
LPOP | 从列表的左端弹出一个值,并返回被弹出的值 | RPOP key |
LRANGE | 获取列表在给定范围上的所有值 | LRANGE key 0 -1 |
LINDEX | 通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 | |
LINDEX key index |
应用场景:
- 微博TimeLine
- 消息队列
四、Set集合类型
Redis的集合类型和列表都可以存储多个字符串,它们的不同之处在于。列表可以存储多个相同的字符串,而集合通过散列表来保证自己存储的每个字符串都是各不相同的。
常用命令如下:
参数 | 作用 | 命令 |
---|---|---|
SADD | 将给定元素添加到集合 | SADD key item |
SMEMBERS | 返回集合中包含的所有元素 | SMEMBERS key |
SISMEMBER | 检查给定元素是否存在于集合中 | SISMEMBER key item |
SREM | 如果给定的元素存在于集合中,那么移除这个元素 | SERM key item |
使用场景:
- 共同好友、二度好友(并集、交集、差集运算)
- 利用唯一性,可以统计访问网站的所有独立IP
- 好友推荐的时候,可以根据tag求交集,交集大于threshold就可以推荐
五、Hash散列类型
Redis的散列可以存储多个键值对之间的映射。和字符串一样,散列存储的值既可以是字符串又可以是数字值。并且用户同样可以对散列存储的数字进行自增或自减操作。
常用命令:
参数 | 作用 | 命令 |
---|---|---|
HSET | 添加键值对 | HSET hash-key sub-key1 value1 |
HGET | 获取指定散列键的值 | HGET hash-key key1 |
HGETALL | 获取散列中包含的所有键值对 | HGETALL hash-key |
HDEL | 如果给定键存在于散列中,那么就移除这个键 | HDEL hash-key sub-key1 |
六、有序集合Zset
有序集合和散列一样,用于存储键值对。有序集合的键被称为成员member,每一个成员都是独一无二的。而有序集合的值被称为score,分值必须是浮点数。有序集合是Redis里面唯一一个即可以根据成员访问元素,又可以根据分值以及分值的排序来访问元素的结构。
常用命令如下:
参数 | 作用 | 命令 |
---|---|---|
ZADD | 将一个带有给定分值的成员添加到哦有序集合里面 | ZADD zset-key 178 member1 |
ZRANGE | 根据元素在有序集合中所处的位置,从有序集合中获取多个元素 | ZRANGE zset-key 0-1 withccores |
ZREM | 如果给定元素成员存在于有序集合中,那么就移除这个元素 | ZREM zset-key member1 |