自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(148)
  • 论坛 (5)
  • 问答 (1)

原创 缓存击穿策略singleFlight

简介缓存击穿:缓存失效时,有大量并发请求过来。大量请求从缓存上拿不到数据,请求压力全部打到数据库上。场景1:活动结束前。为了完成活动任务,请求活动配置数据请求一般会有爆发性增长。当你的服务没有做防止缓存击穿的话,就有可能让你的数据库宕机singleFlight包singleFlight会将对同一个key的所有请求,变成一个请求,所有请求共享一个请求返回的数据。场景:活动尾声大量并发请求获取活动配置数据。设置该活动key为activity_key,所有请求都会开个goroutine处理。所有请求都通

2020-09-16 16:17:26 7

原创 MySQL 用户临时表

临时表 VS 内存表内存表,指的是使用Memory引擎的表,建表语法:CREATE TABLE … ENGINE=Memory。所有数据都保存在内存中,系统重启时被清空,但表结构还在临时表,可以使用各种引擎如果使用的是InnoDB或者MyISAM引擎,数据需要写到磁盘上当然也可以使用Memory引擎特征session Asession BCREATE TEMPORARY TABLE t(c int) ENGINE=MyISAM;(创建临时表)SHOW CR

2020-07-31 15:45:15 39

原创 MySQL 内部临时表

UNIONUNION语义:取两个子查询结果的并集,重复的行只保留一行表初始化CREATE TABLE t1(id INT PRIMARY KEY, a INT, b INT, INDEX(a));DELIMITER ;;CREATE PROCEDURE idata()BEGIN DECLARE i INT; SET i=1; WHILE (i<= 1000) DO INSERT INTO t1 VALUES (i,i,i); SET

2020-07-30 12:02:48 44

原创 MySQL Memory引擎

数据组织表初始化CREATE TABLE t1 (id INT PRIMARY KEY, c INT) ENGINE=Memory;CREATE TABLE t2 (id INT PRIMARY KEY, c INT) ENGINE=InnoDB;INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(0,0);INSERT INTO t2 VALUES (1,1),(2,2),(3,3),(4,4)

2020-07-28 18:15:25 35

原创 MYSQL 自增主键

自增不连续表初始化CREATE TABLE `t` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `c` INT(11) DEFAULT NULL, `d` INT(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `c` (`c`)) ENGINE=InnoDB;```## 自增值```goINSERT INTO t VALUES (null,1,1);-- AUTO_INCREMEN

2020-07-27 12:38:52 26

原创 MySQL INSERT语句的锁

