介绍
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)。
为什么需要Redis
在传统时代,我们的数据都是直接从数据库读取的,那是因为并发量很小,如今,单机的读取已经无法满足我们的性能要求,而Redis的数据是存在内存里面的,操作内存远比操作磁盘性能高得多,因此,我们才需要Redis。
Redis优点
- 速度快,完全基于内存,每秒能读110000次,写81000次。
- 提供了丰富的数据类型,比如String、List、Set、ZSet、Hash等。
- 丰富的特性,比如支持key过期,发布订阅等
Redis知识点
- 五大基本数据类型和三大特殊数据类型
- 交集、并集、差集
- stream、发布订阅
- 键空间通知
- 持久化RDB和AOF
- 事物、管道、lua脚本
- 过期策略和内存淘汰机制
- 配置文件详解
- 安装
- 集群,比如主从、哨兵和分片
- 缓存雪崩、缓存穿透、缓存击穿
- 布隆过滤器
- 分布式锁、乐观锁
- 命令总结
- Jedis和整合SpringBoot
- 各种应用场景实战
五大基本数据类型和三大特殊数据类型
1、String
最常见也是最基本的数据类型,一个键对应一个值,String可以包含任何数据,包含图片(二进制)或者序列化的对象,长度最多为512M。
2、Hash
hash是一个由多个键值对组成的数据类型,因此Hash更适合去存储对象,Redis 中每个 hash 可以存储 2的32次方 - 1 个键值对(40多亿)。
3、List
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)
4、Set
Set 是 String 类型的无序集合,不允许重复数据,Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1),集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
5、ZSet
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。redis 正是通过分数来为集合中的成员进行从小到大的排序。
有序集合的成员是唯一的,但分数(score)却可以重复。
集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。
6、HyperLogLog
HyperLogLog是用来做基数统计的算法,优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。
7、GeoHash
GEO 主要用于存储地理位置信息,并对存储的信息进行操作,该功能在 Redis 3.2 版本新增
8、BitMap
Bitmap实际上就是String类型,通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值或者状态。
一个bit的值,或者是0,或者是1。redis 字符串最大值为512M,所以bigmap最大值为:4294967295
应用场景
- String:存短信验证码、缓存、计数器、分布式session
- Hash:存储对象
- List:发布订阅等
- Set:共同好友、点赞或点踩等
- Zset:排行榜
- HyperLogLog:在线用户数、统计访问量等
- GeoHash:同城的人、同城的店等
- BitMap:签到打卡、活跃用户等