标签:Redis

分布式常见面试题:如何解决分布式锁的死锁问题

在日常开发中,像常见的秒杀扣库存这种需要访问同一资源的情况,并发读写时如果没有任何防护,很容易出现数据错乱的问题,比如超卖,库里的数据可能会出现负数。为解决此问题,我们引入了分布式锁,通常通过 Redis 来实现。它能让同一时刻只允许一个线程访问资源,超卖问题也就迎刃而解。 然而,分布式锁又带来了不少新麻烦,比如死锁问题,这出现的频率还挺高。常见场景有:加锁……

分布式常见面试题:聊聊分布式系统下的鉴权认证方案

各位小伙伴们,提到系统的鉴权认证,大家应该都不陌生,比较常见的就是登录模块。输入账号、输入密码传到后台进行登录,认证通过就跳转主页,一般都是这个逻辑。 传统的模式是基于 session 的,登录之后后台接口会返回一个 session ID,然后前端将其保存在 cookie 里。访问页面时会带上 cookie 里的 session 到服务端去做校验,校验成功就……

分布式常见面试题:聊聊分布式ID的生成方案

今天咱们来聊聊分布式数据库中一个基础但又关键的问题,那就是如何生成数据表的记录 ID 。 当数据量越来越大,并发量越来越高,传统的单库单表遇到性能瓶颈时,我们自然会想到分库分表。利用分库分表虽能分摊压力,但在享受性能提升的同时,也会遇到很多问题,比如多表查询、分布式事务等等,这些咱们在前几期重点聊过。本期重点说一说分布式数据库中数据表记录 ID 的生成方案。……

分布式常见面试题:聊聊分布式系统下商城秒杀系统的设计思路

今天咱们来聊聊电商系统中常见的秒杀活动。几乎每一家电商都会搞秒杀,一般在促销活动中,指定一定数量的商品用低价吸引大量用户参与,但只有少数用户能购买成功,这就是电商秒杀的套路,目的是用低价商品引入大批流量。 那对于电商系统来说,怎么设计一套既能满足日常交易,又能扛住高并发的秒杀系统,这可是程序员们重点要考虑的问题。 先说商品购买流程,大家应该都熟悉。比如一个朋……

数据库常见面试题:分库分表后的查询优化策略

在我们的数据库达到性能瓶颈之后,自然而然会想到分库分表。但分库分表之后,又带来了其他一些问题,比如如何联表查询、如何分页查询,大部分场景还是停留在查询层面。前几期也分析了一些常规的处理方法,像增加冗余字段和重构查询表等等。然而,这些本质上还是基于数据库层面,还是要依赖数据库的性能。过分依赖数据库,其实是存在一些问题的。 在大部分场景下,尤其是高并发的情况下,……

数据库常见面试题:分库分表带来了哪些挑战

在我们日常的生产环境中,一旦数据库出现性能瓶颈,很自然就会想到分库分表。可以按照取模、一致性哈希或者时间点来分区等等。总的来说,操作起来还算容易,尤其是借助一些中间件,像 MyCat ,拆分动作相对容易。 然而,在享受性能提升的同时,分库分表也带来了诸多难题。比如大家在评论区提到的,分库分表之后怎么去 join 。一般情况下,不建议像单库单表那样进行 joi……

消息队列常见面试题:消息队列如果遇到消息积压,该如何解决?

今天咱们来聊聊在生产环境中,如果使用的消息队列遇到消息积压该怎么解决。这可是个常见又关键的问题。 我们都清楚,消息队列中的消息通常存放在内存里,要是出现过量的消息积压,就可能引发内存或磁盘告警,导致响应超时、连接阻塞,还会影响其他队列使用,让整体服务不可用。 那为啥会出现消息积压呢?其实消息队列有生产端和消费端,一进一出。积压的原因要么是生产端产生消息太快太……

消息队列常见面试题:应对消息重复的几种幂等设计方案

大家好!今天咱们来聊聊消息队列中应对消息重复的幂等设计方案。在消息队列的使用中,消息重复是个常见问题,而幂等设计则是解决这一问题的关键。 首先是方案一,这个方案比较简单粗暴,通过约束控制来实现。比如利用数据库的 unique 索引,像在消费送积分的场景中,可以用交易的订单号来建立索引。要是重复插入积分奖励,就会违反索引规则,所以只能成功执行一条。同理,还可以……

分布式常见面试题:聊聊分布式下的信号量隔离

各位朋友,今天咱们来聊聊分布式中的信号量隔离。上一期咱们讲了线程池隔离,这一期咱们接着说信号量隔离。 信号量隔离应用广泛,场景和线程池隔离差不多,都能对方法级、接口级做隔离。它的原理很简单,比如设置 1000 个信号量,请求过来先取一个信号,拿到才能访问下游服务,完成后释放信号。要是 1000 个信号都占满了,新进来的请求就会被拒之门外,走降级方法提示稍后再……

分布式常见面试题:服务熔断,解决灾难性雪崩效应的有效利器

各位朋友,今天咱们来聊聊分布式面试中的必考题——服务熔断。这可是解决灾难性雪崩效应的有效利器! 在高并发的情况下,服务访问的压力不断增大,可能会出现调用超时、接口错误等问题,严重时甚至会引发雪崩效应。为了保护服务不被流量冲垮,就像保险丝一样,会直接掐断服务,页面往往会给出“请稍后再试”的相关提示。 那可能有人会问,熔断器怎么知道什么时候该熔断呢?单纯根据一段……

分布式常见面试题:如何提高系统可用性?

在分布式环境下,有一点至关重要,那就是想尽办法提升系统的可用性,尤其是像电商系统、门户网站这类访问量巨大的。一旦出现故障,可能引发一系列连锁反应。比如突然涌来的超大流量,如果系统没做好高可用的准备,很可能抵挡不住流量洪峰,导致宕机。这种情况老板不想看到,程序员也不想看到,毕竟这和大家的前途紧密相关。 那问题来了,怎么去规避这类问题,提高系统的可用性呢?其实解……

Java面试题:核心线程数为0时,线程池怎么执行?

线程池作为Java并发编程领域提升执行效能的关键工具,其在优化程序性能和管理并发任务方面发挥着不可小觑的作用,并且是现代软件项目不可或缺的一部分。但有个有趣的Java面试题值得探讨:若将线程池的核心线程数量设定为0,这种非典型配置下,线程池的运作机制又是怎样的呢? 探讨此问题前,我们需回顾正常情形下线程池的作业流程。 1.线程池的执行流程 正常情况下(核心线……