Redis是一个非常快速的非关系数据库解决方案。其简单的键值数据模型使 Redis 能够处理大型数据集,同时保持令人印象深刻的读写速度和可用性。
Redis共有五种数据类型,分别是1、string(字符串);2、hash(哈希);3、list(列表);4、set(集合);5、sort set (有序集合)。
1、string(字符串)
字符串类型是Redis中最基本的数据存储类型,它是一个由字节组成的序列,在Rediss中是二进制安全的。这意味着该类型可以接受任何格式数据,如JPEG图像数据和Json对象说明信息。它是标准的key-value,通常用于存储字符串、整数和浮点。Value可容纳高达512MB的数据。应用程序场景:非常常见的场景用于计算站点访问量、当前在线人数等。incr命令(++操作)
2、hash(散列)
在Memcached中,我们经常将一些结构化的信息打包成hashmap,在客户端序列化后存储为一个字符串的值,比如用户的昵称、年龄、性别、积分等,这时候在需要修改其中某一项时,通常需要将所有值取出反序列化后,修改某一项的值,再序列化存储回去。这样不仅增大了开销,也不适用于一些可能并发操作的场合(比如两个并发的操作都需要修改积分)。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。应用程序方案:存储部分更改数据,如用户信息、会话共享。
3、list(列表)
Redis的列表允许用户从序列的两端推入或者弹出元素,列表由多个字符串值组成的有序可重复的序列,是链表结构,所以向列表两端添加元素的时间复杂度为0(1),获取越接近两端的元素速度就越快。这意味着,即使有数以千万计的元素列表,也可以极快地获得10条记录在头部或尾部。可列入名单的要素最多只有4294967295个。应用场景:(1)最新消息排行榜。(2)消息队列,以完成多程序之间的消息交换。可以用push操作将任务存在list中(生产者),然后线程在用pop操作将任务取出进行执行。(消费者)
4、set(集合)
所谓集合就是一堆不重复值的组合,并且是没有顺序的。在微博应用中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。Redis还提供了诸如collection、union和differences等操作,使得实现诸如commandism、poperhike、secondfriends这样的功能变得很容易,或者选择是将结果返回给客户机,还是将它们保存到使用不同命令的新的集合中。
5、sorted set (有序集合)
Redis zset和set一样也是string类型元素的集合,且不允许重复的成员。不同之处在于,每个元素都与双类型的分数相关联。Redis使用分数将集合的成员从小到大排序。zset的成员是唯一的,但是grazentra的分数可以重复。sorted set是插入有序的,即自动排序。常用命令:zadd、zrange、zrem、zcard等。当你需要一个有序的并且不重复的集合列表时,那么可以选择sorted set数据结构。应用举例:(1)例如存储全班同学的成绩,其集合value可以是同学的学号,而score就可以是成绩。(2)排行榜应用,根据得分列出topN的用户等。