Redis缓存问题:穿透,击穿,雪崩,双写一致性等
Redis缓存问题:Redis缓存问题:穿透,击穿,雪崩,双写一致性等
在高并发场景下,数据库往往是最薄弱的环节,我们通常选择使用redis来进行缓存,以起到缓冲作用,来降低数据库的压力,但是一旦缓存出现问题,也会导致数据库瞬间压力过大甚至崩溃,从而导致整个系统崩溃.今天就聊聊常见的redis缓存问题.
缓存击穿
缓存击穿一般指redis中的一个热点数据过期,导致大量请求直接访问数据库的情况,导致数据库瞬间压力过大甚至崩溃.
解决方案:
设置热点数据永不过期,这是一个不错的方案(要考虑业务特性,体量以及成本),前提是热点数据不能频繁发生改变,否则就会出现缓存污染.最好是根据一定的策略进行定时更新
重要接口限流,做好熔断和降级的准备,sentinel是个不错的选择
使用互斥锁,保证同一时刻只有一个线程可以访问数据库,这何尝不是一种限流呢
缓存穿透
缓存穿透指缓存和数据库中都没有的数据,用户不断发起请求.这种情况最可能就是有人试图恶意攻击系统
解决方案:
加校验:拦截非法请求,用户鉴权等
redis缓存一个无效值,以防止对同一个key在数据库中的多次查询,但redis中可能会出现大量 ...
数据库分库分表
数据库分库分表
分库分表到底是什么
分库分表其实是分库,分表,分库分表的总称
分库
将数据按照一定规则存储到不同的数据库中,每个数据库存储一部分数据
分库主要解决的是并发量过大的问题,并发量一旦上升,那么数据库就可能成为系统的瓶颈,因为数据库的连接数量是有上限的,虽然可以进行调整,但并不是无限调整的。所以,当数据库的读或者写的 QPS(每秒查询数) 太高,从而导致你的数据库连接数量不足的时候,就需要考虑到分库了,通过在增加数据库实例的方式来提供更多的数据库连接,从而提升系统的并发度。
这里拿一个电商系统的数据库来举例,当你微服务在做服务拆分的时候,你会按照功能模块去把你的系统进行服务拆分,这个时候,就需要将每个模块的数据从一个单独的数据库中拆开,分成订单、物流、商品、用户等多个数据库,然后随着业务的发展,每个单独的业务数据库也需要进行分库了,如下图所是。
分表
将一张表按照一定规则拆分成多张表,每张表存储一部分数据
相比较于分库,分表主要解决的是数据量大的问题,即通过将数据拆分到多个表,减少单表的数据量,从而提升查询速度。
分库分表
这一般发生在数据库连接不够(分库解决的问题)以及单 ...
博客网站遇到的一些问题
博客网站遇到的一些问题
错把版本升级
最近阿里云显示我的博客网站有漏洞,我便想着去把它给修了,由于经验不足且没有认真看官方的解决方案,我把centos从版本7直接升到了版本8,导致博客网站挂了,服务不可用.由于是大版本升级,而且之前也错误升级了一些东西,于是我选择了重置环境然后重新部署.事后想了一下,主要问题有两点:
没有仔细看官方的解决方案,使用了更宽范围的update命令,导致centos和一些组件错误升级,从而导致博客网站无法正常访问.
没有备份手段,阿里云其实提供了快照,但我以为自己不会用上,而且能省一笔钱,也就没开通
阿里云重置环境的方法:
停止云服务器
找到更换操作系统选项,选择更换系统盘
对系统盘做初始设置
博客网站无法正常访问
这个问题在于浏览器,我一直没有给我的网站配置SSL证书,所以一直用的是http协议,现在edge浏览器和chrome浏览器已经强制将http转换为https,导致我的网站无法正常访问.解决方案有如下两种:
1.更改HSTS
在edge浏览器中,输入edge://net-internals/#hsts,在Delete do ...
Hutool:一行代码搞定数据脱敏 | 京东云技术团队
声明:本文转载自Hutool:一行代码搞定数据脱敏 | 京东云技术团队
Hutool:一行代码搞定数据脱敏 | 京东云技术团队
1. 什么是数据脱敏
1.1 数据脱敏的定义
数据脱敏百度百科中是这样定义的:
数据脱敏,指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。这样就可以在开发、测试和其它非生产环境以及外包环境中安全地使用脱敏后的真实数据集。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。是数据库安全技术之一。
总的来说,数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。
在数据脱敏过程中,通常会采用不同的算法和技术,以根据不同的需求和场景对数据进行处理。例如,对于身份证号码,可以使用掩码算法(masking)将前几位数字保留,其他位用“X”或"*"代替;对于姓名,可以使用伪造(pseudonymization)算法,将真实姓名替换成随机生成的假名。
1.2 常用脱敏规则
替换、重排、加 ...
数据库连接池
数据库连接池
为什么需要连接池
当一个数据库操作任务到来时,程序需要和数据库建立连接,进行三次握手、数据库用户验证,然后执行SQL语句,最后用户退出、四次挥手关闭连接。每次任务都执行这样的流程,那么整个流程中,真正有效而且变化的只有执行SQL语句这一步骤,而且每次建立连接、用户验证、关闭连接都耗费时间。
因此,考虑能不能将连接只创建一次,然后复用长连接执行 SQL 语句呢?这需要池化技术。
池化技术可以减少资源对象的创建次数,提高程序的响应性能,特别是对高并发场景下的性能提升非常明显。
适合使用池化技术缓存的资源对象具有如下特点:
对象创建时间长
对象占用资源多
对象创建后可以重复使用
数据库连接池
数据库连接池是程序启动时建立一定数量的数据库连接,并将这些连接组成一个连接池,当程序需要用到连接去进行数据库操作的时候,直接从连接池中获取一个连接对象使用,使用完毕后,将连接对象归还给连接池。
优点:
(1)资源复用。避免了频繁的创建、释放连接引起的性能开销,减少系统消耗,增进系统运行环境的稳定(减少内存碎片和数据库临时线程/进程数量)。
(2)更快的系统响应速度。数据库连接池初始化完 ...
美赛C题学习
美赛C题学习
如果自建模型,可以参考2218931的4.2.1,2218931的论文描述值得学习,最后的信也比较有特色
跟现实相结合也是很重要的点,最好能有案例支撑,虽然说在C题中不常见,但其实有的地方也可以加上
时间序列预测
可以关注一些特殊的时间节点,比如节假日,季节性,节假日和季节性都有可能影响时间序列的预测。
ARIMA:经典时间序列预测模型,使用自回归积分移动平均模型,该模型可以对时间序列数据进行预测,并且可以对时间序列数据进行平滑处理,可以参考下2203120的写法。
GRU:时间序列预测,和LSTM类似,但是GRU的更新门和遗忘门合并为更新门,输入门和输出门合并为输出门,所以GRU的参数更少,更便于计算.
SIR:SIR模型,用于传染病传播的预测,S表示易感者,I表示感染者,R表示康复者,也适用于某些突然爆火的事件。
Prophet:时间序列预测,使用Facebook的Prophet算法,该算法基于时间序列历史数据,拟合出一个趋势和季节性,然后预测未来的时间序列。参考2301192,2200688
卡尔曼滤波算法
LightGBM:LightGBM ...