redis相关知识

一、redis支持数据类型
redis支持的数据类型有String、Hash、List、Set(无序集合)、Sorted Set(有序集合)等
二、redis支持数据持久化的两种方式
redis为了能在系统宕机(类似进程被杀死)的情况下,更快的进行故障恢复,设计了两种数据持久化方案,分别为RDB(默认)和AOF方式。
1、RDB
RDB是通过手动(save-阻塞式,bgsave-异步)或周期性方式保存redis中key/value的一种机制,RDB方式一般是redis的默认数据持久化方式,系统启动时会自动开启这种方式的持久化机制,将数据以快照的方式存储在磁盘上,默认文件名为dump.rdb,一般情况下采用异步方式,主进程会fork一个子进程去循环所有redis中的数据进行快照存储,当新的快照文件生成时会替换旧文件。
RDB方式
优点:
一是一旦采用该方式,那么你的整个Redis数据库将只包含一个文件,这样非常方便进行备份。比如你可能打算每1天归档一些数据。
二是方便备份的同时,我们也很容易的将一个RDB文件移动到其他存储物质上。
三是RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作。
劣势:
一是如果你想在服务器上避免数据的丢失,那么RDB就不适合了,因为RDB文件需要保存整个数据集的状态,因为你可能会在5分钟才保存一次RDB文件,在这种情况下,一旦发生故障停机,你可能会损失好几分钟的数据。
二是每次在保存RDB的时候,Redis都要fork出一个子进程,并由子进程来进行实际的持久化工作,如果在数据集比较庞大时,fork可能会非常耗时,造成服务器在那么一瞬间会停止处理客户端;虽然AOF重写也需要进行fork,但AOF重写的执行时间间隔有多长,数据的耐久性都不会有任何损失。
2、AOF
AOF方式是通过记录写(包括删除)操作日志的方式,记录redis数据的一种持久化机制,redis会将每一个收到的写命令都追加到文件中,因此在写入过程中即使出现宕机现象,也不会破坏日志文件中已经存在的内容。如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在redis下一次启动之前,我们可以通过redis-check-aof工具来帮助我们解决数据一致性的问题。
AOF方式
优点:
数据的完整性和一致性更高
缺点:
AOF文件比RDB文件大,且数据恢复速度也慢

三、redis主从复制
通过主从复制来实现系统的高并发
主从复制:是指将一台Redis服务的数据,复制到其他Redis服务器上。前者称为主节点(master),后者称为从节点(slave)。数据的复制是单向的,只能从主节点到从节点;master以写为主,slave以读为主。
主从复制能具体解决什么问题:
1.单机故障,其他节点可以提供服务,不影响用户使用。
2.读写分离,master服务主要用来写,slave服务主要用来读数据。
3.负载均衡,同时配合读写分离,由主节点提供写服务,从节点提供读服务,分担服务器的负载。在写少读多的情况下,通过多个从节点分担读负载,能够大大提高Redis服务的并发量和负载。
4.高可用的基石,主从复制是哨兵和集群模式能够实施的基础。
主从复制
四、redis哨兵机制
这里出现一个问题,如果主从节点的主节点挂掉了怎么办,现在引入哨兵机制,即redis用于监控集群中Master主服务器工作状态的一个哨兵。
在Master主服务器发生故障的时候,可以实现Master和Slave服务器的切换,保证系统的高可用。
那哨兵机制具体做了哪些:
1.监控(Monitoring):我会不断地检查你的Master和Slave是否运作正常。
2.提醒(Notification):当被监控的某个Redis节点出现问题时, 我可以通过 API 向管理员或者其他应用程序发送通知。
3.自动故障迁移(Automatic failover):当一个Master不能正常工作时,会开始一次自动故障迁移操作。会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master;当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。
哨兵机制
五、redis缓存穿透、击穿、雪崩
1、缓存穿透
现象:当有大量查询请求未命中缓存时,引起对后台数据库的频繁访问,导致数据库负载压力增大,这种现象就叫做缓存穿透
解决:
一是将无效的key存进Redis中,若数据库查询某个key不存在时,同样将这个key缓存到Redis缓存中,并设置value为NULL,表示不存在。如果攻击请求的key每次都相同,该方法有效;如果攻击请求的key每次随机生成,则同样会产生缓存穿透问题。
二是使用布隆过滤器,过滤掉一些不存在的key。布隆过滤器判定为true时,key可能存在于数据库中,也可能不存在;判定为false时,key一定不存在于数据库
2、缓存击穿
现象:当Redis中存在某些极热点数据时,即有大量请求并发访问的key-value数据。当极热点key-value数据突然失效时,缓存未命中引起对后台数据库的频繁访问,这种现象叫缓存击穿
解决:
一是对极热点key设置永不过期
二是使用互斥锁。如果缓存失效的情况,只有拿到锁才可以查询数据库,降低了在同一时刻访问数据库的请求量,防止数据库崩溃。缺点是会导致系统的性能变差
3、雪崩
现象:Redis中的缓存数据是有过期时间的,当在同一时间大量的缓存同时失效时或者redis集体宕机就会集中访问数据库,这种现象就叫做缓存雪崩
解决:
一是合理设置过期时间,避免大量数据在同一时间过期
二是使用锁机制,比如分布式锁,让一时间只有一个相同请求落到MySql上,反正都是查询同一个信息,之后的其他请求就可以去Redis中找了
二是搭建redis高可能集群,避免集体宕机

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值