PJF
  • Home
  • Archives
  • Categories
  • Tags
  • About

Redis与MySQL缓存双写一致性问题

先来看一些常见的面试题 读写缓存 我们的读写缓存分为两种情况 同步直写缓存策略:完成第二部立即回写Redis 异步缓写缓存策略:不急立即写回Redis 正常业务运行中,MySQL数据变动了,但是可以在业务上容许出现一定时间后才作用于Redis,比如仓库、物流系统 异常情况出现了,不得不将失败的动作重新修补,有可能需要借助kafka或者RabbitMQ等消息中间件,实现重试重写 那么代码应
2023-12-26

Redis集群

定义由于数据量过大,单个Master复制集难以承担,因此需要对多个复制集进行集群,形成水平扩展每个复制集只负责存储整个数据集的一部分,这就是Redis的集群,其作用是提供在多个Redis节点间共享数据的程序集 架构图: 特点: Redis集群支持多个Master,每个Master又可以挂载多个Slave 由于Cluster自带Sentinel的故障转移机制,内置了高可用的支持,无需再去使用哨
2023-12-23

雪花算法

概念snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5个bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID),最后还有一个符号位,永远是0。 这个算法单机每秒内理论上最多可以生成1000*(2^12),也就是409.6万
2023-12-16

DDIA

数据系统基础可靠性、可扩展性、可维护性现今很多应用程序都是数据密集型,CPU很少成为这类应用的瓶颈,更大的问题来自是数据量、数据复杂性以及数据的变更速度。 数据密集型应用通常由标准组件构建而成,标准组件提供了很多通用的功能;例如,许多应 用程序都需要: 数据库(database) 存储数据,以便自己或其他应用程序之后能再次找到 缓存(cache) 记住开销昂贵操作的结果,加快读取速度 搜
2023-12-13

Redis缓存淘汰策略

先来看一些常见问题 默认内存大小如果不设置最大内存大小或者设置最大内存大小为0,在64位操作系统下不限制内存大小,在32位操作系统下最多使用3GB内存,在64bit系统下,maxmemory设置为0表示不限制Redis内存使用,在生产中,推荐Redis设置内存为最大物理内存的四分之三 三种不同的删除策略 立即删除:对CPU不友好,用处理器性能换取存储空间 惰性删除:对memory不友好,用
2023-10-25

Redis五大类型源码及底层实现

涉及到的底层实现总览 通过上图可知,key一般都是String类型的字符串对象, 而value类型则为redis对象(redisObject) 10大类型说明(粗分)传统的5大类型 String Hash list set zset 新介绍的5大类型 bitmap —实质String hyperLoglog — 实质String GEO — 实质Zset Stream — 实质Strea
2023-10-25

Redis分布式锁进阶

条件与刚需一个靠谱的分布式锁需要具备的条件和刚需 独占性 高可用 防死锁 不乱抢 重入性 Lua脚本在我们redis中,判断分布式锁的K-V中,K是业务相关的锁名称,可以随意,而V是跟线程有关的ID,因为我们del 删除K的时候要判断是不是当前线程加的,不能删除别的线程加的锁(不能误删),所以我们在删除K的时候会判断V是不是当前线程自己的,而在高并发多线程的情况下,判断和删除不是原子性的,因为
2023-10-23

Redis BigKey问题

先来一张问题表 新闻 经过测试,使用 keys * 100W条数据也要花费16-30S,那么Redis单线程会阻塞其他命令 生产上限制key * / flushdb /flushall等危险命令解决: redis.conf在security这一项中配置禁用上述命令 123rename- command keys ""rename- command flu
2023-10-22

线程池源码剖析

使用我们 JDK 中提供了一些封装好的线程池提供直接使用,比如 newFixedThreadPool:返回一个核心线程数为 nThreads 的线程池 1234public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThre
2023-10-12

SPI

SPI是什么SPI 全称 Service Provider Interface ,是 Java 提供的一套用来被第三方实现或者扩展的 API,它可以用来启用框架扩展和替换组件。 Java SPI实际上是基于接口+策略模式+配置文件组合实现的动态加载机制 Java SPI 就是提供这样的一个机制:为某个接口寻找服务实现的机制。 将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要。 所以 S
2023-10-11
12345

Search

Hexo Fluid