一、Redis简介
redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存、事件发布或订阅、高速队列等场景。该数据库使用ANSI C语言编写,支持网络,提供字符串、哈希、列表、队列、集合结构直接存取,基于内存,可持久化,支持多种开发语言。
二、Redis支持的数据类型
Redis支持多种数据类型,包括:字符串、列表、哈希、集合、有序集合等。下面分别进行介绍。
- string(字符串)
String数据结构是简单的key-value类型,value其实不仅可以是String,也可以是数字。
常规key-value缓存应用。
2.list(列表)
Redis的list是每个子元素都是String类型的双向链表,可以通过push和pop操作从列表的头部或者尾部添加或者删除元素,这样List即可以作为栈,也可以作为队列。
- hash(散列)
Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。
存储部分变更的数据,如用户信息等。
sets (集合)
set就是一个集合,集合的概念就是一堆不重复值的组合。利用Redis提供的set数据结构,可以存储一些集合性的数据。set中的元素是没有顺序的。sorted set(有序集合)
和set相比,sorted set增加了一个权重参数score,使得集合中的元素能够按score进行有序排列。
三、redis的特点
- 单线程,单机实现最高10W QPS的访问能力
- 丰富数据类型
- 支持分布式哨兵和集群模式等高可用模式部署
- 读写分离模式
- 支持事务机制
- 支持数据过期机制
- 支持数据持久化机制
四、redis的应用场景
键值对缓存
缓存数据库的基本功能,因此不做过多介绍。排行榜/计数
Redis 基于内存,可以非常快速高效的处理增加和减少的操作,相比于使用 SQL 请求的处理方式,性能的提升是非常巨大的。
Redis可以实现快速计数、查询缓存的功能,同时数据可以异步落地到其他数据源。
典型应用场景:
1)播放数计数的基础组件,用户每播放一次视频,相应的视频播放数就会自增1。
2)排行榜:按照时间、按照数量、按照获得的赞数等排行。
共享Session
典型应用场景:用户登陆信息,Redis将用户的Session进行集中管理,每次用户更新或查询登陆信息都直接从Redis中集中获取。消息队列
使用list数据结构,消息发布者push数据,多个消息订阅者通过阻塞线程pop数据,以此提供简单的消息队列能力。
注意:之所以说简单,是因为Redis官方不提供可靠消费/发布的机制;需要自行实现故障转移、队列持久化、队列监控和流量控制等mq具备的功能;

- 发布/订阅
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
注意:Redis无法做消息堆积(新的订阅者无法获取历史订阅消息)

- 分布式锁
- bitmap
使用bitmap可以实现布隆过滤器实现垃圾邮件过滤的功能,也实现实现用户登录数目统计等功能。下面简要介绍一下Redis 中的bitmap。
字符串big对应的二进制(ASCII码)如图所示, bitmap可以直接操控位。使用每个数位代表一个用户或者状态,相比int数据结构保存,节省了32倍的内存空间。
注意:
- bitmap并不是适合所有场景去替换常规的数据存储
- bit是string类型,最大只能存512MB
- setbit函数会自动补位,所以生产环境要注意setbit的偏移量,可能会造成较大的耗时
