获得徽章 0
#青训营 x 字节后端训练营#
训练营马上结束了,好快呀。今天主要学习了redis,分享一下redis的缓存常见问题
首先是缓存击穿问题,即服务器对某一个key到来大量访问,而这个key恰好过期了,此时所有访问集中到数据库导致崩溃。解决方案就是预设热门数据并加大其保持时长,也可以实时监控访问情况并人工调整,还可以设置锁但是会导致性能下降。
然后是缓存雪崩问题,即redis多个key同时过期,此时导致多个访问未命中从而去请求数据库导致崩溃。解决方案可以构建多级缓存、也可以使用锁或者队列,或者设置过期标志来自动更新缓存,也可以在设置过期时间时分散设置。
最后是缓存穿透问题,就是服务器到来大量访问,但是所请求的数据在redis中未命中,或者这些数据本就是错误请求,此时会导致大量访问转移到数据库,会导致数据库崩溃。解决方案可以是对空值缓存,即访问空值直接返回默认值,也可以设置访问黑名单(主要对付黑客攻击),还可以设置实时监控,以及布隆过滤器。
展开
评论
#青训营 x 字节后端训练营#
今天主要学习了事务的隔离级别:
如果一个事务读到了另一个未提交事务修改过的数据,那么这种隔离级别就称之为未提交读(英文名:READ UNCOMMITTED)
如果一个事务只能读到另一个已经提交的事务修改过的数据,并且其他事务每对该数据进行一次修改并提交后,该事务都能查询得到最新值,那么这种隔离级别就称之为已提交读(英文名:READ COMMITTED)
一个事务只能读到另一个已经提交的事务修改过的数据,但是第一次读过某条记录后,即使其他事务修改了该记录的值并且提交,该事务之后再读该条记录时,读到的仍是第一次读到的值,而不是每次都读到不同的数据。那么这种隔离级别就称之为可重复读(英文名:REPEATABLE READ)
以上3种隔离级别都允许对同一条记录进行读-读、读-写、写-读的并发操作,如果我们不允许读-写、写-读的并发操作,可以使用SERIALIZABLE隔离级别
展开
评论
#青训营 x 字节后端训练营#
今天学习了分布式系统,分布式系统是由多个独立计算机组成的集合,这些计算机通过网络进行通信和协作,以实现一个或多个共同的目标。分布式系统通常用于处理大量数据或容纳大量用户的应用程序,例如搜索引擎、社交网络和在线交易系统。
评论
#青训营 x 字节后端训练营#
今天说一下刚学习的并发组合模式的概念:一个具有层级关系的对象由一系列拥有父子关系的对象通过树形结构组成,子对象即可被串行执行,也可被并发执行;还了解了并发组合模式的优势:原本串行的业务(存在阻塞的部分,比如网络IO等)可以被并发执行,利用多核优势提升性能。
展开
评论
#青训营 x 字节后端训练营#
今天主要学习了MySQL主从架构优缺点
主从架构的优点包括:
1、数据存在多个镜像和数据冗余,可以防止单一主机的数据丢失,提高数据的安全性。
2、主机宕机的时候,可以切换到从服务器上,数据的一致性可能存在问题(异步复制的延迟)。如果主机突然宕机,可能一些数据没有及时同步从服务器上。MySQL5.6提供一种半同步的复制方式(参考:Semisynchronous Replication),但是效率使其略显鸡肋;还有其他方式实现的同步复制,如DRBD。
3、如果使用mysql proxy,在业务上可以实现读写分离。即可以把一些读操作在从服务器上执行,减小主服务器的负担。
4、在从服务器上做数据备份,这样不影响主服务器的正常运行。如mysqldump备份时会加表所。
5、在从服务器上做数据报表和数据统计,这样可以避免生产服务器的访问压力过大。
6、从服务器可以使用不用的存储引擎,适应不同的应用需求;另外从库上的数据表建立不同的索引,可以满足如统计工作上的要求。
主从架构的缺点包括:
1、数据同步延迟问题,从库中的数据可能不是实时的。
2、如果主库故障,需要手动进行主从切换,可能会导致一定的停机时间。
3、主从架构需要占用额外的资源,增加系统的复杂性。
展开
评论
#青训营 x 字节后端训练营#
今天探索了GORM在性能优化方面的功能。GORM提供了各种优化数据库访问的方式,例如使用预编译语句、使用缓存和批量操作等。
评论
#青训营 x 字节后端训练营#
前后端分离模式的好处:
1)可以实现真正的前后端解耦,前端服务器使用nginx,前端/web服务器放的是css、js、图片等一系列静态资源,前端服务器负责控制页面引用、跳转、路由,前端页面异步调用后端的接口,后端/应用服务器使用toomcat(把tomcat想象成一个数据提供者),加快整体响应速度。
2)发生bug,可以快速定位是谁的问题,不会出现互相踢皮球的现象。页面逻辑,跳转错误,浏览器兼容性问题,脚本问题,页面样式问题,全部由前端工程师负责。接口数据出错,数据没有提交成功,应答超时等问题,全部由后端工程师来解决。双方互不干扰。
3)在大并发情况下,可以同时水平扩展前后端服务器;
4)减少后端服务器的兵法/负载压力。处理接口以外的其他所有http轻轻全部转移到前端nginx上,接口的请求调用tomcat,参考nginx反响带来tomcat。且除了第一次页面请求外,浏览器会大量调用本地缓存;
5)即使后端服务暂时超时,前端页面也会正常访问,只是数据刷不出来。
6)页面显示的东西再多也不怕,因为是异步加载
7)nginx支持页面热部署,不用重启服务器,前端升级更无缝。
8)增加代码的维护性&易读性(前后端耦合在一起的代码读起来相当费劲)
9)提升开发效率,因为可以前后端并行开发,而不是像以前的强依赖。
10)在nginx中部署证书,外网使用https访问,并且只开放443和80端口,其他端口一律关闭(防止黑客口扫描),内网使用http,性能和安全都有保障。
11)前端使用大量的组件代码得以复用,组件化,提升开发效率。
展开
评论
#青训营 x 字节后端训练营#
今天了解了Go语言对于JSON的处理,Go的encoding/json包来处理JSON内容。这个包提供了API函数来从Go对象生成JSON文档,或者从JSON文档填充Go对象。也可以自定义JSON和Go之间的转换过程。
例如,可以使用json.Marshal函数来将Go对象转换为JSON,或者使用json.Unmarshal函数来将JSON转换为Go对象。还可以使用json.NewEncoder和json.NewDecoder来在文件或网络连接上编码或解码JSON。
展开
评论
#青训营 x 字节后端训练营#
今天学习了一下测试
1. 单元测试概念和规则:
- 单元测试是针对代码中最小可测试单元的测试,通常是函数或方法。
- 单元测试用于验证代码的正确性和稳定性,可以减少代码错误和改动引起的问题。
- 单元测试应该是独立的、可重复的、可自动化执行的。
- 单元测试应该覆盖代码的各种情况和边界条件,包括正常输入、异常输入和边界值。
- 单元测试的命名应该清晰、准确,使用TestXxx的命名规则。
2. Mock测试:
- Mock测试用于模拟依赖项的行为,以便在测试中控制和验证代码的交互。
- Mock测试可以解决测试中的依赖关系和外部资源的问题,使测试更加可控和独立。
- 可以使用Go语言的mock库(如github.com/stretchr/testify/mock)来创建和管理模拟对象。
- 在Mock测试中,可以定义模拟对象的行为和期望,并进行断言验证。
展开
评论
#青训营 x 字节后端训练营#
今日了解go有一些默认的规则,如:大写字母开头的变量是其它包可以读取的,也就是可导出的,是公有变量。小写字母开头的就不可导出,是私有变量。大写字母开头的函数类似,相当于class中的带public关键词声明的公有函数;小写字母开头的就是私有函数。
评论
#青训营 x 字节后端训练营#
之前是主学Java的,学了这么多天go下来,发现他们的显著区别就是go不存在“类”这个概念,组织数据实体的结构在go中被称为结构体。函数可以脱离“类”而存在,函数可以依赖于结构体来调用或者依赖于包名调用。
评论
#青训营 x 字节后端训练营#
今天学习了一款基于Go语言的web开发框架:GoFrame,它具有高性能、易用、模块化、可扩展等特点,适合PHP转Go的开发者使用。继续加油
评论
#青训营 x 字节后端训练营#
今天学习了消息队列,了解了kafka,bmq,rockermq三种消息队列的使用以及架构,继续加油吧
评论
下一页
个人成就
文章被阅读 511
掘力值 73
收藏集
0
关注标签
10
加入于