摘要: Redis IO多路复用机制解析 提起Redis,经常会说其底层是一个单线程模型,这种说法并不是很严谨。Redis 单线程指的是网络请求模块使用了一个线程,即一个线程处理所有网络请求,其他模块该使用多线程的地方仍会使用了多个线程。既然是单线程模型,那么CPU不是Redis的瓶颈。Redis的瓶颈最有可能是机器内存或者网络带宽。 Re 阅读全文
posted @ 2021-12-09 15:42 晨煦风清 阅读(1590) 评论(0) 推荐(0) 编辑
摘要: 令牌桶工作原理分析 高并发系统有三把利器用来保护系统:缓存、降级和限流。 缓存:缓存的目的是提升系统访问速度和增大系统处理容量 降级:降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行 限流:限流的目的是通过对并发访问/请求进行限速,或者对一个 阅读全文
posted @ 2021-12-08 10:53 晨煦风清 阅读(1907) 评论(0) 推荐(0) 编辑
摘要: ES实时重建索引 1、实时重建索引 在实际的生产环境中,一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中。 批量查询的时候,建议采用scroll api,并且采用多线程并发的方式来rei 阅读全文
posted @ 2021-12-07 17:14 晨煦风清 阅读(1593) 评论(1) 推荐(1) 编辑
摘要: Kafka生产消费过程分析 一、写入方式 producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kafka吞吐率)。 分区(Partition) Kafka集群有多个消息代理服务器(broker-serv 阅读全文
posted @ 2021-12-07 09:21 晨煦风清 阅读(874) 评论(0) 推荐(0) 编辑
摘要: ES通配符引起的故障排查 许多有RDBMS/SQL背景的开发者,在初次踏入ElasticSearch世界的时候,很容易就想到使用通配符(Wildcard Query)来实现模糊查询,因为这是和SQL里like操作最相似的查询方式,用起来感觉非常舒适。不过,滥用Wildcard query可能带来灾难性的后果。 问题复现 创建 阅读全文
posted @ 2021-12-05 12:22 晨煦风清 阅读(828) 评论(0) 推荐(0) 编辑
摘要: ES之数据迁移 应用背景 数据量过大,索引分片数量不足,导致数据入库较慢的情况,需要扩大分片的数量。 数据的mapping需要修改,但是大量的数据已经导入到索引中了,重新导入数据到新的索引太耗时;但是在ES中,一个字段的mapping在定义并且导入数据之后是不能再修改的。 上述情况下需要重建索引进行数据迁移,ES提 阅读全文
posted @ 2021-12-05 11:37 晨煦风清 阅读(3729) 评论(0) 推荐(0) 编辑
摘要: ES应用之搜索附近的人 需求: 通过指定点搜索附近的人 , 要求可以过滤年龄, 结果按照距离进行排序, 并且展示她/他距离你多远 设计: ES提供了很多地理位置的搜索方式 : geo_bounding_box: 找出落在指定矩形框中的点。 geo_distance: 找出与指定位置在给定距离内的点。 geo_distanc 阅读全文
posted @ 2021-12-05 10:58 晨煦风清 阅读(623) 评论(0) 推荐(0) 编辑
摘要: Redis场景应用之排行榜 本文基于微信步数排行榜介绍如何使用Redis的ZSET实现排行榜,重点是Redis的ZSET的使用,因此只是分析了微信步数排行榜的大致实现思路,实际实现肯定比文中分析的复杂的多。首先,我们来分析下微信步数排行榜的需求: 排行榜是以日期为单位的,历史日期的排行榜是可以查看的 排行榜可能并不会显示所有好 阅读全文
posted @ 2021-12-03 23:05 晨煦风清 阅读(530) 评论(0) 推荐(0) 编辑
摘要: Redis场景应用之UA池 接触到的一些数据搜索项目,涉及到请求模拟,基于反爬需要使用随机的User Agent,于是使用Redis实现了一个十分简易的UA池。 背景 最近的一个需求,有模拟请求的逻辑,要求每次请求的请求头中的User Agent要满足下面几点: 每次获取的User Agent是随机的。 每次获取的User A 阅读全文
posted @ 2021-12-03 22:54 晨煦风清 阅读(214) 评论(0) 推荐(0) 编辑
摘要: Redis序列化协议分析 RESP简介 Redis客户端与Redis服务端基于一个称作RESP的协议进行通信,RESP全称为Redis Serialization Protocol,也就是Redis序列化协议。虽然RESP为Redis设计,但是它也可以应用在其他客户端-服务端(Client-Server)的软件项目中。RES 阅读全文
posted @ 2021-12-03 22:33 晨煦风清 阅读(165) 评论(0) 推荐(0) 编辑