01 2022 档案
摘要:一、Redis单线程如何处理那么多并发客户端连接,为什么单线程,为什么快 Redis利用epoll来实现IO多路复用,将连接信息和事件放到队列中,一次放到文件事件分派器,事件分派器将事件分发给事件处理器。 Redis 是跑在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或
阅读全文
摘要:一、需求分析 B站视频、淘宝、抖音等短链接。 好处: 简单方便,利与推广 长度短,便于http传输,有助于带宽节约和高并发 防止尾巴参数泄密,不安全 二、架构设计 1、短链接映射算法如何编写? 一个长链接URL转换为4个短KEY: 将长网址 md5 生成32位签名串,分为4段, 每段8个字节; 对这
阅读全文
摘要:一、需求分析 1、各种节假日,发红包+抢红包,100%高并发业务要求,不能用 mysql 来做。 2、一个总的大红包,会有可能拆分成多个小红包,总金额= 分金额1+分金额2+分金额3......分金额N。 3、每个人只能抢一次,你需要有记录,比如100块钱,被拆分成10个红包发出去,总计有10个红包
阅读全文
摘要:一、缓存双写一致性,谈谈你的理解 1、如果redis中有数据 需要和数据库中的值相同 2、如果redis中无数据 数据库中的值要是最新值 二、缓存按照操作来分,细分2种 1、只读缓存 2、读写缓存 同步直写策略:写缓存时也同步写数据库,缓存和数据库中的数据⼀致。如:canal 对于读写缓存来说,要想
阅读全文
摘要:一、认识canal 1、是什么? canal,中文翻译为 水道/管道/沟渠/运河,主要用途是用于 MySQL 数据库增量日志(binlog)数据的订阅、消费和解析,是阿里巴巴开发并开源的,采用Java语言开发; 历史背景是早期阿里巴巴因为杭州和美国双机房部署,存在跨机房数据同步的业务需求,实现方式主
阅读全文
摘要:一、基础 1、redis字典数据库的KV键值对到底是什么? redis 是 key-value 存储系统,其中key类型一般为字符串,value 类型则为redis对象(redisObject)。 从C的的源码分析KV是什么,每个键值对都会有一个dictEntry。 Redis定义了redisObj
阅读全文
摘要:一、默认内存大小 默认在64位操作系统下是不限制内存大小的,在32位操作系统下是3G。 二、推荐设置内存的大小 推荐为最大物理内存的75%。(关键字:HashMap的负载因子默认为0.75) 三、三种过期key的删除策略 当一个key过期了,并不是立即从Redis中删除。而是以下三种方式: 1、立即
阅读全文
摘要:一、什么是缓存续命 Redis 分布式锁过期了,但是业务逻辑还没处理完怎么办? 守护线程续命,额外起一个线程,定期检查线程是否还持有锁,如果有则延长过期时间。Redisson 里面就实现了这个方案,使用 “看门狗” 定期检查(每1/3的锁时间检查1次),如果线程还持有锁,则刷新过期时间。 在获取锁成
阅读全文
摘要:一、单机 1、三个重要元素 (1)加锁 加锁实际上就是在redis中,给Key键设置一个值,为避免死锁,并给定一个过期时间。 (2)解锁 将Key键删除。但也不能乱删,不能说客户端1的请求将客户端2的锁给删除掉,只能自己删除自己的锁 Lua脚本 if redis.call('get',KEYS[1]
阅读全文
摘要:1、基础知识 CAP:C(一致性),A(可用性),P(分区容错) redis单机:CP redis集群:AP zookeeper集群:CP 2、区别 (1)redis集群 redis是高并发性,采用异步通知的方式,当主机宕机时会发现锁丢失,比如:主节点没来的及把刚刚set进来这条数据给从节点,mas
阅读全文
摘要:一、基础知识 1、锁的种类 单机版同一个JVM虚拟机内,synchronized 或者 Lock 接口。 分布式不同个JVM虚拟机内,单机的线程锁机制不再起作用,资源类在不同的服务器之间共享了。 2、分布式锁需要具备的条件和刚需 独占性:OnlyOne,任何时刻只能有且仅有一个线程持有 高可用:若r
阅读全文
摘要:一、基础知识 1、概念 大量的请求同时查询一个 key 时,此时这个key正好失效了,就会导致大量的请求都打到数据库上面去。 简单说就是热点key突然失效了,暴打mysql。 2、危害 会造成某一时刻数据库请求量过大,压力剧增。 3、解决 (1)互斥更新、随机退避、差异失效时间。 互斥更新:缓存两套
阅读全文
摘要:一、(推荐)采用docker安装RedisBloom docker run -p 6379:6379 --name=redis6379bloom -d redislabs/rebloomdocker exec -it redis6379bloom /bin/bashredis-cli 二、编译安装
阅读全文
摘要:一、简介 请求去查询一条记录,先 redis 后 mysql 发现都查询不到该条记录,但是请求每次都会打到数据库上面去,导致后台数据库压力暴增,这种现象我们称为缓存穿透,这个redis变成了一个摆设。 危害: 第一次来查询后,一般我们有回写 redis 机制。第二次来查的时候 redis 就有了,偶
阅读全文
摘要:1、为什么发生 redis主机挂了,Redis 全盘崩溃 比如缓存中有大量数据同时过期 2、解决 redis缓存集群实现高可用(主从+哨兵 或者 redis集群) ehcache本地缓存 + Hystrix或者阿里sentinel限流&降级 开启Redis持久化机制aof/rdb,尽快恢复缓存集群
阅读全文
摘要:一、简介 由一个初值都为零的bit数组和多个哈希函数构成,用来快速判断某个数据是否存在。布隆过滤器是一种类似set的数据结构,只是统计结果不太准确。 为什么存在误差?因为底层由hash函数计算就避免不了“哈希冲突”,采用多个hash函数可以尽量减少误差。 二、特点 1、高效地插入和查询,占用空间少,
阅读全文
摘要:一、简介 GEO是Redis处理地理坐标的数据类型。 地球上的地理位置是使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],只要我们确定一个点的经纬度就可以名曲他在地球的位置。 例如滴滴打车,最直观的操作就是实时记录更新各个车的位置,然后当我们要找车时,在数据库中查
阅读全文
摘要:一、基础知识 1、常见名词 UV:Unique Visitor,独立访客,一般理解为客户端IP。需要去重。 PV:Page View,页面浏览量。不用去重。 DAU:Daily Active User,日活跃用户量。常用于反映网站、互联网应用或者网络游戏的运营情况。 MAU:MonthIy Acti
阅读全文
摘要:一、基础知识 1、概念 说明:用String类型作为底层数据结构实现的一种统计二值状态的数据类型位图(bitmap)本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们可以称之为一个索引或者位格)。Bitmap支持的最大位数是2^32位,
阅读全文
摘要:一、String(字符类型) 1、常见命令 2、应用场景 阅读数:只要点击了地址,直接可以使用incr key 命令增加一个数字1,完成记录数字。 二、Hash(散列类型) 1、常见命令 2、应用场景 用于存储对象 三、List(列表类型) 1、常见命令 2、应用场景 (1)微信公众号订阅的消息。例
阅读全文
摘要:一、下载mysql 下载mysql源安装包 wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm 安装mysql源 yum localinstall mysql57-community-release-el
阅读全文
摘要:一、Redis的历史 Redis的版本很多3.x、4.x、6.x,版本不同架构也是不同的: (1)版本3.x ,redis是单线程。 (2)版本4.x,严格意义来说也不是单线程,而是负责处理客户端请求的线程是单线程,但是开始加了点多线程的东西(异步删除)。——貌似 (3)最新版本的6.0.x后,告别
阅读全文
摘要:一、读写锁ReentrantReadWriteLock 1、基本概念 读写锁ReentrantReadWriteLock,一个资源能够被多个读线程访问,或者被一个写线程访问,但是不能同时存在读写线程。它并不是真正意义上的读写分离,它只允许读读共存,而读写和写写依然是互斥的。 一个ReentrantR
阅读全文
摘要:一、公平、非公平锁的区别 通过ReentrantLock的源码来讲解公平锁和非公平锁。 公平锁与非公平锁的lock()方法唯一的区别就在于公平锁在获取同步状态时多了一个限制条件:hasQueuedPredecessors(),它是公平锁加锁时判断等待队列中是否存在有效节点的方法。 公平锁:公平锁讲究
阅读全文
摘要:一、什么是AQS 1.1 概念 AbstractQueuedSynchronizer抽象同步队列,其定义了一套多线程访问共享资源的同步器框架,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态。 1.2 基石 很多同步类实现都依赖于AQS,如常用的Reentr
阅读全文
摘要:锁升级的流程:无锁 -> 偏向锁 -> 轻量锁(CAS)-> 重量级锁 一、偏向锁 1.1撤销和升级 1、偏向锁只有遇到其他线程尝试竞争偏向锁时,持有偏向锁的线程才会释放锁,线程是不会主动释放偏向锁的。 2、撤销需要等待全局安全点(该时间点上没有字节码正在执行),同时检查持有偏向锁的线程是否还在执行
阅读全文
摘要:一、对象的构成 二、对象头 对象头的大小,在64位系统中,Mark Word占了8个字节,类元信息占了8个字节,一共是16个字节。 2.1、对象标记Mark Word 2.2、类元信息Class Pointer 对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。 三、实例数
阅读全文
摘要:一、什么是内存泄露 不再会被使用的对象或者变量占用的内存不能被回收,就是内存泄露。 二、强引用 概念: 当内存不足,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,死都不收。 强引用是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收
阅读全文