全面把握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主从复制
一主二从时,客户端每次向主服务器写入数据时,通过复制主服务器的数据正本,从服务器实时更新数据。这样主服务器负责写数据,从服务器负责读数据,实现读写拆散。
发表回复