目次
Redis的特性
1.速率快
2.以键值对方式进行存储
3.丰富的功能
4.客户端语言多
5.持久化
6.主从复制
7.高可用和分布式
Redis使用场景
Redis焦点机制——持久化
RDB
bgsave实验流程
编辑
AOF
AOF重写流程
3.混合持久化(RDB+AOF)
Redis焦点机制——事务
事务介绍(和MySQL对比)
事务操作
Redis的特性
1.速率快
Redis读写命令的速率非常快:
Redis的全部数据都是存储到内存中的。
Redis使用单线程,防备了多线程产生的竞争标题。
2.以键值对方式进行存储
Redis是基于<key,value>的情势进行存储数据的,Redis中的值不但可以是字符串,还支持多种数据结构:字符串(string)、列表(list)、哈希(hash)、集合(set)、有序集合(zset)、位图(Bitmap)、GEO(地理信息位置)。
3.丰富的功能
提供了键过期功能,可以实现缓存
提供了发布订阅功能,可以实现消息队列
支持Lua脚本,可以使用Lua创造出新的Redis命令
提供了简朴的事务,支持打包命令
提供了流水线功能,客户端命令批次到达Redis,减少网络的开销
4.客户端语言多
Redis提供了简朴的TCP通信协议,许多编程语言可以很方便地接入到Redis,并且由于Redis收到社区和各大公司的认可,支持Redis客户端语言也非常多,几乎涵盖了主流编程语言:C、C++、Java、Python等
5.持久化
Redis虽然将读写数据都是到内存中,一旦服务器关闭,数据都会丢失,Redis提供了RDB和AOF两种持久化机制,使用这两种机制就可以将内存的数据生存到硬盘中,保证了数据的可持久性。
6.主从复制
Redis提供了复制功能,实现了多个相同数据的Redis副本,复制是分布式Redis的底子。
7.高可用和分布式
Redis提供了哨兵模式,保障Redis节点故障发现和故障自动转移。也提供了Redis集群,真正的分布式实现,提供了高可用、读写和容量拓展。
Redis使用场景
1.缓存(验证码)
Redis提供了过键值过期时间的设置,提供了内存淘汰策略。
2.排行榜体系(积分排名)
Redis提供了列表和有序集合的结构
3.计数器应用(点赞,浏览量)
Redis自然提供了技能功能
Redis焦点机制——持久化
RDB
RDB持久化就是将当前进程数据以天生快照生存到硬盘中,触发RDB分为自动触发和手动触发。
手动触发:使用save命令,此时会壅闭当前Redis服务器,直到RDB实验完毕,此时对内存影响较大,根本不接纳这种方式去手动进行触发RDB操作。使用bgsave命令:Redis进程实验fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动竣事。壅闭只发生在创建子进程阶(fork),时间很短。
自动触发:Redis运行时会自动触发持久化机制。通过设置文件进行触发,通过修改设置文件中的save选项,save m n表示m秒内数据发生n次修改,自动进行RDB持久化。从节点进行全量复制操作时,主节点自动进行RDB持久化,随后将RDB文件内容发送给从节点。实验shoutdown命令关闭Redis时,实验RDB持久化。
bgsave实验流程
Redis实验bgsave命令,父进程判断是否存在其他正在实验的子进程,RDB/AOF子进程,如果存在bgsave命令直接返回。
父进程实验fork创建子进程,fork过程中父进程会壅闭。
创建子进程完成后bgsave会返回信息通知父进程不在壅闭,继承响应其他命令。
子进程创建RDB文件,根据父进程内存天生的临时快照文件对原有文件进行替换。
子进程发送信号给父进程表示完成,父进程更新统计信息。
优缺点:RDB是一个紧凑压缩的二进制文件,代表
AOF
AOF持久化以日志的情势将每次实验的命令记载下来,重启服务器时实验AOF文件的命令达到规复数据的目的。AOF的重要作用是解决了数据持久化的实时性。
AOF工作流程:
1.全部写入的命令会追加到aof_buf(缓冲区)中。
2.AOF缓冲区根据对应策略向硬盘做同步操作。
3.随着AOF文件越来越大,需要定期对AOF文件进行重写,达到压缩目的。
4.当Redis服务器启动时,可以加载AOF文件进行数据规复。
Redis使用单线程进行命令的响应,如果每次都将数据直接写入硬盘会使性能降落,此时可以先将数据写入缓冲区中,然后在一同写入硬盘中,有效减少IO次数,进步性能。
随着命令不断写入AOF文件,这个文件会越来越大,AOF文件会进行重写,压缩文件体积。即进程内已超时数据不会写入文件,重复,失败的命令不会写入文件,多条操作归并为一条。
AOF重写触发机会:手动触发,调用bgrewriteaof命令。自动触发:根据设置文件进行指定,如触发重写时AOF的最小文件大小,AOF占用大小相较于上次重写时增加的比例。
AOF重写流程
1.实验 AOF重写哀求
如果当前哀求正在实验AOF重写,哀求不实验。如果当前进程正在实验bgsave操作,重写命令耽误到bgsave完成后实验。
2.父进程实验fork创建子进程。
3.重写
a.主进程fork之后,继承响应其他命令。全部修改操作都会写入AOF缓冲区,然后同步到硬盘
b.子进程只有实验fork之前的全部内存信息,父进程中需要将fork之后这段时间的修改操作写入AOF重写缓冲区中。
4.子进程根据内存快照,将命令归并到新的AOF文件中。
5.子进程重写完成。
a.新文件写入后,子进程发送信号给父进程。
b.父进程把AOF重写缓存区临时生存的命令追加到AOF文件中
c.用新的AOF文件取代老的AOF文件。
3.混合持久化(RDB+AOF)
结合RDB和AOF文件特点,使用RDB文件+AOF增量文件存放在一起,即RDB持久化时,实验的命令使用AOF进行记载。
Redis焦点机制——事务
事务介绍(和MySQL对比)
Redis事务和MySQL的事务概念上类似,都是把一系列操作打包在一起,批量实验。
原子性
Redis不支持回滚操作,只能将操作打包进行批量实验。
一致性
不保证数据一致性,Redis不支持回滚操作,不能保证数据前后一致性。
隔离性
没有隔离级别,Redis是单线程模型,不会并发实验事务。
持久性
不需要持久性,数据生存在内存中,是否开启持久化,是Redis服务器的事情,和事务无关。
Redis事务本质是在服务器上内置了一个“事务队列”,客户端在事务中进行一个操作,会将这个命令发送给服务器,服务器放到“事务队列”中(但是并不会立刻实验),收到EXEC命令后,才会真正实验队列中的全部操作。正因如此,Redis的事务相比于MySQL来说,是弱化许多的,,只能保证事务中的操作是“一连的”,不会被别的客户端”加塞“。
事务操作
MULTI:开启事务
EXEC:真正实验事务
DISCARD:放弃当前事务,此时直接清空事务队列,之前的操作都不会真正实验到。
WATCH:在实验事务的时间,如果某个事务中修改的值被别的客户端修改,此时就容易出现数据不一致的情况。watch在客户端上监控一组具体的key。
当开启事务时,如果对watch的key进行修改,就会记载当前key的“版本号”,在真正提交事务的时间,如果发现服务器上的key版本号已经凌驾了事务开始时的版本号,就会让事务实验失败。(事务中的全部操作都不实验)
UNWATCH:取消对key的监控,相称于watch的逆操作。
文章竣事,感谢观看
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |