这是我参加「第五届青训营 」伴学笔记创作活动的第 14 天。作为一个十分重要的非关系型数据库,Redis在各种项目中都有广泛应用,此次笔记记录了Redis相关的知识.
重点内容
1、Redis的特点 2、Redis的基本工作原理 3、Redis的数据结构与基本类型
主要知识点
一、Redis基本介绍
1、为什么要有Redis
在学习Redis之初,首先需要思考:明明已经有Mysql,为什么还要学习Redis呢?这个问题最重要的一个原因在于,在实际应用中,往往有些数据使用频率较高,有些数据使用频率较低,其中使用频率高的称为热数据。在mysql中,无论数据使用频率是高是低,都会重复查找mysql。这种查找方式相当耗费时间。但如果我们可以通过将热数据存入内存,在内存中查找数据,可以大大加快增删改查的速度。而Redis正是为了实现这一策略而出现的。
2、Redis基本工作原理
1、数据从内存中读写
2、通过内置的两种策略将数据持久化存储
- AOF:记录每次对数据的操作到硬盘上,以操作的形式记录数据
- RDB:把当前数据生成快照保存在硬盘上。直接记录数据
3、单线程处理所有操作命令
4、Redis在许多语言都可以通过Redis库函数进行操作,如Go的go-redis库,java的Redis依赖包等
3、Redis的优缺点
优点:
- 数据存储在内存, 读写速度快,性能优异
- 支持数据持久化,便于数据备份、恢复
- 支持简单的事务,操作满足原子性
- 支持String、List、Hash、Set、Zset五种数据类型,满足多场景需求
- 支持主从复制,实现读写分离,分担读的压力
- 支持哨兵机制,实现自动故障转移
缺点:
- 数据存储在内存,主机断电则数据丢失
- 存储容量受到物理内存的限制,只能用于小数据量的高性能操作
- 在线扩容比较困难,系统上线时必须确保有足够的空间
- 用于缓存时,易出现’缓存雪崩‘,’缓存击穿‘等问题
二、Redis基本类型
1、字符串(String)
字符串类型是Redis中最基本的数据存储类型,它是一个由字节组成的序列,在Rediss中是二进制安全的。所谓二进制安全,即在传输数据时,保证二进制数据也就是不被篡改、破译等,如果遭受到攻击,能够及时检测出来。
String中的所有数据存储在单个对象中,增删查的速度很快,往往用于存储计算在线人数、访问量等。
2、哈希(Hash)
哈希 是一个键值(key=>value)对集合。Redis hash是一个 string 类型的 field 和 value 的映射表,这种类型可以构造出类似对象的结构,很适用于存储对象。
Redis hash适合用于存储对象数据,如用户信息等。
3、列表(List)
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。列表从数据结构上看是一个双向队列,可以从两段进行队列操作。
列表适合用于存储消息队列。
4、集合(Set)
Set 是 string 类型的无序集合。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。所谓集合就是一堆不重复值的无序组合。
集合适合用在存储关系类数据,如微博中将关注列表以集合的形式存储。
5、有序集合(Sorted Set)
set也叫Redis zset ,和set 一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis可以通过分数来为集合中的成员进行从小到大的排序。
有序集合适合用于积分排行榜等有序的记录。
总结
今天学习了Redis相关的基本工作原理,Redis的特点以及Redis的五种基本类型。后面还需要继续学习Redis的相关知识。