Blog

Agility6

关于缓存

Tech

缓存的经典问题 缓存失效 缓存穿透 缓存雪崩 数据不一致 数据并发竞争 Hot Key Big Key 每一个问题都参照四个步骤进行阐述:问题描述、原因分析、业务场景、解决方案 缓存失效 问题描述 当一个系统中存在大量的热点数据,通常情况下就需要上缓存,大致的流程就是 查缓存(有则直接返回) 查DB(缓存中不存在) 将查到的数据回写到缓存中 我们希望数据查询尽可能命中,这样系统负载最小,性能最佳,但是如果这时候有大量的Key同时失效,很多缓存数据访问都会miss,就会穿透到DB中,这样就会导致整体的系统压力急剧上升,这就是缓存失效的问题。 原因分析 导致缓存失效的主要原因,就是批量Key一起失效,简言之就是在加入缓存时过期时间都是一致的。一般情况下,缓存时逐步写入的,所以自然就会是逐步淘汰的。 但是,在一些场景下,如果需要将一个批次的热点数据添加到缓存中,这时候如果过期时间没

层式结构-时间轮

Tech

后端开发常见层式结构:时间轮、跳表、LSM-Tree 海量并发的定时任务:时间轮 高并发读写的有序结构组织:跳表 空间利用率以及写性能高的磁盘数据组织:LSM-Tree 什么是层式结构(GPT):层式结构(Layered Structure)在计算机科学和软件工程中通常指的是将系统分成若干层次,每个层次负责不同的功能和任务。这样设计的好处是可以将复杂系统的不同部分进行解耦和模块化,从而提高系统的可维护性、可扩展性和可理解性。 时间轮 单层级时间轮 定时任务是用时间轮进行实现的,那么它是如何去组织数据的呢? 一个格子代表一个时刻 一个格子可存储多个任务 按执行顺序组织数据 多层级时间轮 按照任务的轻重缓急来进行层次划分的,当我们的任务是在秒这个单位下需要执行的,那么只需要放在前60秒即可,那么如果任务是分、时单位下,那么只需要放在对应的层级即可。对比单层级时间轮,多层级时间轮

Redis的数据结构

Tech

本篇文章主要介绍Redis数据类型,具体实现的数据结构 前言 🚀 内容来自参考自Redis设计与实现 ⚠️ 本篇文章主要介绍Redis3.0的数据结构,在Redis7.0数据类型与数据结构的关系有所不一致。 介绍逻辑 数据结构的定义 字段的解释 特性 介绍内容 简单动态字符串 链表 字典 跳跃表 整数集合 压缩列表 简单动态字符串 数据结构的定义 字段的解释 free属性的值,记录SDS存在多少未使用的空间 len属性,记录SDS保存多少字节长度的字符串 特性 常数复杂度获取字符串长度 杜绝缓冲区溢出问题,SDS在执行修改增加操作的时候,API会检查是否满足要求,如果不满足会自动扩容 减少修改字符串时带来的内存重分配次数,空间预分配会额外分配空间、惰性空间释放在缩短操作时,利用free属性记录数量,等待使用。 链表 数据结构的定义 由ListNode和L

二叉搜索树 🌲 🔍

Tech

BinarySearchTree定义 二叉搜索树是二叉树的一种。 任意一个节点的值都大于其左子树所有节点的值。 任意一个节点的值都小于其右子树所有节点的值。 它的左右子树也是一颗二叉搜索树。 设计一颗二叉树 树中节点的设计 节点的值 左孩子 右孩子 当前节点的父节点 判断当前节点是否为叶子节点 判断当前节点度是否为2 public class Node { public int element; // 值 public Node left; // 左孩子 public Node right; // 右孩子 public Node parent; // 父节点 /** * 必须传入当前节点的值以及父节点 * @param element * @param pare

2023总结🏃

Thought

主旋律:回想2023一整年应该都是备考 ➕ 实习以及匆忙的校园生活 一些 2023过年期间和朋友自驾游去了一趟广西桂林🙅(其实是陪朋友去找他女朋友)参观一些风景区没太多印象了,有意思的其实是和朋友一起在车上又冷又塞车通宵赶回家。 过完年就回学校备考了,和一位玩的很好的朋友约定每天三点一线的备考,每天约定俗成的在宿舍门口汇合,吃早餐...计划着要赶在学生下课之前去吃饭。 期间还在去图书馆的路上选一个棵树记录它能不能在考试前长出来🌲,很快就迎来了考试。 在第一门💥的情况下,也迎来了两天考试睡眠一共不足4个小时,而周一立马就去实习了毫无喘息... 实习😈 在备考期间学校恰好举行了招聘会,于是抽出半天时间想着能不能碰一碰运气,现在回想23届的校招可以说是地狱级难度(希望25届不要!)当时刷牛客的时候不少23届的同学都在抱怨。 然后在招聘会现场随便走了一圈,开发岗位少的可怜。抱着来