news 2026/3/12 3:58:25

0x3f 第42天 黑马点评lua脚本加阻塞队列优化秒杀以及redis数据结构常用场景 + 二分查找二维矩阵

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
0x3f 第42天 黑马点评lua脚本加阻塞队列优化秒杀以及redis数据结构常用场景 + 二分查找二维矩阵

1.搜索二维矩阵

简单的方法,排除法,从右上角往左下角找,时间复杂度m+n

class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: m,n = len(matrix),len(matrix[0]) i,j = 0,n-1 while i<m and j >=0: if matrix[i][j]==target: return True if matrix[i][j]<target: i+=1 else: j-=1 return False

使用二分法的话,其实相当于把二维矩阵拉开变成一维的一个数组,毕竟顺序都排好了,直接二分就完事了,时间复杂度m*n

利用一个技巧:不用变成一维,先求得mid,mid在二维矩阵中的行就是 mid//n

列就是mid%n

然后lowerbound就行

class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: m,n = len(matrix),len(matrix[0]) left,right = 0,m*n-1 while left<=right: mid = (left+right)//2 x = matrix[mid//n][mid%n] if x == target: return True elif x > target: right = mid -1 else: left = mid + 1 return False

2.有效的括号

核心思路,遍历所有的字符串,如果是( [ {,新建一个栈,存入),] }

如果不是 那就判断栈是否为空

解决的就是第一个字符串就是) ] },那肯定无效啊

接着判断是否和栈里的一样,一样就说明可以和之前的匹配上

elif not st or st.pop()!=c:拦截无匹配或者右括号和左括号不匹配的错误

但是没有拦截最终左括号多于右括号的情况

所以最后是return not st 只有st为空,匹配完毕,才说明完事

否则证明左括号还有剩余,那也是错误的

黑马点评

redission看门狗的机制不是基于trylock,而是基于lock或者ttrylock或者各种锁的leasetime,只要没有设定leasetime,自动开启看门狗机制,每隔一段时间就会去续期,解决了即使因为网络延迟错过了续期,后面还有容错机会,避免了业务还没完成,却因为固定的过期时间而释放掉锁,出现的并发错误。

看门狗的实现原理,看门狗的调度给予的是Netty的时间轮处理大量的续期任务,基于pexpire毫秒级的过期时间进行续期

今天学习了如何优化秒杀的业务场景,我们使用lua脚本+阻塞队列,这样可以使原先的串行单行的业务流程,变成异步的流程,在redis里完成用户是否有秒杀的资格的判断,再新开一个线程异步独立的完成用户下单的写操作进数据库。使用lua脚本保证原子性的看库存是否充足并查看用户id判断是否下过单,然后将消费券id和用户id封装给阻塞队列,进行下单写操作

阻塞队列有基于list的,有基于stream的,基于list的就是使用LPUSH和BLPOP模拟阻塞队列,缺点单消费者,信息丢失,基于stream可以使用xread,xread参数有count,id$,block,block=0可以实现永久阻塞,直到来新消息,count可以实现一次取多条信息,起始id$查询历史信息,读取最新消息,缺点 会丢失信息,在引入了消费者组,消费者组的原理是将多个消费者组织成一个组,共享一个消息stream,可以实现漏读,因为每个消息都会分配给至少一个消费者,负载均衡,消息会平均的分配给每个消费者,对于消费失败的消息,全部放入pending列表中,每隔一段时间会重新分配给其他消费者重试,如果还是多次失败,最后进入死信队列,交由人工处理,pending列表加上ACK确认,可以防止消息丢失

redis的数据结构,string可以实现短信登录共享session,基础版的setnx的分布式锁,还可以实现原子性的自增,用于查询网站访问量

list可以实现阻塞队列,简单的朋友圈,用户id为key,朋友圈消息为value

哈希结构可以实现redission的可重入,锁名称为key,线程唯一标识为field,可重入次数为value,购物车,用户id为key,商品id为field,商品数据为value

set可以实现秒杀这个业务场景中,用户下单的用户id存入set,因为set是不可重复的,就可以避免一人多单,set可以共同好友,共同关注,key是用户id,value是朋友id,取交集,还可以抽奖系统,把奖品放入set集合,直接pop或者srandommember

zset可以实现排行榜之类,比如步数排行榜,score是步数,value是用户id,也可以实现浏览记录时间戳是 score,用户id是key,帖子是member

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 6:59:57

fft npainting lama能否替代商业软件?真实案例对比评测

FFT NPainting LaMa能否替代商业软件&#xff1f;真实案例对比评测 1. 开篇&#xff1a;我们真的需要商业图像修复工具吗&#xff1f; 你有没有遇到过这样的场景&#xff1a;一张精心拍摄的产品图上&#xff0c;突然发现角落里有个碍眼的水印&#xff1b;或者客户发来的宣传素…

作者头像 李华
网站建设 2026/3/4 1:50:43

Z-Image-Turbo部署全记录:5分钟搞定不是吹牛

Z-Image-Turbo部署全记录&#xff1a;5分钟搞定不是吹牛 你是不是也经历过这样的场景&#xff1a;看到Z-Image-Turbo的9步出图、1024分辨率、开箱即用的宣传&#xff0c;兴致勃勃点开部署文档&#xff0c;结果卡在“下载32GB权重”这一步&#xff0c;等了40分钟还没下完&#…

作者头像 李华
网站建设 2026/3/10 15:10:20

一分钟学会部署中文ASR:科哥镜像开箱即用

一分钟学会部署中文ASR&#xff1a;科哥镜像开箱即用 你是否还在为语音转文字反复折腾环境、编译依赖、调试模型而头疼&#xff1f;是否试过多个ASR工具&#xff0c;却总卡在“安装成功但跑不起来”的尴尬阶段&#xff1f;别再花两小时配环境了——今天这篇实操指南&#xff0…

作者头像 李华
网站建设 2026/3/8 19:10:12

Redpill Recovery内核模块配置实战指南:避坑与DSM部署最佳实践

Redpill Recovery内核模块配置实战指南&#xff1a;避坑与DSM部署最佳实践 【免费下载链接】rr Redpill Recovery (arpl-i18n) 项目地址: https://gitcode.com/gh_mirrors/rr2/rr Redpill Recovery&#xff08;简称RR&#xff09;是实现群晖DSM操作系统本地化部署的核心…

作者头像 李华
网站建设 2026/3/8 19:25:55

突破BT下载瓶颈:104个优质Tracker配置实现极速体验

突破BT下载瓶颈&#xff1a;104个优质Tracker配置实现极速体验 【免费下载链接】trackerslist Updated list of public BitTorrent trackers 项目地址: https://gitcode.com/GitHub_Trending/tr/trackerslist 在P2P文件共享领域&#xff0c;BT下载加速的核心在于Tracker…

作者头像 李华
网站建设 2026/3/10 15:16:48

Linux桌面美化指南:如何安全更换GNOME登录界面主题?

Linux桌面美化指南&#xff1a;如何安全更换GNOME登录界面主题&#xff1f; 【免费下载链接】materia-theme A Material Design theme for GNOME/GTK based desktop environments 项目地址: https://gitcode.com/gh_mirrors/ma/materia-theme 想要让你的Linux系统从登录…

作者头像 李华