Redis数据类型(5 + 3 + 1)
五种基本数据类型
String字符串
特点
- 二进制安全,可以包含任何数据,如数字,字符串,jpg图片或者序列化的对象
应用场景
-
缓存: redis作为缓存层,mysql做持久化层,降低mysql的读写压力
-
计数器:redis是单线程模型,一个命令执行完才会执行下一个,同时数据可以一步落地到其他的数据源
-
session:常见方案spring session + redis实现session共享
List列表
特点
- 底层实现为双端链表
应用场景
-
时间轴
-
消息队列
Hash哈希
特点
- 存储k-v,适合存储关系型数据库的一条记录(一个对象)
应用场景
- 缓存: 更直观,相比string更节省空间的维护缓存信息,如用户信息,视频信息等
Set集合
特点
-
不能出现重复的数据
-
添加,删除,查找的复杂度都是 O(1)
应用场景
- 标签:给用户添加标签,或者用户给消息添加标签,有同一标签或者类似标签的可以给推荐关注的事或者关注的人
- 点赞,或点踩,收藏等,可以放到set中实现
ZSet有序集合
特点
- 每个元素都会关联一个 double 类型的分数。redis 通过分数来为集合中的成员进行从小到大的排序
应用场景
- 排行榜:有序集合经典使用场景。例如小说视频等网站需要对用户上传的小说视频做排行榜,榜单可以按照用户关注数,更新时间,字数等打分,做排行。
- 其他排名
三种特殊数据类型
HyperLogLogs基数统计
特点
- 节省空间
- 有一定误差(0.81% 标准错误的近似值)
应用场景
- 统计各种计数,比如注册 IP 数、每日访问 IP 数、页面实时UV、在线用户数,共同好友数等
BitMaps位图
特点
- 操作二进制位来进行记录,只有 0 和 1 两个状态
- 节省空间
应用场景
- 统计用户信息,活跃,不活跃! 登录,未登录! 打卡,不打卡! 两个状态的,都可以使用 Bitmaps
geospatial地理位置
特点
- 两极无法直接添加
- 有效的经度从-180度到180度
- 有效的纬度从-85.05112878度到85.05112878度
应用场景
- 附近的人
- 两地之间的距离
Stream
特点
- 可持久化、分组消费
- 客户端可以平滑扩展,提高处理能力
应用场景
- 消息队列