自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Kaito的博客

关注「水滴与银弹」公众号,7年资深后端研发,给你呈现不一样的技术视角。

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

原创 Redis最佳实践:7个维度+43条使用规范,带你彻底玩转Redis

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,给你呈现不一样的技术视角。大家好,我是 Kaito。这篇文章我想和你聊一聊 Redis 的最佳实践。你的项目或许已经使用 Redis 很长时间了,但在使用过程中,你可能还会或多或少地遇到以下问题:我的 Redis 内存为什么增长这么快?为什么我的 Redis 操作延迟变大了?如何降低 Redis 故障发生的频率?日常运维 Redis 需要注意什么?部署 Redis 时,如何做好资源规划?Redis 监控重点.

2021-03-04 10:22:51 1379 1

原创 16 张图带你吃透 Redis 架构演进

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,给你呈现不一样的技术视角。大家好,我是 Kaito。这篇文章我想和你聊一聊 Redis 的架构演化之路。现如今 Redis 变得越来越流行,几乎在很多项目中都要被用到,不知道你在使用 Redis 时,有没有思考过,Redis 到底是如何稳定、高性能地提供服务的?你也可以尝试回答一下以下这些问题:我使用 Redis 的场景很简单,只使用单机版 Redis 会有什么问题吗?我的 Redis 故障宕机了,数据丢失了怎么.

2021-02-04 13:51:00 501

原创 Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。Redis 作为优秀的内存数据库,其拥有非常高的性能,单个实例的 OPS 能够达到 10W 左右。但也正因此如此,当我们在使用 Redis 时,如果发现操作延迟变大的情况,就会与我们的预期不符。你也许或多或少地,也遇到过以下这些场景:在 Redis 上执行同样的命令,为什么有时响应很快,有时却很慢?为什么 Redis 执行 SET、DEL 命令耗时也很久?为什么我的 Redis 突然慢了一.

2021-01-25 01:29:40 342

