Redis

Redis

会了后反过来写博客我就好懒= =||,这个redis拖了很久,总是懒得去写它,今天刚好有空,写一下

主要写以下几种东西
1.redis的持久化机制
2.redis的事务
3.redis的单机,主从,集群
4.穿透,击穿,雪崩

一.redis的持久化机制
redis是用两种文件来持久化它的数据,一个是AOF文件,一个是RDB文件
RDB文件相当于快照,保存整个内容
在配置时:save xx秒 xx次操作
save 10 1
save 60 10
这样的形式来进行数据持久化,简单来说就是你在几秒内进行了几次操作触发一次持久化

AOF文件是一个修改的内容,比如删除,新增,修改的操作保存在其中
在配置时:有三种选择
appendfsync always 每次修改都写入aof文件
appendfsync everysec 每秒同步一次(会先存入缓存区,一秒后写入文件)推荐使用这种
appendfsync no 从不同步,数据不会被持久化

一般是AOF与RDB两个都开启

二.redis的事务
redis的事务操作
通过Multi开启事务
用exec提交事务
这时注意,redis没有行锁,用multi对key开启事务,其他线程也是可以对该key执行set操作的
也就是说如果
操作1:更改key=text的数据value为1
操作2:更改key=text的数据value为2
exec提交事务,如果操作1最后执行了,最终key=text的这条数据value会为1
这个时候就有人问了,那这个数据岂不是乱套了
别着急,那肯定是有解决办法的,我们可以加入watch去监听这个key值,不同的线程在提交前查看该数据是否发生了改变,如果改变了,就不能提交,然后把事务取消掉。
那不能回滚吗?
不能,redis没有回滚这个概念,只有取消事务的概念,那这又是为什么呢
拿mysql举例子,mysql开启事务,会对该行数据加上行锁
回滚=事务取消+行锁撤销
那我们的redis没有行锁,便只需要撤销事务即可

二.redis的单机,主从,哨兵,去中心化集群
单机就不说了,从主从开始吧
传统主从如何实现呢?树状结构
接下来我要画一个丑丑的图哈哈哈
在这里插入图片描述
可以看到,只要主redis才支持写,其他都是读的
而从redis会在第一次开启后进行如下加载,那我们这里再画一个图哈哈哈
在这里插入图片描述

这样的情况下如果主redis宕机了,可能会导致redis服务不能进行写的操作,需要我们人为干预,把从redis重新配置向新的主redis
这样就很麻烦了
于是我们为了解决这个麻烦,就有了哨兵机制

哨兵
为了选举公平,最好设置与redis数量相同的哨兵(单数的也可以用,不能双数,我喜欢相同数量)
哨兵打开后会发送ping命令向主redis,没通过则该哨兵认为主redis主观不可用,等待其他哨兵也去ping它,当大于我们设置的数量的哨兵认为主redis不可用时,就会选举新的主redis
原理:哨兵监听主的服务,然后使用info replication获取从redis,然后去连接从redis再info获取更下面的从redis
redis哨兵机制如何实现一个群体:
多个哨兵同时监听主节点,订阅相同的通道(主题),有新的哨兵加入,会将自己服务器的信息发布到主题中,随后与其他哨兵建立长连接

到这里我们已经对redis有一个大致的了解了
但我们不难发现,每个redis上保存的都是同样的数据,大量数据造成冗余,其次只有一个主节点,属于中心化集群
那我们如何进行去中心化,把数据均摊到每个节点存放呢

用redis cluster
从3.0开始官方推出了一种去中心化的集群方式,用hash槽分片的将数据存放到不同的redis中,减少冗余
嘿嘿嘿我们这里要再放一个图
在这里插入图片描述
卡槽作用:决定key放在哪,实现均摊数据,可以动态实现扩容和缩容
比如加一个主进去,就会分配卡槽过去(不一定设置平均分配)

四.穿透,击穿,雪崩
写的我都累了
缓存穿透:指不存在的key,频繁查询,导致缓存无法命中,每次都会去查数据库
解决办法:
1.对api进行限流,网关黑名单
2.把查出来的空值key存入缓存(适用单个key,乱发的话没用)
3.用布隆过滤器过滤
缓存击穿:经常使用的一个key过期了,请求很多,导致多个请求同时发现该key过期,同时去查数据库,同时把数据库内容放到redis缓存里,对数据库压力大
解决方法:
1.用分布式锁,多个请求获取锁,哪个获取到了哪个去查数据库,再放到缓存里,没有获取的等待;获取到的存好了数据通知没有获取到锁的请求直接从redis获取即可
2.软过期,对热点key设置无限有效期,或者异步延长时间
缓存雪崩:指大量key集中失效
解决方案:过期时间随机或设置不一样的时间

布隆过滤器是有误判可能,但影响不大,可以过滤掉绝大部分的无效访问

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值