Redis系列1-数据类型和应用场景
Redis数据类型和应用场景
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
-
string字符串
- 分布式锁 setnx
- incr 基于watch机制实现乐观锁
- 缓存热点数据
- 文章访问量,每当用户访问,阅读数加1
- Web集群session共享
-
list列表
list列表类型可以存储有序、可重复的元素。获取头部或尾部附近的记录是极快,list的元素个数最多为2^32-1个(40亿)- 作为栈或队列使用
- 可用于各种列表,比如用户列表、商品列表、评论列表等。
- 最新消息排行等功能(比如朋友圈的时间线)
- 消息队列
-
set集合
存储无序、唯一元素的集合,集合中最大的成员数为 2^32 - 1,适用于不能重复的且不需要顺序的数据结构- 共同好友、关注列表
- spop命令随机抽奖
- 利用唯一性,统计访问网站的所有独立ip
- 好友推荐时,根据tag求交集,大于某个阈值就可以推荐
-
sortedset有序集合
元素本身是无序不重复的,每个元素关联一个分数。可按照分数排序- 各种排行榜(热度排行榜、点击排行榜)
- 带权重的消息队列
-
hash类型(散列表)
Redis hash 是一个 string 类型的 field 和 value 的映射表,它提供了字段和字段值的映射。每个 hash 可以存储 2^32 - 1 键值对(40多亿)。- 对象的存储、表数据的映射
-
bitmap位图
bitmap是进行位操作的,通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身。bitmap本身会极大的节省储存空间。- 用户每月签到,用户id为key , 日期作为偏移量 1表示签到
- 统计活跃用户, 日期为key,用户id为偏移量 1表示活跃
- 查询用户在线状态, 日期为key,用户id为偏移量 1表示在线
-
GEO地理位置
geo是Redis用来处理位置信息的。在Redis3.2中正式使用。主要是利用了Z阶曲线、Base32编码和geohash算法- 记录地理位置
- 计算距离
- 查找附近的人
-
HyperLogLogs基数统计
Redis 在 2.8.9 版本添加了 HyperLogLogs 结构。
Redis HyperLogLogs 是用来做基数统计的算法,HyperLogLogs 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。- 统计页面实时 UV 数
- 统计用户每天搜索不同词条个数
- 统计 IP 数
-
stream数据流类型
Redis Stream 是 Redis 5.0 版本新增加的数据结构。
Redis Stream 主要用于消息队列(MQ,Message Queue),Redis 本身是有一个 Redis 发布订阅 (pub/sub) 来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis 宕机等,消息就会被丢弃。
参考资料
Redis中文官方网站:http://www.redis.cn/
菜鸟教程:https://www.runoob.com/redis/redis-data-types.html