自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

偷懒程序员小彭的博客

带你深入源码,最网最细节的博主

  • 博客(17)
  • 收藏
  • 关注

原创 性能优化:你该如何去做!

前言最近在面试中经常碰到别人讲性能优化问题,最近也终于也沉下心来,来写写关于性能优化的事情。写性能问题我想从几个方面去写,第一,怎么去发现性能问题,第二,性能优化的手段。怎么去发现性能问题首先先举一个例子,前公司有这么个场景,我们需要做一个监控异常数据的场景,输入数据大概是一批业务数据,然后拿输入的数据跟我现有的库中的数据做个1:n的比较。而输入数据的来源是我们接入的摄像头,然后我们会针对这些摄像头去建立异常监控的任务...

2021-08-16 14:26:57 381 1

原创 redis系列,aof持久化,你不知道的一些秘密!深度源码剖析

文章目录本人 github 地址本篇文章看点aof的触发bgsave的主流程为什么要fork子进程而不是用子线程去做rdb保存数据到file的流程总结本人 github 地址github 地址 里面有注释好的代码,下载下来可以方便阅读。本篇文章看点aof什么时候触发。aof的各种磁盘策略是如何执行的。什么aof的rewrite。rewrite又到底是怎么做了什么。aof的触发上一篇我们讲了rdb,大致的了解了rdb是什么样的一个持久化的方式,但是为什么有了rdb的机制还要引入aof

2020-12-20 18:17:46 1575 4

原创 redis系列,rdb为什么要这么做?深度剖析

文章目录本人 github 地址本篇文章看点本人 github 地址github 地址 里面有注释好的代码,下载下来可以方便阅读。本篇文章看点rdb什么时候执行,条件是如何触发。rdb为什么用子进程而不是线程。什么是copy on write为什么是fork而不是其它rdb的触发条件...

2020-12-04 14:38:35 2692 9

原创 平常coding系列:记一次关于死锁的思考以及解决办法

文章目录github 地址问题描述死锁发生的原因死锁解决方案死锁之外的情况声明式事务失效总结github 地址github 地址 里面有注释好的代码,下载下来可以方便阅读。问题描述近期写项目的时候,遇到一个bug,情况大概是这样子,我们有个数据流系统会把识别出来的车牌不断的上报,需要把上报的车牌信息做如下的处理记录的车牌记录给保存在车辆档案表里面。调用第三方案件系统,是否生成新的案件。如果生成新的案件,更新案件数。下面大概是这个表的结构#mermaid-svg-R8s5UHQulO

2020-11-21 14:54:56 1815 9

原创 redis系列,zset到底是个什么鬼(一)!深度源码剖析

文章目录本人 github 地址本篇文章看点zset 的结构add操作源码解析本人 github 地址github 地址 里面有注释好的代码,下载下来可以方便阅读。本篇文章看点如果你对zset的结构仍然有疑问,请认真看本篇文章如果面试官问你zset到底增加节点和删除节点都是如何操作的,你觉得你回答不出来或者不够清晰,请认真看本篇文章如果你是redis源码爱好者,请认真看本篇文章。如果你立志做一个肚里有货的程序员,请认真看本篇文章。本篇文章会深度剖析跳表的add操作,不放过任何一行代码,

2020-11-16 17:56:08 2612 3

原创 redis系列,bitmap 命令全解析以及源码赏析

文章目录本人 github 地址前言怎样求一个二进制串里面有多少个1本人 github 地址github 地址 里面有注释好的代码,下载下来可以方便阅读。前言由于这周工作关系,没有太多事件阅读太多源码,但是项目常常提到一些用到bitmap的场景,这次我们来把redis 的bit操作命令一网打尽怎样求一个二进制串里面有多少个1用到下面这个算法,必须为2的次方,如果不为2的次方的话可以通过下面redis这种方式来处理首先我们举一个8位的数,如 11011000。我们可以用肉眼方式知道结果为4,

2020-11-08 22:51:27 2738 6

原创 redis系列,你真的了解scan命令吗

文章目录前言scan 命令用法前言上章我们讲解了字典的结构,今天我们来讲讲跟我们日常用得比较多的命令:scanscan 命令用法

2020-10-31 11:47:32 2120 2

原创 redis系列,给你看最完整的字典讲解

非常详细的redis 字典的讲解,字典的结构是如何,如何做rehash,什么是渐进式hash

2020-10-24 20:11:26 513 2

原创 redis系列,redis是如何执行命令(一)

文章目录前言一、从io读取数据二、解析buf数据三、解析命令流程总结前言上篇文章介绍了sds的结构,和sds的使用方法,这章我们在回到读取io数据的地方来看,redis是如何从io 读取数据最后转化成执行命令的过程。本篇文章需要先熟悉前面两篇文章,没看的同学需要退回看一下。redis系列,redis网络,你得知道的一些事.一、从io读取数据在网络这个章节我们知道,我们知道通过把客户端对应fd注册到epoll,当有数据可读的时候最后会调用到以下这个方法//这里开始看怎么从client 客户端

2020-10-22 17:32:50 2037 3

原创 java synchronized你得知道的几件事?

