获得徽章 1
- #青训营笔记创作活动#
1月22日 打卡day42
一般对于OLTP的表,建议单表不要超过2000W行数据量,总大小15G以内。
通过表分区以获得更大吞吐量。
通过库分表减少磁盘io。
通过冷热归档提升热数据的查询效率。展开评论点赞 - #青训营笔记创作活动#
1月20日 打卡day41
使用断点进行debug:
1. step in 进入方法内部
2. step over直接执行到下一行
3. step out跳出当前方法
断点可以进行条件判断,满足条件才会进入断点。
静态断点,只是想看程序会不会运行到这里来(类似于动态日志)
分组管理断点(系统不同链路的断点)展开评论点赞 - #青训营笔记创作活动#
1月19日 打卡day40
Redis限流方案:固定窗口、滑动窗口、令牌桶算法、漏桶算法
Nginx限流:控制速率、控制并发
Redis设置延时队列:过期时间、ZSet评论点赞 - #青训营笔记创作活动#
1月18日 打卡day39
Java 8 引入了一个十分实用的 Optional 类,它主要是为了解决空指针异常(NullPointerException)。从 Optional 实例中获得实际值对象的方法之一是使用 get() 方法。orElseGet()方法会在有值的时候返回值,如果没有值,它会执行作为参数传入的 Supplier(供应者) 函数式接口,并将返回其执行结果。展开评论点赞 - #青训营笔记创作活动#
1月17日 打卡day38
对于高并发秒杀系统我们可以从下面几个方面入手:
页面静态化、CDN加速、负载均衡、防重、缓存、异步、熔断、限流、分布式锁。
利用redisMQ等中间件对系统进行优化,解决缓存加速、防止重复提交、排队下单、超卖、少卖、削峰、异步下单等核心问题。展开评论点赞 - #青训营笔记创作活动#
1月16日 打卡day37
数据淘汰机制,是一个成熟的缓存体系所必备的基础能力。
将过期时间在一定范围内随机打散,避免缓存雪崩。
少量缓存失效的时候恰好失效的数据遭遇大并发量的请求会导致缓存击穿,将热点信息上锁,仅抢到锁的线程可以访问数据库,并将数据缓存。将请求超过一个特定频率的数据进行缓存(冷数据的加热机制)。
对于并发要求较高、且数据一致性要求较好的时候,推荐选择先更新数据库,再删除缓存,并结合删除重试 + 补偿逻辑 + 缓存过期TTL等综合手段。展开评论点赞 - #青训营笔记创作活动#
1月15日 打卡day36
string类型无法直接更新,需要转换成[]byte。
在 for 执行 defer 会导致资源延迟释放。
for select配合时,break 并不能跳出循环。
main 函数中可以使用 flag 包来获取和解析命令行参数。
使用range遍历时用索引修改原值。展开评论点赞 - #青训营笔记创作活动#
1月14日 打卡day35
使用Hertz进行jwt身份验证时可以将用户信息通过Authenticator保存,并通过PayloadFunc解析。
配置了身份验证中间件的路由会进行身份验证,TokenLookup用于设置 token 的获取源,HTTPStatusMessageFunc用于设置 jwt 校验流程发生错误时响应所包含的错误信息。展开评论点赞 - #青训营笔记创作活动#
1月12日 打卡day34
MySQL索引默认使用b+tree作为底层数据结构。
当使用字符串作为主键字段时,在插入数据的时候会频繁破坏原有的树结构,造成树分裂以及后续节点的挪动,推荐使用自增ID。评论点赞 - #青训营笔记创作活动#
1月11日 打卡day33
Mysql 的表数据是以页的形式存放的,页在磁盘中不一定是连续的。
在 B+ 树中,叶子节点和非叶子节点的数据结构是一样的,区别在于,叶子节点存放的是实际的行数据,而非叶子节点存放的是主键和页号。
索引结构不会影响单表最大行数,2kw 也只是推荐值,超过了这个值可能会导致 B + 树层级更高,影响查询性能。展开评论点赞