全面把握 Redis,看这篇文章就够了!
后面几遍文章,散布讲述了 JS,Docker,Nginx,但写的文章都相当于流水账似的,只是记录了这类语言的语法以及知识点,看似具体,内容很多,实际上并没有什么重点总结,只能作为理解来查漏补缺,不适宜深刻学习。
所以,接下来的文章,我会依照本人的思路来总结 Redis 的知识点!
一、Redis 是什么?Redis 有什么利用场景?
Redis 是一个开源的应用 ANSI C 语言编写、恪守 BSD 协定、反对网络、可基于内存亦可长久化的日志型、Key-Value 内存数据库,并提供多种语言的 API。
Redis 在 Java Web 中次要有两个利用场景:
存储热点数据,作为缓存存于内存中
实现高速 读 / 写
二、Redis 的特点
- Redis 反对数据的长久化,能够将内存中的数据保留在磁盘中,重启的时候能够再次加载进行应用。
- Redis 不仅仅反对简略的 key-value 类型的数据,同时还提供 string,list,set,zset,hash 等数据结构的存储。
-
Redis 反对数据的备份,即 master-slave 模式的数据备份。
三、Redis 反对的数据结构
- String 字符串:用来缓存一些动态文件,如图片、视频、css 文件等。反对 incr 操作,能够用作计数器,比方统计网站拜访次数等。
- List 列表:微博中“关注、粉丝”、论坛中所有回帖的 ID 用的就是 list 列表,还有音讯队列,也是列表。
- Set 汇合:能够疾速查找元素是否存在,用于记录一些不能反复的数据。
- Zset 有序汇合:应用 Sorted Set 构建一个具备优先级的队列。
-
Hash: 实用于存储对象,比方把用户的信息存到 hash 里,以用户 id 为 key,用户的详细信息为 value。
四、redis 单线程执行却快的起因?
- 齐全基于内存,绝大部分申请是纯正的内存操作,十分疾速。
- 数据结构简略,对数据操作也简略,Redis 中的数据结构是专门进行设计的;
- 采纳单线程,防止了不必要的上下文切换和竞争条件,也不存在多过程或者多线程导致的切换而耗费 CPU,不必去思考各种锁的问题,不存在加锁开释锁操作,没有因为可能呈现死锁而导致的性能耗费;
-
应用多路 I / O 复用模型,非阻塞 IO(NIO);
多路 I / O 复用模型是利用 select、poll、epoll 能够同时监察多个流的 I/O 事件的能力,在闲暇的时候,会把以后线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正收回了事件的流),并且只顺次程序的解决就绪的流,这种做法就防止了大量的无用操作。
这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程,采纳多路 I/O 复用技术能够让单个线程高效的解决多个连贯申请(尽量减少网络 IO 的工夫耗费),且 Redis 在内存中操作数据的速度十分快,也就是说内存内的操作不会成为影响 Redis 性能的瓶颈,次要由以上几点造就了 Redis 具备很高的吞吐量
五、Redis 事务
相干命令:
watch/unwatch:给 Keys 标记 增加 / 革除 为监测态
Multi:显示的开启事务,后续 commands 将排队
Exec:执行事务中的 commands 队列
Discard:革除事务中的 commands 队列
事务中的两种谬误:
- 在调用 exec 命令之前的语法错误,Redis2.6.5 之后所有命令不执行
- 在调用 exec 命令之后的谬误(误操作),其余命令照样执行并返回后果
Redis 事务中不反对回滚 Rollback
Redis 命令产生谬误,其余命令照样执行,而不会回滚,这些谬误都是开发中可能被检测进去的,在理论中不应该呈现的谬误,所以不用反对回滚,使 Redis 外部简洁并且更加高效。
六、Redis 两种长久化形式
快照长久化:
Redis 能够通过创立快照来取得存储在内存外面的数据在某个工夫节点上的正本。在创立快照之后,用户能够对快照进行备份,能够将快照复制到其余服务器从而创立具备雷同数据的服务器正本,还能够将快照留在原地以便重启服务器时应用。
创立快照 :
1)客户端 BGSAVE 命令
2)SAVE 指令,不罕用,当内存不足以执行 BGSAVE 时应用
3)save 配置选项,比方 save 60 10000 60 秒内有 10000 次写入触发 BGSAVE
4)客户端 shutdown 时,执行 SAVE
5)连贯从服务器时,主服务器会执行 BGSAVE 创立快照
问题:如果零碎产生解体,用户将失落最近一次生成快照之后更改的所有数据。
AOF 长久化
简略来说,AOF 长久化会将被执行的写命令写到 AOF 文件的开端,以此来记录数据产生的变动。因而,Redis 只有从头到尾从新执行一次 AOF 文件蕴含的所有写命令,就能够复原 AOF 文件所记录的数据集。
同步策略 :
1)always: 每个写命令都要同步写入磁盘,重大升高 Redis 速度
2)everysec: 每秒执行一次同步
3)no: 让操作系统来决定何时进行同步
问题:1. 失落大量数据,依据不同同步策略。2.AOF 文件会越来越大(AOF 文件重写)
七、Redis 主从复制
一主二从时,客户端每次向主服务器写入数据时,通过复制主服务器的数据正本,从服务器实时更新数据。这样主服务器负责写数据,从服务器负责读数据,实现读写拆散。