
获得徽章 1
赞了这篇文章
赞了这篇文章
赞了这篇文章
#青训营笔记创作活动#
2月17日 day13
今天再次学习了redis,redis 是一款优秀的缓存中间件,在企业级架构中占有重要的地位.
学习了redis的优缺点,数据类型,内存优化,分布式锁,缓存,哨兵,事务的实现等等went
2月17日 day13
今天再次学习了redis,redis 是一款优秀的缓存中间件,在企业级架构中占有重要的地位.
学习了redis的优缺点,数据类型,内存优化,分布式锁,缓存,哨兵,事务的实现等等went
展开
评论
点赞
赞了这篇文章
赞了这篇文章
#青训营笔记创作活动#
2月16日 day12
1.在InnoDB中,如果一条SQL语句能命中索引执行,那就会加行锁,但如果无法命中索引加的就是表锁。
2.死锁解决方案:
2.1 锁超时机制:事务/线程在等待锁时,超出一定时间后自动放弃等待并返回。
2.2 外力介入打破僵局:第三者介入,将死锁情况中的某个事务/线程强制结束,让其他事务继续执行。
3.死锁检测算法 - wait-for graph :
3.1 锁的信息链表:目前持有每个锁的事务是谁。
3.2 事务等待链表:阻塞的事务要等待的锁是谁。
3.3 通过innodb_deadlock_detect=on|off这个参数,来控制是否开启死锁检测机制
3.4 该算法通过查找是否闭环判断是否死锁
4.在业务允许的情况下,尽量缩短一个事务持有锁的时间、减小锁的粒度以及锁的数量。检查sql逻辑.
5. 锁的底层实现
2月16日 day12
1.在InnoDB中,如果一条SQL语句能命中索引执行,那就会加行锁,但如果无法命中索引加的就是表锁。
2.死锁解决方案:
2.1 锁超时机制:事务/线程在等待锁时,超出一定时间后自动放弃等待并返回。
2.2 外力介入打破僵局:第三者介入,将死锁情况中的某个事务/线程强制结束,让其他事务继续执行。
3.死锁检测算法 - wait-for graph :
3.1 锁的信息链表:目前持有每个锁的事务是谁。
3.2 事务等待链表:阻塞的事务要等待的锁是谁。
3.3 通过innodb_deadlock_detect=on|off这个参数,来控制是否开启死锁检测机制
3.4 该算法通过查找是否闭环判断是否死锁
4.在业务允许的情况下,尽量缩短一个事务持有锁的时间、减小锁的粒度以及锁的数量。检查sql逻辑.
5. 锁的底层实现
展开
评论
点赞
#青训营笔记创作活动#
2月15日 day11
对应这种瞬时高并发的场景,可以使用:
页面静态化:对活动页面做静态化处理,只有点击按钮才会访问服务器
CDN加速:使用cdn使全国各地的用户就近获取所需内容,降低网络拥堵,提高用户访问响应速度和命中率
按钮:使用js文件控制秒杀按钮,只在秒杀时间点时才点亮,一般为了性能考虑,将css、js和图片等静态资源文件提前缓存到CDN上
缓存:使用缓存redis,部署多个节点,而不是直接连接mysql数据库,使用分布式锁和布隆过滤器
mq异步处理:将秒杀和下单分开,因为只有秒杀并发量大,使用秒杀给mq服务器发送mq消息
限流:基于nginx限流
基于redis限流
对同一用户限流,对同一ip限流,加验证码等方法
分布式锁
2月15日 day11
对应这种瞬时高并发的场景,可以使用:
页面静态化:对活动页面做静态化处理,只有点击按钮才会访问服务器
CDN加速:使用cdn使全国各地的用户就近获取所需内容,降低网络拥堵,提高用户访问响应速度和命中率
按钮:使用js文件控制秒杀按钮,只在秒杀时间点时才点亮,一般为了性能考虑,将css、js和图片等静态资源文件提前缓存到CDN上
缓存:使用缓存redis,部署多个节点,而不是直接连接mysql数据库,使用分布式锁和布隆过滤器
mq异步处理:将秒杀和下单分开,因为只有秒杀并发量大,使用秒杀给mq服务器发送mq消息
限流:基于nginx限流
基于redis限流
对同一用户限流,对同一ip限流,加验证码等方法
分布式锁
展开
评论
点赞
#青训营笔记创作活动#
2月14日 day10
这是Hertz框架的中间件,它使用 jwt-go 来提供 jwt 身份验证中间件。
学习了Hertz-JWT的使用,实现了一个用户登录得到demo来测试hertz-jwt。
2月14日 day10
这是Hertz框架的中间件,它使用 jwt-go 来提供 jwt 身份验证中间件。
学习了Hertz-JWT的使用,实现了一个用户登录得到demo来测试hertz-jwt。
展开
评论
点赞
#青训营笔记创作活动#
2月13日 day9
1.在 Hertz 中使用反向代理需要拉取社区提供的 reverseproxy 拓展。
2.拓展不只是能够实现简单的反向代理,在 reverseproxy 拓展中提供了许多可以自定义的可选项。
3.方法:
通过 NewSingleHostReverseProxy 函数设置反向代理的目标路径 /proxy 。接下来注册路由的路径为反向代理目标路径的子路径 /proxy/backend ,最后通过注册 /backend 映射反向代理服务 proxy.ServeHTTP 。这样我们通过 GET 方法访问 /backend 时就会访问到 /proxy/backend 中的内容。
2月13日 day9
1.在 Hertz 中使用反向代理需要拉取社区提供的 reverseproxy 拓展。
2.拓展不只是能够实现简单的反向代理,在 reverseproxy 拓展中提供了许多可以自定义的可选项。
3.方法:
通过 NewSingleHostReverseProxy 函数设置反向代理的目标路径 /proxy 。接下来注册路由的路径为反向代理目标路径的子路径 /proxy/backend ,最后通过注册 /backend 映射反向代理服务 proxy.ServeHTTP 。这样我们通过 GET 方法访问 /backend 时就会访问到 /proxy/backend 中的内容。
展开
评论
点赞
#青训营笔记创作活动#
2月7日 打卡day8
1.注释尽可能全面,写有意义的方法注释
2.项目拆分合理的目录结构,根据不同的业务进行划分
3. 不在循环里远程调用、或者数据库操作,优先考虑批量进行。
4. 封装方法形参
5. 具备封装通用模板的编码能力
6.避免创建比必要的对象、异步处理、使用缓冲流,减少IO操作等
8. 可变参数的配置化处理
9. 会总结并使用工具类
10. 控制方法函数复杂度
...
2月7日 打卡day8
1.注释尽可能全面,写有意义的方法注释
2.项目拆分合理的目录结构,根据不同的业务进行划分
3. 不在循环里远程调用、或者数据库操作,优先考虑批量进行。
4. 封装方法形参
5. 具备封装通用模板的编码能力
6.避免创建比必要的对象、异步处理、使用缓冲流,减少IO操作等
8. 可变参数的配置化处理
9. 会总结并使用工具类
10. 控制方法函数复杂度
...
展开
评论
点赞