INSERT…SELECT表初始化CREATE TABLE `t` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `c` INT(11) DEFAULT NULL, `d` INT(11) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `c` (`c`)) ENGINE=InnoDB;INSERT INTO t VALUES (null,1,1);INSERT INTO t VALUES (null

2020-07-22 21:40:45 49

原创 MySQL拷贝表

初始化CREATE DATABASE db1;USE db1;CREATE TABLE t(id INT PRIMARY KEY, a INT, b INT, INDEX(a)) ENGINE=InnoDB;DELIMITER ;;CREATE PROCEDURE idata()BEGIN DECLARE i INT; SET i=1; WHILE (i <= 1000) DO INSERT INTO t VALUES (i,i,i);

2020-07-22 17:36:30 34

原创 nsq TCPServer(一)

TCPServerfunc TCPServer(listener net.Listener, handler TCPHandler, logf lg.AppLogFunc) error { //listener是在nsqd New的时候创建的 logf(lg.INFO, "TCP: listening on %s", listener.Addr()) var wg sync.WaitGroup for { clientConn, err := listener.Accept() if

2020-07-22 12:06:16 28

原创 nsqd New函数

func New(opts *Options) (*NSQD, error) { var err error dataPath := opts.DataPath //从datapath读路径 if opts.DataPath == "" { cwd, _ := os.Getwd()//没有配置默认在当前目录 dataPath = cwd } if opts.Logger == nil { opts.Logger = log.New(os.Stderr, opts.LogPrefix,

2020-07-21 21:40:44 23

原创 nsqd Main函数

源码func (n *NSQD) Main() error { ctx := &context{n} exitCh := make(chan error)//退出chan 无缓存的 var once sync.Once exitFunc := func(err error) {//定义退出函数 once.Do(func() {//once 保证只执行一次 if err != nil { n.logf(LOG_FATAL, "%s", err) } exitC

2020-07-21 20:48:51 26

原创 nsq Message定义

源码const ( MsgIDLength = 16 minValidMsgLength = MsgIDLength + 8 + 2 // Timestamp + Attempts)type MessageID [MsgIDLength]bytetype Message struct { ID MessageID//长度为16的byte数组 Body []byte //消息体 Timestamp int64 //msg生成的时间戳 Attempt

2020-07-21 17:25:52 47

原创 MySQL权限

创建用户CREATE USER 'ua'@'%' IDENTIFIED BY 'pa';用户名+地址才表示一个用户,ua@ip1和ua@ip2代表的是两个不同的用户在磁盘上,往mysql.user表里插入一行,由于没有指定权限,所有表示权限的字段都是N在内存里,往数组acl_users里插入一个acl_user对象,该对象的access字段的值为0mysql> SELECT * FROM mysql.user WHERE user = 'ua'\G;******************

2020-07-21 12:05:59 36

原创 MySQL分区表

表初始化CREATE TABLE `t` ( `ftime` DATETIME NOT NULL, `c` int(11) DEFAULT NULL, KEY (`ftime`)) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY RANGE (YEAR(ftime)) (PARTITION p_2017 VALUES LESS THAN (2017) ENGINE = InnoDB, PARTITION p_20

2020-07-20 22:04:27 33

原创 MySQL 自增ID耗尽

显示定义ID表定义的自增值ID达到上限后,在申请下一个ID时,得到的值保持不变-- (2^32-1) = 4,294,967,295-- 建议使用 BIGINT UNSIGNEDCREATE TABLE t (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY) AUTO_INCREMENT=4294967295;INSERT INTO t VALUES (null);-- AUTO_INCREMENT没有改变mysql> SHOW CREATE TA

2020-07-20 21:01:31 72

原创 MySQL -- 空间回收

InnoDB的物理存储InnoDB表的组成:表结构(frm)+数据(ibd)MySQL 8.0开始,允许将表结构定义(占用空间很小)放在系统数据表中控制参数innodb_file_per_tableON:每个InnoDB表数据存储在一个以.ibd为后缀的文件中,推荐。更容易管理,DROP TABLE会直接删除这个文件OFF:InnoDB表数据存储在共享表空间,DROP TABLE,空间也是不会回收的SHOW VARIABLES LIKE '%innodb_file_per_table%

2020-07-20 10:01:33 43

原创 nsqd启动加载历史数据LoadMetadata

func (n *NSQD) LoadMetadata() error { atomic.StoreInt32(&n.isLoading, 1)//函数开始 原子写入n.isLoading为1 defer atomic.StoreInt32(&n.isLoading, 0)//函数退出时 原子写入 n.isLoading为0 fn := newMetadataFile(n.getOpts())//从n的opt里面拿出data-path 历史数据的文件目录地址 data, err

2020-07-16 21:34:25 34

原创 NSQ简介(一)

NSQ组件nsqd是一个守护进程,负责接收,排队,投递消息给客户端。它可以独立运行,不过通常它是由 nsqlookupd 实例所在集群配置的(它在这能声明 topics 和 channels,以便大家能找到)。它在 2 个 TCP 端口监听,一个给客户端,另一个是 HTTP API。同时,它也能在第三个端口监听 HTTPS。nsqlookupd 是守护进程负责管理拓扑信息。客户端通过查询 nsqlookupd 来发现指定话题(topic)的生产者,并且 nsqd 节点广播话题(topic)和通道(

2020-07-16 21:14:03 74

原创 mysql幻读

表初始化CREATE TABLE `t` ( `id` INT(11) NOT NULL, `c` INT(11) DEFAULT NULL, `d` INT(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `c` (`c`)) ENGINE=InnoDB;INSERT INTO t VALUES (0,0,0),(5,5,5),(10,10,10),(15,15,15),(20,20,20),(25,25,25);定义与

2020-07-16 18:07:36 35

原创 nsq初始化读取config函数

var cfg config configFile := flagSet.Lookup("config").Value.String()//config的值是toml文件的地址。 if configFile != "" { _, err := toml.DecodeFile(configFile, &cfg)//将toml文件中配置decode成元数据 if err != nil { logFatal("failed to load config file %s - %s", co

2020-07-14 21:01:36 32

原创 nsq命令行参数解析

源码PS:这篇的目的是熟悉nsq的配置参数顺带说一下命令行解析func nsqdFlagSet(opts *nsqd.Options) *flag.FlagSet { flagSet := flag.NewFlagSet("nsqd", flag.ExitOnError)//返回一个带有错误处理的 空的flag set。 // basic options flagSet.Bool("version", false, "print version string")//以下类似的函数都是 nam

2020-07-14 10:01:31 62

原创 nsqd ID基于MD5的实现

nsqd 源码部分hostname, err := os.Hostname()h := md5.New()io.WriteString(h, hostname) defaultID := int64(crc32.ChecksumIEEE(h.Sum(nil)) % 1024)将hostname进行md5 hash后 通过循环冗余校验后对1024取余,表名id在1024以内唯一。ChecksumIEEE(data []byte) uint32go md5的实现md5是属于hash算法,g

2020-07-13 21:24:41 37

原创 redis的适用场景与不适用场景

redis适用啥场景、缓存,毫无疑问这是Redis当今最为人熟知的使用场景。再提升服务器性能方面非常有效;排行榜,如果使用传统的关系型数据库来做这个事儿,非常的麻烦,而利用Redis的SortSet数据结构能够非常方便搞定;计算器/限速器,利用Redis中原子性的自增操作,我们可以统计类似用户点赞数、用户访问数等,这类操作如果用MySQL,频繁的读写会带来相当大的压力;限速器比较典型的使用场景是限制某个用户访问某个API的频率,常用的有抢购时,防止用户疯狂点击带来不必要的压力;好友关系,利用集合的

2020-05-14 18:08:20 375

原创 redis选择单线程模型笔记

PS:redis在4.0前使用的是单线程模型,redis4.0后 选择性 的使用多线程模型。概述提出2个问题:为什么 Redis 在最初的版本中选择单线程模型?为什么 Redis 在 4.0 之后的版本中加入了多线程的支持?Redis 作为一个内存服务器,它需要处理很多来自外部的网络请求,它使用 I/O 多路复用机制同时监听多个文件描述符的可读和可写状态,一旦受到网络请求就会在内存中快速处理,由于绝大多数的操作都是纯内存的,所以处理的速度会非常地快。在 Redis 4.0 之后的版本,情况就

2020-05-14 17:17:49 50

原创 go-redis库使用笔记

安装go get -u github.com/go-redis/redis连接普通连接func NewClient() (c *redis.Client, err error) { c = redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, }) _, err = c.Ping().Result() if err != nil { retur

2020-05-14 12:10:43 242

原创 https建立连接原理笔记

建立https连接TCP协议–通信双方通过三次握手建立tcp连接TLS(transport layer security)协议–通信双方通过四次握手建立TLS连接HTTP协议–client向server发起request,server发挥responsePS:以下笔记只针对tls1.2TCPtcp三次握手建立连接客户端向服务端发送带有 SYN 的数据段以及客户端开始发送数据段(Segment)的初始序列号 SEQ = 100服务端收到数据段时,向客户端发送带有 SYN 和 ACK 的数

2020-05-13 18:30:39 108

原创 Go编译器原理笔记

阶段前端(frontend):对源码进行分析,生成AST源代码语法结构物。后端(backend):将源代码转换为机器码,并进行优化。1. parsing2. AST transformation3. SSA generation4. machine code generationexample go1.14.0package mainfunc main() { a := 1 b := 2 if true { add(a, b) }}

2020-05-12 11:32:14 63

原创 golang context笔记

contexttype Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key interface{}) interface{}}Deadline:返回的第一个值是 截止时间,到了这个时间点,Co...

2020-05-08 15:17:02 49

原创 转发了解一下规则引擎

1、再见了 ! if-else !拥抱规则引擎 链接2、规则引擎的原理与功能 链接3、规则引擎——Drools 链接4、Drools中文网 链接

2019-08-23 15:52:24 110

原创 为什么我只查一行的语句,也执行这么慢?读后总结

sql执行慢的常见原因:mysql压力大,CPU占用率高,IO利用率高。这不属于今天讨论的范围。造表与造数据的语句mysql> CREATE TABLE t (id int(11) NOT NULL,c int(11) DEFAULT NULL,PRIMARY KEY (id)) ENGINE=InnoDB;delimiter ;;create procedure idata...

2019-08-23 09:40:39 146

原创 转发Elastic Search 的原理和使用

1、Elasticsearch-基础介绍及索引原理分析 链接2、基于 Go 和 Elasticsearch 构建一个搜索服务 链接3、用容器快速上手Elasticsearch 链接

2019-08-22 12:21:23 87

原创 为什么这些sql语句逻辑相同,性能却差异巨大读后总结

1.条件字段函数操作例子有一张日志表,查询 指定年限7月的记录总数mysql> CREATE TABLE tradelog (id int(11) NOT NULL,tradeid varchar(32) DEFAULT NULL,operator int(11) DEFAULT NULL,t_modified datetime DEFAULT NULL,PRIMARY KEY...

2019-08-22 09:23:01 149

原创 如何正确地显示随机消息?读后总结

背景:有个单词表,随机显示3个单词建表语句与初始化语句mysql> CREATE TABLE words (id int(11) NOT NULL AUTO_INCREMENT,word varchar(64) DEFAULT NULL,PRIMARY KEY (id)) ENGINE=InnoDB;delimiter ;;create procedure idata()b...

2019-08-21 10:23:05 129

原创 转发 Elastic Search 和 Solr 你用哪个?

1、搜索引擎选择: Elasticsearch与Solr 链接2、ElasticSearch(ES)和solr的关系和区别 链接3、[译]ElasticSearch vs. Solr 链接4、全文搜索引擎 Elasticsearch 入门教程 链接...

2019-08-20 11:52:58 65

原创 order by 是怎么工作的?读后总结

order by 排序的两种模式全字段排序我们一般用explain命令查看sql是否使用排序。一般查看extra字段的描述。mysql会为每个线程分配一块内存用于排序 称为sort_buffer我们以这条sql查询为例select city,name,age from t where city=‘sz’ order by name limit 1000首先将满足条件的记录中的city...

2019-08-20 10:42:04 71

原创 普通索引与唯一索引,应该怎么选择?读后总结

在业务代码已经保证了不会写入重复的字段,那么尽量使用普通索引普通索引与唯一索引对比:在查询过程select id from t where k=5;从这条查询语句开始分析,分别分析k为普通索引时与唯一索引是的区别普通索引:在查到满足条件的记录,还需要继续往下查找。这里就用到了之前说的假设,业务已经保证了不会写入重复字段,否则查询次数与重复记录成线性增长。但是若不重复的情况。也就比唯一索引多...

2019-08-19 20:06:19 70

原创 答疑文章(一):日志与索引相关问题读后总结

日志相关的问题:mysql 利用 binlog与redo log做 崩溃恢复。mysql利用了二阶段提交维护了主备数据一致性(PS:对mysql的崩溃恢复,以及异常数据恢复不是一样的情况需要注意)两阶段提交:取ID=2这一行 =》判断数据页是否在内存中,不在就从磁盘中读入内存中返回数据。=》将这一行的c值加1,写入新行=》新行更新到内存=》写入redo log处于prepare阶段。=》写...

2019-08-19 18:05:53 68

原创 count()这么慢,我该怎么办读后总结

计算一个表的行数语句:select count(*) from t;innodb中这条语句的查询时间会随着表记录增加而增加。count()是实现方式count()是在引擎层面实现的,不同的引擎有不同的实现。1.MYISAM是将表的总行数存在磁盘上。count()会直接返回这个值,很高效,但是如果加上了where条件,也需要遍历。2.Innodb在执行count()的时候需要一行一行从引...

2019-08-19 10:04:17 1592

原创 为什么表数据删除一半,表文件大小不变?读后总结

现象:删除了表数据,但是表文件大小不变针对的引擎是innodb表数据既可以放在共享表空间里,也可以是单独的文件。由innodb_file_per_table控制。off为将表数据放在系统共享表空间,on将表数据存储在一个.ibd为后缀的文件中。建议是将innodb_file_per_table设置为on。数据删除流程innodb数据是由b+树组织的,当我们删除某一条记录,引擎只将标记该...

2019-08-16 10:52:46 190

原创 为什么我的mysql会抖一下读后总结

“抖”:sql执行变慢了,随机出现,持续时间短。刷脏页的原因:innodb在更新数据的时候,更新内存,写redo log,(并没有将内存数据页同步到磁盘上)。这里引出两个概念:脏页 内存页与磁盘页数据不一致的内存页干净页 内存页与磁盘页数据一致的内存页flush脏页就是将内存页的数据更新到磁盘刷脏页的触发时机:redo log 写满了。flush脏页。内存不足,淘汰数据页,...

2019-08-15 19:16:25 78

原创 194. Transpose File

翻转输入 输入 name age alice 21 ryan 30 输出 name alice ryan age 21 30awk '{for(i = 1; i <= NF; i++){if(NR == 1){a[i]=$i}else{a[i]=(a[i]" "$i)}}}END{for(i in a){print a[i]}}' file.txtPS: awk中字符串连接用”“连接

2018-05-08 17:44:15 186

空空如也

centos7 命令行下安装中文包出现如下问题

发表于 2016-07-24 最后回复 2020-03-06

关于操作系统的问题

发表于 2016-05-09 最后回复 2016-07-24

c++中的运算符优先级问题求详解

发表于 2016-04-05 最后回复 2016-04-05

STL中对于函数适配器的小问题 成员函数适配器mem_fun和mem_fun_ref

发表于 2016-03-05 最后回复 2016-04-05

对于c++引用概念的疑惑 江湖救急

发表于 2016-03-06 最后回复 2016-03-07

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