本文要点本文主要讲的是synchronized 锁膨胀的原理,会从源代码上面向大家展开锁膨胀的逻辑和从源代码上面来推敲设计者为什么要这样做。synchronized 源码分析synchronized是如何触发的在源码分析前首先看如下代码:public class SyncDemo { public static void main(String[] args) { SyncDemo syncDemo = new SyncDemo(); synchroni

2021-12-26 20:31:22 411

原创 redis 系列,要懂redis,首先得看懂sds(全网最细节的sds讲解)

文章目录前言一、sds的结构sds的定义sds的初始化sds 图解sds 扩容前言上篇文章我们分析了redis如何通过监听端口,获取到客户端传过来的数据,本篇文章会讲到redis里面用到的最基础的数据类型sds,它相比较于普通string有什么不同了,废话不多说,下面正式进入主题一、sds的结构sds的定义sds.h//定义了一个char 指针typedef char *sds;/* Note: sdshdr5 is never used, we just access the..

2020-10-15 16:26:45 10650 14

原创 redis系列,redis网络,你得知道的一些事

文章目录前言基础网络知识redis的监听于地址绑定redis 的网络监听事件配置epoll的使用总结redis 的网络监听事件初始化客户端连接的read handler处理流程读客户端连接数据的handler处理流程总结:读源码小技巧分享下篇文章预告前言上篇文章研究了redis的多线程io,本篇文章将讲一下redis的网络架构,来揭秘redis接收数据的全过程基础网络知识再具体研究redis的代码之前,我们得首先有一个大体的服务器如何收到客户端发送的全过程。因为redis 主要是用tcp..

2020-10-09 09:34:34 4131 12

原创 redis系列,redis6.0多线程解密!

文章目录前言io 多线程初识io多线程的读:io多线程的写:多线程io的配置详细注释io 多线程深入io多线程的初始化io多线程的处理io多线程的触发和停止总结前言redis 6.0推出,听大家谈论得最多就是redis 变成多线程了,这到底是怎么回事,本文会给你全网最详细的多线程讲解,从多线程初始化,到多线程是如何应用,以及你该如何去配置多线程,本文会给出最详细的讲解。io 多线程初识redis 多线程指的是redis 6.0的io 多线程特性,为了避免歧义,首先得说在redis6.0之前并..

2020-09-26 22:52:17 1722 3

原创 redis系列,redis的异步删除我该怎么用?

文章目录前言unlink 一个拯救性能的英雄?小结使用建议相关redis 异步删除配置建议性能测试总结:前言redis 在4.0之后就推出了异步删除,其中相关的最直接的命令就是unlink, 那如何去用unlink,它是否能够取代del 命令,我们从源码层面,来好好的剖析一下,阅读下面文章之前,我们先怀着以下几个疑问去看。异步删除会存在并发问题吗?它是怎么解决并发问题的?为什么要异步删除?unlink 一个拯救性能的英雄?我们话不多说,先来直接上最核心的代码unlink 入口代码..

2020-09-21 20:47:24 2080 2

原创 redis系列,键过期的知识你要知道的全在这里完结篇(二)

文章目录前言过期键清理相关策略被动清理前言即上篇文章介绍的跟过期相关的命令,以及整个过期键的存储过程,这篇文章可以说是过期键的终极篇,主要讲过期键的管理策略过期键清理相关策略过期键清理主要分为两大类1, 被动清理2, 主动清理被动清理redis 本身就是一个key,value的系统即所有的操作都会涉及到对key的操作,即所有对key的操作都可能触发被动清理过期键,即如果发现当前键已经过期,则对该键走过期流程具体我们来看get相关的代码来做一个例子get 的代码方法进入后会调用以下..

2020-09-20 15:18:49 2697 6

原创 redis系列,键过期的知识你要知道的全在这里(一)

文章目录前言一、键过期的相关命令1.对过期有影响的操作2.对过期无影响的操作3.过期命令,和拯救正在过期键的命令4.过期命令相关源码分析前言本文主要全面分析redis如何来设置过期key,跟过期相关的操作,哪些我们认为可能会有影响但实际不会产生影响的操作,以及过期键的处理策略。本文会从源码层面聊到一些其他文章不曾有的部分废话不多说,下面正式进入主题一、键过期的相关命令1.对过期有影响的操作有键覆盖操作的命令如:DEL,SET,GETSE,RENAME, 这里重点说一下set和renam..

2020-09-11 17:35:06 527 1

原创 ziplist vs 普通数组,以及redis hash 在ziplist的实现

ziplist vs 普通数组以及redis hash 在ziplist的实现zipList 特点一般数组的特点:hash的key和value 在ziplist的存储zipList 特点需要连续的内存地址。同时也需要预分配地址。可以存不定长的数据,但是有长度限制。从数组尾巴插入,不会造成数组移位的情况。插入,删除,都有可能造成数组移位,而造成的大量内存copy 的行为,插入,删除平均时间复杂度为O(n), 最差的时间时间复杂度为O(n²)查询效率跟普通数组相同为O(n)ziplist的模型

2020-09-06 23:13:42 960 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除