Redis是开源的,内存中的数据结构存储系统,他可以用作数据库,缓存和消息中间件。
Redis支持的八种数据类型:
- 五种基本数据类型:String,list,hash,set,zset
- 三种特殊数据类型:geospatial,hyperloglog,bitmap
Redis的高性能有一部分是要归功于 数据类型的底层数据结构
基本数据类型:
1、String类型
String数据类型是简单的key-value类型,其实value不仅可以是String类型,也可以是数字。常规的key-value缓存应用。
常规计数:粉丝计数
2、hash类型
Redis中的hash是一个String类型的filed和value的映射表,每个hash可以存放2^23-1(40多亿)个键值对。使用场景:
- 购物车 用户id key,购买产品 filed,购买数量 value
- 存储对象 因为hash类型的(key,filed,value) 与对象的(对象id,属性,值)的结构相似,所以也可以用来存储对象。
3、list类型
Redis中的list是存储String类型元素的双向链表,可以支持通过push和pop操作实现从列表的头部或者尾部添加或则删除元素,可以当作栈也可以当作队列来用。
可以使用list来构建消息队列
4、set类型
set就是一个集合,集合的概念就是一堆不重复数据的组合。利用Redis的set数据结构,可以用来存放一些集合性质的数据。set集合是没有顺序的。
案例:例如在微博中将一个人关注的所有人存在放一个集合中。Redis还为集合提供了求交集,并集和差集等操作,可以实现对于共同关注,共同喜好等功能。
5、zset
zset相比于set增加了一个权重参数,使得集合中的参数可以按照权重进行排序。
排行榜应用:获得Top N的操作。知识库中热点重症查询次数。
- 支持快速的插入和删除
- 支持范围查询
特殊数据类型:
1、geospatial
redis在3.2推出的Geo类型,该功能可以推算出地理位置信息,两地之间的距离。需要下载城市数据,通过Java一次性导入。
2、hyperloglog
名词解释:
- 基数:集合中所有不重复的元素的个数。
- UV(Unique Visitor):是指通过互联网访问、浏览网页的自然人。访问网页的一个电脑客户端算一个访客,一天内一个访客只会被计算一次。
hyperloglog数据结构 是基于基数的统计算法。
这种数据结构应昌被应用于统计网站的UV。传统方法我们会使用set保存用户id,然后通过set集合中的数量来计算UV。通常会记录大量用户ID,并且一般用户的ID都比较长,因此占空间,还比较麻烦。该场景目的是计数,而不是保存数据。因此使用hyperloglog更为合适。
hyperloglog的优点:占用内存小,并且是固定的。存放2^64个不同元素的基数,只占用12KB的空间,但是他也存在百分之0.81的错误率。
3、bitmap 位图
bitmap就是通过最小单位bit来设置来进行0或者1的设置,来表示某个元素的值或者状态。一个bit的值只有0或1两种情况。因而bitmap比较时和用于统计状态,登录或者未登录,粉丝 活跃或者不活跃等。