Redis常见的数据类型有五个,还有三个特殊数据类型
常见的是以下五个
- String字符串
- hash
- list列表
- set集合
- Zset有序集合
不常见的此处只列举出一个算作较常用的
- bitmap
- String字符串
String类型字符串内部结构是key-value类型的,key是String类型的,value不仅可以是String,还可以是整数。
使用场景
- 缓存
- 可以将耗时时间长,频繁调用的接口存储到缓存中,减少对数据库的压力,提高了性能
- 全局唯一ID使用
- 计数器,例如可以统计视频的播放次数
- 限流
- 限制用户使用接口的次数
- 限制用户使用付费的接口,比如短信,例如每分钟限制使用一次
- 共享session
- 实现全局session
- hash(哈希)
hash是一个String类型的field和value之间的映射表,value内部是用HashMap实现的,里面可以存储不同的数据类型
使用场景
可以存储多种信息结合的数据。
比如以下三种:
- 商品信息
- 用户信息
- 订单信息
- list
list底层是使用双向链表实现的,可以实现栈和队列的数据结构,通过灵活的变化数据结构,可以获取指定范围的元素,获取指定索引的元素,是一种比较灵活的数据结构。
使用场景
- 高并发的情况下进行数据处理
- 对于并发量高的接口,可以先将数据缓存下来,进行异步处理,通过定时任务进行异步处理与落库
- 组合成其他的数据结构
- 栈
- 队列
- 有限集合
- 阻塞消息队列
- 将一个用户的url访问权限进行存储,使用的时候调出来检查
- Set
Set里面的元素是不允许重复的,他的底层实现是用HashMap里面的key实现的,Set内部的元素是无序的,不可以通过索引来查找元素。Set支持增删改查,因为Set是由哈希表实现的,所以增,删,查的速度都很快,是O(1),专门提供了一个接口,可以查找元素是否在Set中存在,这是list达不到的。还支持进行交集,并集,差集的使用
使用场景
查找两个人的兴趣交集,生成随机数,社交需求,求交集,将交集存储到key1中。
- Zset
Zset是sorted set的简称,可以根据source进行排序,增加元素和修改元素的时候,设定source会进行重新排列
与Set的区别:
和set相比,Zset多了一个排序的功能,可以根据权重source来进行有序排列,每次指定source后,都会重新进行排序。
使用场景
排行榜(按照时间顺序,播放量,点赞最多优先等)
bitmap(位图)
位图,占据的空间很少。内部维护数组char M [N],存储的数据是0和1,内部的实现均采用位操作
使用场景
适用于大规模数据,但数据状态又不是很多的情况,可以用来统计以下事务,比如
- 亿级以上用户的七天连续签到的用户
- 所有用户一个月内签到次数