fyn

缓存穿透,缓存雪崩,缓存击穿

缓存穿透 问题:当访问一个不存在的商品id时因为没有缓存会直接查数据库,如果有高并发访问不存在的id可能导致数据库压力变大。 解决方法:可以把空值也进行缓存,但缓存时间可以相对较低 缓存雪崩 问题:如果大量商品的缓存是在同一时间生成的,比如每天零点跑脚本更新缓存,会导致1点时大量缓存同时过期,这时会出现大量数据库查询。 解决方法:可以将过期时间加上一些随机因子,比如过期时间随机设置为为45分钟至1小时15分。 缓存击穿 问题:缓存未生成或过期后,突然高并发访问。因为生成缓存需要一定的时间,所以在这段时间并发请求都认为缓存不存在都去查数据库。 解决方法1:设置不过期的缓存(在修改数据时再更新缓存) 解决方法2:在缓存的数据中也记录一个时间,但比缓存的过期时间短。比如缓存1小时,数据中记半个小时。半小时后再访问这条数据时仍然从缓存中返回数据,但是同时会往消息队列中发一条请求更新缓存的消息。然后后台任务消费消息时去更新缓存,

InnoDB 聚集索引和非聚集索引

目录 * 1 区别 * 2 覆盖索引减少回表 * 3 如何创建聚集索引 * 4 延伸:MyISAM 区别 聚集索引包含所需的所有数据,比如mysql整张表就是一个聚集索引 比如索引的key就是主键,值就是这一行的所有字段,根据主键查询时可以直接查到所有字段 非聚集索引不包含所有数据,但会包含聚集索引的key 比如索引的key是两个自定义的字段,而值就是主键,根据这两个字段,只能直接查出主键是什么,所以这时如果想查询其它字段的值还会通过主键去聚集索引中再查询一次(即回表)。 覆盖索引减少回表 如果查询的条件或结果中,只使用了非聚集索引定义中的那几个字段的话,就不会回表二次查询。 比如索引是uid, username两个字段: 执行SELECT status WHERE

B树和B+树的区别

B树中的元素不会出现重复的,元素有可能在中间节点也有可能在叶子节点。 B+树中所有元素都会出现在叶子节点,但也有可能同时出现在中间节点。B+树叶子节点间有额外的链表结构。 这两点会让B+树在按连续的范围查找时比B树更快。 另外B树在查找时不同的元素因为在不同层级的节点,所以不同的元素查询时间可能有差异,而B+树所有的元素都在叶子节点所以查询的时间更平均一些 B树每个元素都包含卫星数据。 B+树只有叶子节点中的元素包含卫星数据。 这会使在中间节点的页大小相同的情况下B+树能比B树存更多的节点,也就意味着B+树有可能比B树更矮一些(树的高度决定磁盘io次数,越矮次数越少)

WordPress jetpack插件验证失败的原因

抓包发现jetpack发到网站的请求返回了faultCode:32700,jetpack parse error. not well formed的错误。 执行php -m查看发现没有安装xml扩展,apt install php7.2-xml解决

解决git的error: cannot lock ref问题

今天更新代码时出现了这个错误信息 error: cannot lock ref 'refs/remotes/origin/xxxx/log': 'refs/remotes/origin/xxxx' exists; cannot create 'refs/remotes/origin/xxxx/log' From ssh://ssh.gitlab.oooo.