Redis发布订阅、事务、布隆过滤器

Redis发布订阅、事务、布隆过滤器


Redis发布订阅

Redis的发布订阅是一种通讯手段,比如使用qq的时候,能够在聊天界面看到最近刚发消息与几天前的消息。比如在一场直播中,主播与用户通过聊天室进行聊天。这些都可以用Redis的发布订阅实现。但是如果是qq,那么新消息与旧消息他们应该怎么存储呢?
在这里插入图片描述
将实时的数据存到redis中去,这时redis当作缓存使用,redis当作缓存使用绝大多数都是解决数据的读请求。三之内的数据会根据时间的先后,放到sorted set中去,自动进行排序。而更老的数据旧直接存到数据库中。
redis中的消息订阅是怎么进行的呢?

在这里插入图片描述

在这里插入图片描述
通过subscribe与publish命令实现redis的发布订阅。

Redis事务

redis的事务时通过MUTI、exec两个基本命令进行控制。MUTI表示现在进行事务,EXEC表示此时该事务执行完毕。也可以用WATCH对键进行监控(可以实现CAS)
在这里插入图片描述

在这里插入图片描述
假设两个客户端都进行事务的控制,那么谁先执行了EXEC谁就能先执行完事务,否则该事务不完成。这里事务2先执行完,那么此k1键被删除了,而事务1需要获取k1,只能返回nio。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
watch与CAS功能类似,监控某一个键,当该键值发生变化,那么事务不会执行。
在这里插入图片描述
再在watch中执行exec,那么nio
Redis为什么不和MYSQL一样支持回滚呢?
在这里插入图片描述

布隆过滤器

首先明确一点,布隆过滤器是解决缓存穿透,而不是缓存击穿与雪崩的。
什么是缓存穿透?client需要的关键字Redis没有,所以这个时候把压力都给了MYSQL,但是此时MYSQL也没有这个数据,会白白的建立请求,连接与搜索,大大降低了系统执行效率。一般情况下,黑客会利用此漏洞,对该服务器进行攻击。

布隆过滤器首先需要知道本数据源中有什么关键字,然后再利用小的空间做大量数据的匹配。

他会利用bitmap数据结构,该数据结构拥有少的位数表示多数据的特点,会使整体体积变的很小。
在这里插入图片描述布隆过滤器把每个元素通过k个不同的映射函数,对bitmap进行操作,使其从0变成了1。
它是一种概率的,不会百分百阻挡,但是一定会小于1%,如果bitmap中该元素的所有映射函数都将bitmap中的0变成了1,那么放行,让mysql进行查找。但是如果通过映射函数有一个为0,那么不通过,即便由2个为1,那么有可能是碰巧的。

1.你有啥。2.有的向bitmap标记。3.请求的可能被误标记。4.但是一定概率大量减少放行:穿透。5.而且成本低。
实现布隆过滤器有三种可能,一种是数据结构与算法都在client,一种是分离,最后一种是都放在redis中。
在这里插入图片描述
一般都是使用第三种,让client更轻量化。
一般是自己把有什么key动过bf.add命令执行一遍。
在这里插入图片描述
下面是布隆过滤器的安装流程
在这里插入图片描述
问题:如果穿透了,却不存在,那么client增加redis中的key,value标记不存在。其他客户端查询时,先命中这个key,不走布隆过滤器,发现由key,但是value不存在,那么不用去处理了。

问题:单调了数据库,数据库增加了元素,必须要完成元素对布隆的添加。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值