水滴与银弹

其他

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

个机房依旧存在「全局覆没」的风险。真是防不胜防啊?怎么办?没办法,继续冗余。但这次冗余机房,就不能部署在同一个城市了,你需要把它放到距离更远的地方,部署在「异地」。通常建议两个机房的距离要在
2021年10月15日
其他

读懂Redis源码,我总结了这7点心得

socket(networking.c)。沿着这条主线去读代码,我们就可以掌握一条命令的执行全过程。而且,由于这条主线的代码逻辑,已经覆盖了「所有命令」的执行流程,我们下次再去读其它命令时,比如
2021年9月23日
其他

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

个问题的核心在于:缓存都被回种了「旧值」。那怎么解决这类问题呢?最有效的办法就是,把缓存删掉。但是,不能立即删,而是需要「延迟删」,这就是业界给出的方案:缓存延迟双删策略。按照延时双删策略,这
2021年9月8日
其他

方向对了,就不怕路远:10000粉达成,感谢有你!

个月甚至更久,持续做一件事情,如果换成你,你能坚持下来吗?如果在这期间没有正反馈,放弃肯定是大概率事件。所以我认为,做事的心态非常重要。我在公众号写作之前,也不知道自己能做到什么程度,什么时候能达到
2021年9月1日
其他

我做了一场技术演讲,学到了这些东西

这么做的坏处是什么?需要付出额外时间、精力。因为之前从来没有经历过这种演讲,而且这次的演讲要远比公司内部演讲的要求高,不确定自己能否完成,如果达不到要求,而且还花费了这么多时间,有点得不偿失。3)
2021年8月16日
其他

我是如何写一篇技术文章的?顺便聊一聊这个公众号的故事

年,也算是一个资深程序员了。之前几年主要开发高并发后端系统,最近几年从事基础架构、中间件相关的研发工作,主要方向聚焦在「机房容灾、异地多活」等领域,为业务应用的高可用提供保障,使用的技术栈是
2021年7月17日
其他

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

00:00:00。但这种情况比较少,大部分情况下,地球自转速度是越来越慢的。这么做的好处在于,这个时钟的每一秒的计时依旧是精确的,而且还兼顾了日常生活使用的世界时,一举两得!由于这个时钟是基于原子时
2021年7月8日
其他

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

Martin,是英国剑桥大学的一名分布式系统研究员。在此之前他曾是软件工程师和企业家,从事大规模数据基础设施相关的工作。它还经常在大会做演讲,写博客,写书,也是开源贡献者。他马上写了篇文章,质疑这个
2021年6月8日
其他

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

一条消息出来后,这条消息就会立即从链表中删除了。也就是说,无论消费者是否处理成功,这条消息都没办法再次消费了。这也意味着,如果消费者在处理消息时异常宕机,那这条消息就相当于丢失了。针对这
2021年4月19日
其他

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

个方面可能存在的「坑」。怎么样?有没有颠覆你的认知呢?这篇文章信息量还是比较大的,如果你现在的思维已经有些「凌乱」了,别急,我也给你准备好了思维导图,方便你更好地理解和记忆。希望你在使用
2021年3月30日
其他

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

也就越慢!原因在于,删除大量元素时,需要依次回收每个元素的内存,元素越多,花费的时间也就越久!而且,这个过程默认是在主线程中执行的,这势必会阻塞主线程,产生性能问题。那删除这种元素比较多的
2021年3月4日
其他

如何从0到1构建一个稳定、高性能的Redis集群?(附16张图解)

实例,然后让这些实例数据保持实时同步,这样当一个实例宕机时,我们在剩下的实例中选择一个继续提供服务就好了。没错,这个方案就是接下来要讲的「主从复制:多副本」。主从复制:多副本此时,你可以部署多个
2021年2月4日
其他

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

的性能下降?如果你对操作系统有些了解,就会知道操作系统为了缓解内存不足对应用程序的影响,允许把一部分内存中的数据换到磁盘上,以达到应用程序对内存使用的缓冲,这些内存数据被换到磁盘上的区域,就是
2021年1月20日
自由知乎 自由微博
其他

Python进阶——迭代器和可迭代对象有什么区别?

类型,都只是「可迭代对象」,但不是「迭代器」,因为它们都是把迭代细节交给了另外一个类,这个类才是真正的迭代器。看下面这个例子,你就能明白这两者之间的差别了。#
2020年11月28日
其他

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

非常适合用需要对于上下文处理的场景,例如操作文件、Socket,这些场景都需要在执行完业务逻辑后,释放资源。contextlib模块对于需要上下文管理的场景,除了自己实现
2020年11月27日
其他

Python进阶——元类是怎么创建一个类的?

创建类时自定义行为前面我们用元类创建一个类时,它的功能非常简单。现在我们来看一下,使用元类创建类时,如何定义一些自己的逻辑,然后改变类的属性或行为。我们看下面这个例子:#
2020年11月24日
其他

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

时触发,用于反转容器的元素,具体的反转逻辑我们也可以自己实现。可调用对象了解了容器类魔法方法,我们接着来看可调用对象的魔法方法,这个魔法方法只有一个:__call__。我们看下面这个例子。#
2020年11月23日
其他

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

设置属性时调用__getattr__:访问不存在的属性时调用__delattr__:删除某个属性时调用__getattribute__:访问任意属性或方法时调用我们来看使用这些方法的完整例子:#
2020年11月22日
其他

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

开发中,我们经常会看到使用装饰器的场景,例如日志记录、权限校验、本地缓存等等。使用这些装饰器,给我们的开发带来了极大的便利,那么一个装饰器是如何实现的呢?这篇文章我们就来分析一下,Python
2020年11月21日
其他

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

最核心的抓取流程是如何运行的,它是如何调度各个组件,完成整个抓取工作的。运行入口还是回到最初的入口,在Scrapy源码剖析(二)Scrapy是如何运行起来的?这篇文章中我们已经详细分析过了,在执行
2020年11月2日
其他

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

spider_closed_callback在这里我们能看到,主要是对其他几个核心组件进行定义和初始化,主要包括包括:Scheduler、Downloader、Scrapyer,其中
2020年11月1日
其他

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

是非常重要的,我们读源码时有必要重点关注一下里面的内容,这里包含了所有组件的默认配置,以及每个组件的类模块,例如调度器类、爬虫中间件类、下载器中间件类、下载处理器类等等。#
2020年10月31日
其他

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

main()经过优化,我们完成了异步版本的爬虫代码。有了这些基础知识之后,我们看一个完整的例子,如何抓取一个整站数据?整站爬虫#
2020年10月28日
其他

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

第一种方案牺牲的是时间和速度,但是一般情况下我们的时间是很宝贵的,理想情况下是,用最短的时间获取最多的数据。所以第二种方案是推荐的,那么从哪里可以找到这么多代理
2020年10月26日