GaryLee's Blog
什么是JWT? 什么是JWT?
一、背景在介绍JWT前,我们先了解一下Cookie、Session和Token,这几个概念我们会比较熟悉,它们是用于Web应用程序中管理用户状态和身份状态的技术。因为在Web应用程序中,Http的通信是无状态的,每个请求都是独立的,所以服务
2023-12-04
什么是时间轮算法? 什么是时间轮算法?
一、什么是时间轮算法?时间轮算法是一种用于处理定时任务和调度的常用算法。 时间轮算法的组成有: 时间轮 时间槽:一个时间轮对应多个时间槽,时间槽还可以分为秒级时间槽、分钟级时间槽、小时级时间槽等 二、时间轮算法怎么实现?如下图所示,一个
2023-12-02
在Java中如何实现定时任务? 在Java中如何实现定时任务?
一、定时任务是什么?有什么用?定时任务可以帮助我们在某个时间点触发某个动作,如凌晨0点要结算榜单、晚上8点要下发用户PUSH等。 总结一下在实际开发中定时任务的几个使用场景: 定时同步数据/刷新缓存:比如活动配置等不需要数据强一致性的场景
2023-12-02
精选文章 精选文章
自己总结记录的
2023-11-30 GaryLee
排行榜的最佳实践 排行榜的最佳实践
一、排行榜的最佳实践1、实现方式一般情况下,排行榜可以通过MySQL或者Redis来做实现,但在特定场景下也可以用大数据来做数据支持,那么不同实现方式有什么区别呢?: 排序方式 优点 缺点 适用场景 MySQL order b
2023-11-28
如何进行分库分表?会带来什么问题? 如何进行分库分表?会带来什么问题?
一、为什么要进行分库分表?分库分表的目的是为了解决单表过大、单库表过多的问题,具体可参考文章(《如何进行SQL调优?》) 二、什么情况下需要进行分库分表?以下几种情况可以考虑分库分表: 单表数据量达到千万级别(读写性能差) 数据库中内存占
2023-11-27
Zookeeper注册中心挂了会影响Dubbo服务间的正常通信吗? Zookeeper注册中心挂了会影响Dubbo服务间的正常通信吗?
一、背景Dubbo服务在启动时都会从Zookeeper注册中心同步一份消费者/生产者的连接信息到本地,并通过Watch机制更新(如其中一台消费者挂了,就会通知生产者更新本地缓存的连接信息)。 二、 Zookeeper注册中心挂了会影响Dub
2023-11-27
如何解决短信验证码接口被狂刷导致系统崩溃的问题? 如何解决短信验证码接口被狂刷导致系统崩溃的问题?
一、背景短信验证码功能我们都不陌生,我们印象中的短信验证码都是有发送限制的(如60s内只能发送1次),这样做的目的一方面是为了保护系统,另一方面也是为了控制成本(发短信要钱的)。 我们先简单分析一下短信验证码接口被狂刷的主要场景有哪些:
2023-11-27
线上MySQL如何给千万级大表加索引? 线上MySQL如何给千万级大表加索引?
一、背景如果我们直接在线上MySQL给千万级大表加索引,会导致长时间卡死(锁表)甚至崩溃,所以我们不能直接在原表上加索引,如: ALTER TABLE `user` ADD INDEX `test_idx`(`name`); 二、解决方案
2023-11-22
Mybatis的工作原理是什么? Mybatis的工作原理是什么?
一、什么是Mybatis?Mybatis是一个持久化框架,可以帮助我们快速做数据库交互开发。 常规的数据库交互开发,我们需要有下面几步: 创建Connection 创建Statement 代码中拼接SQL语句 返回结果集转换 … 而使用
2023-11-21
什么是SpringBoot的Starter?如何自定义一个Starter? 什么是SpringBoot的Starter?如何自定义一个Starter?
一、什么是SpringBoot的Starter?SpringBoot的Starter说白了就是一系列依赖关系的集合,它可以让我们的依赖关系变得更简单。 Starter有以下几个特点: 自动配置:Starter提供了相关的自动配置类,可以根
2023-11-16
为什么Lua脚本可以保证原子性? 为什么Lua脚本可以保证原子性?
一、什么是原子性?原子性这个概念在数据库中和在并发编程中是两种不同的概念: 数据库中的原子性:要么都执行,要么都不执行 并发编程中的原子性:操作不可拆分、不被中断 Lua脚本是属于并发编程中的原子性,可以保证原子性,但是不能保证要么都执
2023-11-13
2 / 16