原创 如何构建一个通用的垂直爬虫平台?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。之前做爬虫时,在公司设计开发了一个通用的垂直爬虫平台,后来在公司做了内部的技术分享,这篇文章把整个爬虫平台的设计思路整理了一下,分享给大家。写一个爬虫很简单,写一个可持续稳定运行的爬虫也不难,但如何构建一个通用化的垂直爬虫平台?这篇文章,我就来和你分享一下,一个通用垂直爬虫平台的构建思路。爬虫简介首先介绍一下,什么是爬虫?搜索引擎是这样定义的:网络爬虫(又被称为网页蜘蛛,网络机器人.

2021-01-08 11:28:52 271

原创 糟糕程序员的20个坏习惯

你好,我是 Kaito。今天我想和你聊一聊优秀程序员的基本素养。我想你肯定遇到过这样一类程序员:他们无论是写代码,还是写文档,又或是和别人沟通,都显得特别专业。每次遇到这类人,我都在想,他们到底是怎么做到的?随着工作时间的增长,渐渐地我也总结出一些经验,他们身上都保持着一些看似很微小的优秀习惯,但正是因为这些习惯,体现出了一个优秀程序员的基本素养。但今天我们来换个角度,来看看一个糟糕程序员有哪些坏习惯?只要我们都能避开这些问题,就可以逐渐向一个优秀程序员靠近。1、技术名词拼写不规范无论是个人简历

2021-11-01 14:19:23 301

原创 搞懂异地多活,看这篇就够了

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货你好,我是 Kaito。在软件开发领域,「异地多活」是分布式系统架构设计的一座高峰,很多人经常听过它,但很少人理解其中的原理。异地多活到底是什么?为什么需要异地多活?它到底解决了什么问题?究竟是怎么解决的?这些疑问,想必是每个程序看到异地多活这个名词时,都想要搞明白的问题。有幸,我曾经深度参与过一个中等互联网公司,建设异地多活系统的设计与实施过程。所以今天,我就来和你聊一聊异地多活背后的的实现原理。认真读完这篇文章,我相信你会对异地多.

2021-10-18 10:34:10 361 1

原创 缓存和数据库一致性问题,看这篇就够了

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,给你呈现不一样的技术视角。你好,我是 Kaito。如何保证缓存和数据库一致性,这是一个老生常谈的话题了。但很多人对这个问题,依旧有很多疑惑:到底是更新缓存还是删缓存?到底选择先更新数据库,再删除缓存,还是先删除缓存,再更新数据库?为什么要引入消息队列保证一致性?延迟双删会有什么问题?到底要不要用?…这篇文章,我们就来把这些问题讲清楚。这篇文章干货很多,希望你可以耐心读完。引入缓存提高性能我们从最.

2021-09-09 10:22:38 340

原创 计算机时间到底是怎么来的?程序员必看的时间知识!

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,给你呈现不一样的技术视角。大家好,我是 Kaito。这篇文章我想和你聊一聊「时间」这个话题。时间总是在不经意间流逝,我们在写代码时,也经常会调用「时间 API」,你有思考过这背后的原理吗?关于时间的问题还有很多,例如:为什么计算机的时间有时候「走不准」?计算机究竟是怎么「自动校准」时间的?我们经常看到的 UTC 时间,到底是什么?我们在新闻上看到的「北京时间」,真的来自北京吗?这篇文章,我们就来揭秘时间背.

2021-07-08 09:50:25 462 1

原创 深度剖析:Redis分布式锁到底安全吗?看完这篇文章彻底懂了!

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,给你呈现不一样的技术视角。大家好,我是 Kaito。这篇文章我想和你聊一聊,关于 Redis 分布式锁的「安全性」问题。Redis 分布式锁的话题,很多文章已经写烂了,我为什么还要写这篇文章呢?因为我发现网上 99% 的文章,并没有把这个问题真正讲清楚。导致很多读者看了很多文章,依旧云里雾里。例如下面这些问题,你能清晰地回答上来吗?基于 Redis 如何实现一个分布式锁?Redis 分布式锁真的安全吗?Redi.

2021-06-08 16:50:26 671 1

原创 把Redis当作队列来用,真的合适吗?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,给你呈现不一样的技术视角。大家好,我是 Kaito。我经常听到很多人讨论,关于「把 Redis 当作队列来用是否合适」的问题。有些人表示赞成,他们认为 Redis 很轻量,用作队列很方便。也些人则反对,认为 Redis 会「丢」数据,最好还是用「专业」的队列中间件更稳妥。究竟哪种方案更好呢?这篇文章,我就和你聊一聊把 Redis 当作队列,究竟是否合适这个问题。我会从简单到复杂,一步步带你梳理其中的细节,把这个问.

2021-05-15 15:56:02 176

原创 颠覆认知——Redis会遇到的15个「坑」,你踩过几个?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,给你呈现不一样的技术视角。大家好,我是 Kaito。这篇文章,我想和你聊一聊在使用 Redis 时,可能会踩到的「坑」。如果你在使用 Redis 时,也遇到过以下这些「诡异」的场景,那很大概率是踩到「坑」了:明明一个 key 设置了过期时间,怎么变成不过期了?使用 O(1) 复杂度的 SETBIT 命令,Redis 竟然被 OOM 了?执行 RANDOMKEY 随机拿出一个 key,竟然也会阻塞 Redis?同.

2021-03-30 11:29:23 778

原创 什么是浮点数?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在上一篇文章中,我们主要介绍了在计算机中使用定点数表示数字的方式。简单回顾一下,简单来说,用定点数表示数字时,会约定小数点的位置固定不变,整数部分和小数部分分别转换为二进制,就是定点数的结果。但用定点数表示小数时,存在数值范围、精度范围有限的缺点,所以在计算机中,我们一般使用「浮点数」来表示小数。这篇文章,我们就来详细看一下浮点数到底是如何表示小数的,以及浮点数的的范围和精度有多大。什么是浮.

2021-01-23 13:36:24 37776 17

原创 什么是定点数?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。我们学习计算机知识时,经常听到「定点数」和「浮点数」,它们之间有什么区别?平时说到整数,我们就说它是一个定点数,说到小数,就说它是一个浮点数,这种说法是正确的吗?这篇文章,我们先来看一下,「定点数」究竟与整数和小数有什么关系。什么是定点数?要想理解什么是「定点数」,首先,我们需要理解「定点」究竟是什么意思?我们都知道,数字既包括整数,又包括小数,而小数的精度范围要比整数大得多,所以如果我们.

2021-01-23 13:35:55 21980 6

原创 Python进阶——为什么GIL让多线程变得如此鸡肋?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。做 Python 开发时,想必你肯定听过 GIL,它经常被 Python 程序员吐槽,说 Python 的多线程非常鸡肋,因为 GIL 的存在,Python 无法利用多线程提高性能。但事实真的如此吗?这篇文章,我们就来看一下 Python 的 GIL 到底是什么?以及它的存在,究竟对我们的程序有哪些影响。GIL是什么?查阅官方文档,GIL 全称 Global Interpreter Lock.

2021-01-23 13:34:50 154

原创 Python进阶——什么是描述符?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在 Python 开发中,你可能听说过「描述符」这个概念,由于我们很少直接使用它,所以大部分开发人员并不了解它的原理。但作为熟练使用 Python,想要进阶的你,建议还是了解一下描述符的原理,这也便于你更深层次地理解 Python 的设计思想。其实,在开发过程中,虽然我们没有直接使用到描述符,但是它在底层却无时不刻地被使用到,例如以下这些:function、bound method、unbo.

2021-01-23 13:34:16 165

原创 Python进阶——如何正确使用yield?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在 Python 开发中,yield 关键字的使用其实较为频繁,例如大集合的生成,简化代码结构、协程与并发都会用到它。但是,你是否真正了解 yield 的运行过程呢?这篇文章,我们就来看一下 yield 的运行流程,以及在开发中哪些场景适合使用 yield。生成器如果在一个方法内,包含了 yield 关键字,那么这个函数就是一个「生成器」。生成器其实就是一个特殊的迭代器,它可以像迭代器那样.

2021-01-23 13:33:35 170

原创 Python进阶——什么是迭代器?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在 Python 开发中,我们经常听到有关「容器」、「迭代器」、「可迭代对象」、「生成器」的概念。我们经常把这些概念搞混淆,它们之间有哪些联系和区别呢?这篇文章,我们就来看一下它们之间的关系。容器首先,我们先来看一下容器是如何定义的?简单来说,容器就是存储某些元素的统称,它最大的特性就是判断一个元素是否在这个容器内。怎么理解这句话?很简单,在 Python 中,我们通常使用 in 或 .

2021-01-23 13:32:58 167

原创 Python进阶——什么是上下文管理器?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在 Python 开发中,我们经常会使用到 with 语法块,例如在读写文件时,保证文件描述符的正确关闭,避免资源泄露问题。你有没有思考过, with 背后是如何实现的?我们常常听到的上下文管理器究竟是什么?这篇文章我们就来学习一下 Python 上下文管理器,以及 with 的运行原理。with语法块在讲解 with 语法之前,我们先来看一下不使用 with 的代码如何写?我们在操作一个.

2021-01-23 13:31:56 204

原创 Python进阶——什么是元类?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。如果你看过比较优秀的 Python 开源框架,肯定见到过元类的身影。例如,在一个类中定义了类属性 __metaclass__,这就说明这个类使用了元类来创建。那元类的实现原理究竟是怎样的?使用元类能帮我们在开发中解决什么样的问题?这篇文章,我们就来看一下 Python 元类的来龙去脉。什么是元类?我们都知道,定义一个类,然后调用它的构造方法,就可以初始化出一个实例出来,就像下面这样:cla.

2021-01-23 13:31:08 206

原创 Python进阶——如何正确使用魔法方法?(下)

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在上一篇文章Python进阶——如何正确使用魔法方法?(上)中,我们主要介绍了关于构造与初始化、类的表示、访问控制这几类的魔法方法,以及它们的使用场景。这篇文章,我们继续介绍剩下的魔法方法,主要包括:比较操作、容器类操作、可调用对象、序列化。比较操作比较操作的魔法方法主要包括以下几种:__cmp____eq____ne____lt____gt____cmp__从名字我们就能看.

2021-01-21 14:51:33 132

原创 Python进阶——如何正确使用魔法方法?(上)

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在做 Python 开发时,我们经常会遇到以双下划线开头和结尾的方法,例如 __init__、__new__、__getattr__、__setitem__ 等等,这些方法我们通常称之为「魔法方法」,而使用这些「魔法方法」,我们可以非常方便地给类添加特殊的功能。这篇文章,我们就来分析一下,Python 中的魔法方法都有哪些?使用这些魔法方法,我们可以实现哪些实用的功能?魔法方法概览首先,我们先.

2021-01-21 14:49:22 171

原创 Python进阶——如何实现一个装饰器?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在 Python 开发中,我们经常会看到使用装饰器的场景,例如日志记录、权限校验、本地缓存等等。使用这些装饰器,给我们的开发带来了极大的便利,那么一个装饰器是如何实现的呢?这篇文章我们就来分析一下,Python 装饰器的使用及原理。一切皆对象在介绍装饰器前,我们需要理解一个概念:在 Python 开发中,一切皆对象。什么意思呢?就是我们在开发中,无论是定义的变量(数字、字符串、元组、列表.

2021-01-18 10:13:07 182

原创 Scrapy 源码剖析(四)Scrapy 如何完成抓取任务?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。上一篇文章:Scrapy 源码剖析(三)Scrapy 有哪些核心组件?,我们已经分析了 Scrapy 核心组件的主要职责,以及它们在初始化时都完成了哪些工作。这篇文章就让我们来看一下,也是 Scrapy 最核心的抓取流程是如何运行的,它是如何调度各个组件,完成整个抓取工作的。运行入口还是回到最初的入口,在Scrapy 源码剖析(二)Scrapy 是如何运行起来的?这篇文章中我们已经详细分析过了.

2021-01-15 09:55:57 405

原创 Scrapy 源码剖析(三)Scrapy 有哪些核心组件?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在上一篇文章:Scrapy 源码剖析(二)Scrapy 是如何运行起来的?,我们主要剖析了 Scrapy 是如何运行起来的核心逻辑,也就是在真正执行抓取任务之前,Scrapy 都做了哪些工作。这篇文章,我们就来进一步剖析一下,Scrapy 有哪些核心组件?以及它们主要负责了哪些工作?这些组件为了完成这些功能,内部又是如何实现的。爬虫类我们接着上一篇结束的地方开始讲起。上次讲到 Scrapy 运.

2021-01-14 16:57:29 400

原创 Scrapy 源码剖析(二)Scrapy 是如何运行起来的?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在上篇文章:Scrapy源码分析(一)架构概览,我们主要从整体上了解了 Scrapy 的架构和数据流转,并没有深入分析每个模块。从这篇文章开始,我将带你详细剖析 Scrapy 的运行原理。这篇文章,我们先从最基础的运行入口来讲,来看一下 Scrapy 究竟是如何运行起来的。scrapy 命令从哪来?当我们基于 Scrapy 写好一个爬虫后,想要把我们的爬虫运行起来,怎么做?非常简单,只需要执行.

2021-01-13 00:25:46 470

原创 Scrapy 源码剖析(一)架构概览

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。在爬虫开发领域,使用最多的主流语言主要是 Java 和 Python 这两种,如果你经常使用 Python 开发爬虫,那么肯定听说过 Scrapy 这个开源框架,它正是由Python编写的。Scrapy 在开源爬虫框架中名声非常大,几乎用 Python 写爬虫的人,都用过这个框架。而且业界很多开源的爬虫框架都是模仿和参考 Scrapy 的思想和架构实现的,如果想深入学习爬虫,研读 Scrapy 的.

2021-01-12 10:41:52 836 2

原创 如何搭建一个爬虫代理服务?

微信搜索关注「水滴与银弹」公众号,第一时间获取优质技术干货。7年资深后端研发,用简单的方式把技术讲清楚。由于之前一直在做爬虫采集相关的开发,这个过程那肯定少不了跟「代理 IP」打交道,这篇文章就来记录一下,如何实现一个爬虫代理服务,本篇文章主要以讲解思路为主。起因做过爬虫的人应该都知道,抓的网站和数据多了,如果爬虫抓取速度过快,免不了触发网站的防爬机制。而这些网站应对爬虫的办法,几乎用的同一招就是封 IP 。那么我们还想稳定、持续地抓取这些网站的数据,如何解决呢?一般解决方案有2个:使用同一.

2021-01-08 00:28:45 641

空空如也

空空如也

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

TA关注的人

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