<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[fansenjun的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/fansenjun</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; fansenjun]]></copyright><item><title><![CDATA[Redis支撑秒杀场景应用]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/113605040</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/113605040</guid><author>fansenjun</author><pubDate>Wed, 03 Feb 2021 15:49:42 +0800</pubDate><description><![CDATA[秒杀是一个非常典型的常见，比如像双11，618这样的网络购物节，一些平台会提供限时限量的是商品，而且这些商品也是物美价廉，吸引大量的用户，redis经常用于这种秒杀场景

我们先来谈谈秒杀场景的特点对支持系统的要求

秒杀场景的特点及redis对秒杀场景的支持

瞬时并发访问量非常高
秒杀最明显的特哥特点就是瞬时访问量巨大，对于数据来说，所能够支撑的访问量也就是每秒千级别，而redis本身的特点就是高性能的读写，可以处理每秒万级别的请求，甚至更高。所以我们可以使用redis拦截绝大部分的请求，这样数据库的压]]></description><category></category></item><item><title><![CDATA[缓存数据库同步策略]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/106214267</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/106214267</guid><author>fansenjun</author><pubDate>Tue, 19 May 2020 15:02:50 +0800</pubDate><description><![CDATA[在我们的项目中，修改数据后，考虑缓存数据更新的及时性，我们可能会采用主动更新缓存的策略。主要有如下几种策略：

先更新缓存，再更新数据库
	先更新数据库，再更新缓存
	先删除缓存，再更新数据库，访问时按需加载数据到缓存中
	先更新数据库，再删除缓存，访问时按需加载数据到缓存中
上面4中策略我们应该怎么选择呢？已下我们就逐一分析这4中策略：

“先更新缓存，再更新数据库” 策略不可行。数据库设计负责，压力集中，数据库因为超时等原因，操作失败的可能性会很大。此外还会涉及到事务，很有可能因为数据库更新失败，导致缓]]></description><category></category></item><item><title><![CDATA[datafaker（大批量生成测试数据）windows安装教程]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/103688499</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/103688499</guid><author>fansenjun</author><pubDate>Tue, 24 Dec 2019 19:46:57 +0800</pubDate><description><![CDATA[当我们开发完成后，可能需要进行压测，压测就需要大量的数据，一般我们采用的方法可能是使用存储过程。但是使用存储过程，就会带来很多不方便的地方，你自己写过就会知道有多不方便。今天介绍的datafaker就让我们轻轻松松创建大批量的测试数据。

下面给出github地址：https://github.com/gangly/datafaker

datafaker使用需要安装python和...]]></description><category></category></item><item><title><![CDATA[git rebase]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/101026299</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/101026299</guid><author>fansenjun</author><pubDate>Thu, 19 Sep 2019 16:18:09 +0800</pubDate><description><![CDATA[gti rebase命令做了什么？

1：先将test分支的代码checkout出来，作为工作目录

2：然后将master分支从test分支创建起的的所有改变的补丁，依次打上。如果打补丁的过程没有遇到问题，rebase就成功了

3：如果在打补丁的过程中出现了冲突。冲突处理好之后，运行git rebase -continue继续直到完成

4：如果不想处理，可以有两种选择。一：直接放弃rebas...]]></description><category></category></item><item><title><![CDATA[使用zookeeper实现分布式队列设计思路]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/100752274</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/100752274</guid><author>fansenjun</author><pubDate>Wed, 11 Sep 2019 23:29:40 +0800</pubDate><description><![CDATA[设计：

使用路径为/queue的znode下的节点表示队列中的元素。/queue下的节点都是顺序持久化的znode。这些znode的名字后缀数字表示了对应队列元素在队列中的位置。znode名字后缀数字越小，对应队列元素在队列中的位置越靠前。如下图所示：



介绍队列操作中的各个方法：

offer方法

向队列中添加一个元素



offer方法在/queue下面创建一个顺序znode。因为z...]]></description><category></category></item><item><title><![CDATA[使用zookeeper实现分布式锁思路]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/100716077</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/100716077</guid><author>fansenjun</author><pubDate>Tue, 10 Sep 2019 23:17:16 +0800</pubDate><description><![CDATA[设计：

使用临时顺序znode来表示获取锁的请求，创建最小后缀数字znode的用户成功拿到锁。



上图中znode为lock，在lock底下保存锁请求，后缀数字最小的可以获得锁，成为锁的持有者。上图中有三个锁请求，从上到下人呗是后缀数字1-3，因为1是最小的，所以可以成为锁的持有者。

避免羊群效应：

把锁请求者按照后缀数字进行排队，后缀数字小的锁请求先获取锁。如果所有的锁请求者都watc...]]></description><category></category></item><item><title><![CDATA[kafka相关术语/名词解释]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/92103172</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/92103172</guid><author>fansenjun</author><pubDate>Sat, 15 Jun 2019 17:30:48 +0800</pubDate><description><![CDATA[kafaka主要的功能就是提供一套完备的消息发布与订阅的解决方案。

主题(Topic)：发布订阅的对象是主题。每个业务，每个消息或者是每类数据都能创建专属的主题。

生产者(Producer)：向主题发布消息的客户端叫做生产者。生产者程序通常持续不断的向一个或者多个主题发送消息。

消费者(Consumer)：订阅这些主题的客户端程序叫做消费者。消费者可以同时订阅多个主题的消息。

客户端(Cl...]]></description><category></category></item><item><title><![CDATA[如何通过Redis实现分布式锁]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/86531812</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/86531812</guid><author>fansenjun</author><pubDate>Mon, 21 Jan 2019 22:50:27 +0800</pubDate><description><![CDATA[分布式锁

分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁的实现

分布式锁需要解决的问题如下：

互斥性
任意时刻只有一个客户端获取锁

安全性
锁只有持有该锁的客户端删除，不能由其他客户端删除

死锁
获取锁的客户端因为某些原因而宕机，而未能释放锁，其他客户端再也不能或得到该锁，而导致死锁，此时需要机制来容错

容错
部分节点，如redis节点宕机的时候，客户端仍然可以获取到锁...]]></description><category></category></item><item><title><![CDATA[Redis常用数据类型]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/86515994</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/86515994</guid><author>fansenjun</author><pubDate>Thu, 17 Jan 2019 21:33:22 +0800</pubDate><description><![CDATA[使用过的redis的数据类型

供用户使用的数据类型：

String：最基本的数据类型，二进制安全
就是我们经常使用的KV键值对，他的值最大可以存储512M。二进制安全：redis的String可以包含任何数据，比如jpg图片，或者是序列化的对象，String支持这么多的数据类型，离不开底层的动态字符串sdshdr



 Hash：String元素组成的字典，适合存储对象
	List：列表，按...]]></description><category></category></item><item><title><![CDATA[Redis简介]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/86499380</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/86499380</guid><author>fansenjun</author><pubDate>Tue, 15 Jan 2019 22:05:58 +0800</pubDate><description><![CDATA[

 一般为了提升性能，会在存储层和客户端之间添加一个缓存层，当客户端向后端发送请求的时候，会先去缓存层查，看看是否有相应的数据，如果有则直接返回，这样就减轻存储层的压力，如果缓存层没有相关数据，才会去到存储层去查询，这就是我们行业里所说的穿透。如果存储层有数据则会将数据返回给缓存层，以便客户端下次请求同样的数据时，可以直接从缓存层取数据，回写的过程就是回种，回种之后将结果返回给客户端，完成一次请...]]></description><category></category></item><item><title><![CDATA[锁模块之MyISAM与InooDB关于锁方面的区别]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/86030044</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/86030044</guid><author>fansenjun</author><pubDate>Tue, 08 Jan 2019 21:32:30 +0800</pubDate><description><![CDATA[锁模块

常见问题：

MyISAM与Innodb关于锁方面的却别是什么
MyISAM默认使用的是表级锁，不支持行级锁
	InnoDBmoren用的是行级锁，也支持表级锁
MyISAM引擎在进行查询的时候，会自动为表加上一个读锁，而对数据进行增删改的时候，会为我们操作的表，加上一个表级别的写锁，当读锁没有被释放，另外一个session想要对同一个表加上写锁，他就会被堵塞，知道所有的读锁被释放位置。...]]></description><category></category></item><item><title><![CDATA[联合索引最左匹配原则的成因+索引为什么不是越多越好]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/86028589</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/86028589</guid><author>fansenjun</author><pubDate>Mon, 07 Jan 2019 21:49:22 +0800</pubDate><description><![CDATA[联合索引

多列组成的索引

最左匹配原则

假设我们有两列a,b，a和b是联合索引，他的顺序是a,b，我们在where语句中调用a=? and b=?的时候就会走联合索引，如果调用where a = ?的时候也会走索引，但是当我们使用where b = ?的时候就不会走这个联合索引



成因：

mysql创建复合索引的规则是首先会对复合索引的最左边，也就是索引中的第一个字段进行排序，在第一个...]]></description><category></category></item><item><title><![CDATA[如何调优sql]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/85720626</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/85720626</guid><author>fansenjun</author><pubDate>Mon, 07 Jan 2019 21:23:54 +0800</pubDate><description><![CDATA[如何定位并优化慢sql

根据慢日志定位慢查询sql
慢日志就是用来记录我们查询比较慢的sql

show variables like %quer%;



11：slow_query_log  off  慢日志关闭

2：slow_query_log_file 文件记录慢日志

3：long_query_time  sql执行多长时间会记录到慢日志文件中

show status like '...]]></description><category></category></item><item><title><![CDATA[密集索引和稀疏索引的区别]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/85647734</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/85647734</guid><author>fansenjun</author><pubDate>Thu, 03 Jan 2019 20:59:43 +0800</pubDate><description><![CDATA[区别

秘籍索引文件中的每个搜索码值都对应一个索引值
	稀疏索引文件只为索引码的某些值建立索引项


密集索引的定义：叶子节点保存的不只是键值，还保存了位于同一行记录里的其他列的信息，由于密集索引决定了表的物理排列顺序，一个表只有一个物理排列顺序，所以一个表只能创建一个密集索引

稀疏索引：叶子节点仅保存了键位信息以及该行数据的地址，有的稀疏索引只保存了键位信息机器主键

mysam存储引擎，不管...]]></description><category></category></item><item><title><![CDATA[数据库-优化索引-hash索引 BitMap索引]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/85641040</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/85641040</guid><author>fansenjun</author><pubDate>Wed, 02 Jan 2019 21:57:32 +0800</pubDate><description><![CDATA[Hash索引

有的数据库存储引擎还支持hash这种数据结构作为其索引，理论上hash索引的索引效率理论上要高于B+树索引

 Hash索引的缺点

仅仅能满足“=”，“in”，不能使用范围查询
由于hash索引比较的是hash运算之后的hash值，所以只能用于等值的过滤，不能用于基于范围的查询，因为经过相应的hash算法处理之后的hash值的大小关系并不能保证与hash运算前的完全一样，比如上图...]]></description><category></category></item><item><title><![CDATA[二叉查找树]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/85558442</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/85558442</guid><author>fansenjun</author><pubDate>Wed, 02 Jan 2019 21:11:36 +0800</pubDate><description><![CDATA[二叉查找树

每个节点最多只有两个子树的树结构，通常子树被称为左子树或者右子树，二叉查找树的重要性质是：对于树中的每个节点x，左子树任意节点的值都小于X ，右子树任意节点的值均大于X。注意：索引的存储块和之前说的数据库最小存储单位块或者页实际上并非一一对应，只是为了方便我们的理解将其一一对应起来。索引的每个存储块存储的是关键字+指向子树的指针，像下图中的树，不仅仅是二叉树还是平衡二叉树。



什...]]></description><category></category></item><item><title><![CDATA[数据库相关知识]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/85456696</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/85456696</guid><author>fansenjun</author><pubDate>Tue, 01 Jan 2019 20:21:10 +0800</pubDate><description><![CDATA[关系型数据库主要考点：



如何设计一个关系型数据库

了解数据库的各个模块：

数据库最终的目的就是存储我们的 数据，因此数据库会有一个存储模块，来负责存储我们的数据，存储模块就类似我们的os系统，当数据持久化，存储到磁盘，如存储到机械硬盘说着ssd固态硬盘。有了存储系统之后，我们还有组织，使用这些数据，因此需要程序的实例，用逻辑结构映射出物理结构来，并且在程序中提供获取管理数据的方式，还有必...]]></description><category></category></item><item><title><![CDATA[socket简介]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/85385289</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/85385289</guid><author>fansenjun</author><pubDate>Sun, 30 Dec 2018 23:49:09 +0800</pubDate><description><![CDATA[socket是对tcp/ip协议的抽象，是操作系统对外开放的接口

socket和tcp/udp没有必然的联系，socket编程接口再设计的时候，就希望能适应其他的网络协议，所有socket的出现只是使得程序员更容易使用tcp/ip协议栈，是对tcp/ip协议的抽象，从而实现的我们最为常见的函数接口，比如listen，send，read，write。socket是基于打开到读和写，在到关闭的这种模...]]></description><category></category></item><item><title><![CDATA[HTTP与https的区别]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/85332029</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/85332029</guid><author>fansenjun</author><pubDate>Fri, 28 Dec 2018 22:52:20 +0800</pubDate><description><![CDATA[https介绍

以计算机网络安全通信为目的传输协议



 SSL(Sercurity sockets Layer，安全套接层)

为网络通信提供安全及数据完整性的一种安全协议
	是操作系统对外的API，SSL3.0后更名为TSL
	采用身份验证和数据加密保证网络通信的安全的数据完整性
加密的方式

对称加密：加密和解密使用相同的秘钥

非对称加密：加密使用的秘钥和解密使用的秘钥是不相同的

哈...]]></description><category></category></item><item><title><![CDATA[HTTP简介]]></title><link>https://blog.youkuaiyun.com/fansenjun/article/details/85313231</link><guid>https://blog.youkuaiyun.com/fansenjun/article/details/85313231</guid><author>fansenjun</author><pubDate>Fri, 28 Dec 2018 21:56:27 +0800</pubDate><description><![CDATA[超文本传输协议HTTP主要特点

他是基于请求与响应模式的无状态的应用层协议

支持客户服务器模式


简单快速
客户端向服务器请求服务的时候，只需要传输请求方，路径和参数

灵活
http允许传输任意类型的数据对象，传输的数据类型以content-type标记

无连接
限制每次连接只处理一次请求

无状态
是指协议对于事务处理没有记忆能力，缺少状态就意味着后续处理需要前面的信息，则必须重传，这...]]></description><category></category></item></channel></rss>