Redis焦点机制(一)

打印 上一主题 下一主题

主题 973|帖子 973|积分 2919

目次

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企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表