avatar
文章
40
标签
39
分类
1

首页
合集
  • 归档
  • 标签
  • 分类
专栏
  • 开发笔记
  • 日常记录
友链
关于
首页
合集
  • 归档
  • 标签
  • 分类
专栏
  • 开发笔记
  • 日常记录
友链
关于

CYK's Blog

Nacos如何实现的配置变化客户端可以感知到
发表于2025-03-25|开发笔记|Nacos
客户端与配置中心的数据交互方式其实无非就两种,要么推 ,要么就是拉 推的模式就客户端和服务端建立 TCP 长链接,当服务端数据发生变化,立即通过这个已经建立好的长连接将数据推送到客户端。长链接的优点是实时性,一旦数据变动,客户端立即就能感知到。但是缺点就是服务端需要维护大量的 TCP 连接,这会占用大量的内存和 CPU 资源,同时也容易受到网络抖动等因素的影响。 拉的模式就是客户端轮询,通过不断轮询的方式检查数据是否发生变化,变化的话就把数据拉回来。轮询的优点是实现比较简单,但弊端也显而易见,轮询无法保证数据的实时性,并且轮询方式对服务端还会产生压力。 在 Nacos 1.x 版本中采用的是长轮询,不是长连接,也不是轮询,是长轮询(Long Polling)。 其实就是把长连接和轮询综合了一下,就是说客户端发起轮询,但是不立即返回,而是 hold 一段时间,这段时间保持着一个有效连接,超时或者变化再返回,然后再发起一次轮询。 在 Nacos 2.0 中,采用 gRPC 长连接。 长轮询和长连接 长轮询是一种实现异步消息通信的机制,它通常用于客户端向服务器端请求某个资源时, ...
MySQL只操作同一条记录发生死锁
发表于2025-03-10|开发笔记|MySQL
MySQL只操作同一条记录发生死锁数据库的锁锁的是索引,并不是记录 当我们在事务中,更新一条记录的时候,如果用到普通索引作为条件,那么会先获取普通索引的锁,然后再尝试获取主键索引的锁。那么这个时候,如果刚好有一个线程,已经拿到了这条记录的主键索引的锁后,同时尝试在该事务中去拿该记录的普通索引的锁。这时候就会发生死锁。 update my_table set name = 'hollis',age = 22 where name = "hollischuang";这个SQL会先对name加锁, 然后再回表对id加锁。-----select * from my_table where id = 15 for update;update my_table set age = 33 where name like "hollis%";以上SQL,会先获取主键的锁,然后再获取name的锁。 为了避免这种死锁情况的发生,可以在应用程序中设置一个规定的索引获取顺序,例如,只能按照主键索引->普通索引的顺序获取锁,这样就可以避免不 ...
Redis大Key问题
发表于2025-02-28|开发笔记|Redis•BIG
Redis大Key问题Big Key 是 Redis 中存储了大量数据的 Key,不要误以为 big key 只是表示 Key 的值很大,他还包括这个 Key 对应的 value 占用空间很多的情况,通常在 String、list、hash、set、zset 等类型中出现的问题比较多 其中 String 类型就是字符串的值比较大,而其他几个类型就是其中元素过多的情况 Redis 的 Big Key 可能存在以下几个危害: 影响性能:由于 big key 的 values 占用的内存会很大,所以读取它们的速度会很慢,会影响系统的性能。 占用内存: 大量的 big key 也会占满 Redis 的内存,让 Redis 无法继续存储新的数据,而且也会导致 Redis 卡住 内存空间不均匀:比如在 Redis 集群中,可能会因为某个节点上存储了 Big Key,导致多个节点之间内存使用不均匀。 影响 Redis 备份和恢复:如果从 RDB 文件中恢复全量数据时,可能需要大量的时间,甚至无法正常恢复。 搜索困难:由于大 key 可能非常大,因此搜索 key 内容时非常困难,并且可能需要花费较长 ...
ElasticSearch倒排索引
发表于2025-02-18|开发笔记|ElasticSearch
ElasticSearch倒排索引在 ElasticSearch 中,倒排索引是一种常用的索引结构,用于快速搜索文档中的某个词汇。 倒排索引的结构与传统的索引结构相反,传统的索引结构是由文档构成的,每个文档包含了若干个词汇,然后根据这些词汇建立索引。而倒排索引是由词汇构成的,每个词汇对应了若干个文档,然后根据这些文档建立索引。 对于一个包含多个词汇的文档,倒排索引会将每个词汇作为一个关键字(Term),然后记录下该词汇所在的文档编号(Document ID)及该词汇在文档中的位置(Term Position)。这样,当用户输入一个关键字时,就可以快速地查找到包含该关键字的文档编号,然后通过文档编号再查找到对应的文档内容。 倒排索引的优点在于它可以快速定位包含关键字的文档,而且可以支持复杂的搜索操作,如词组搜索、通配符搜索等。同时,由于倒排索引是由词汇构成的,因此在进行数据分析和统计时也非常有用。在 ElasticSearch 中,倒排索引是一种非常重要的索引结构,它被广泛应用于搜索引擎、日志分析、推荐系统等领域。
ElasticSearch
发表于2025-02-07|开发笔记|ElasticSearch
ElasticSearch数据模型 Elasticsearch 是基于文档的搜索引擎,它使用 JSON 文档来存储数据。在 Elasticsearch 中,相关的数据通常存储在同一个文档中,而不是分散在多个表中。 MySQL 是一个关系型数据库管理系统,它使用表、行和列的结构来组织数据。数据通过外键关系分散在多个表中。 查询语言 Elasticsearch 使用 Query DSL(Domain Specific Language),这是一种非常灵活的查询语言,基于 JSON,支持全文搜索、复合查询、过滤以及聚合等。 MySQL 使用 SQL(Structured Query Language),这是一种强类型和非常成熟的语言,专门用于查询和管理关系数据库。 全文搜索 Elasticsearch 的核心功能是全文搜索。它对数据进行索引时会自动建立全文搜索索引,使其在搜索大量文本数据时表现优异。 MySQL 虽然也提供了基本的全文搜索功能,但其主要设计目标是处理结构化数据的存储和查询,对全文搜索的支持不如 Elasticsearch 那样强大。 事务支持 Elasticsea ...
ROWNUM 和 ROW_NUMBER() 的区别
发表于2025-01-23|开发笔记|ORACLE
ROWNUM 和 ROW_NUMBER() 都是oracle中获取系统顺序分配为从查询返回的行的编号的,返回的第一行分配的是1,第二行是2,依此类推。 ROWNUM 是一个伪列,用来为查询结果中的每一行分配一个唯一的、递增的行号。 她返回的行号是按照查询结果的顺序分配的,而不依赖于特定的排序。它是在从数据库中提取数据时计算的,并且会在查询返回结果时就分配给每一行。 如果在没有使用ORDER BY的情况下使用 ROWNUM查询数据,返回的行号是根据数据在数据库中的物理存储顺序自动分配的。 如果使用 ROWNUM 与 ORDER BY 结合使用,ROWNUM 只会按查询返回的顺序分配行号,而不是按排序的结果分配。 ROW_NUMBER() 是一个窗口函数,它根据指定的排序规则为查询结果集中的每一行分配一个唯一的、递增的行号。 返回的行号是按照指定的排序顺序生成的。它是在结果集返回之前计算的,并且是基于 ORDER BY 子句中指定的排序规则分配的。 ROW_NUMBER() 会根据 ORDER BY 子句明确指定的列来分配行号,因此行号的顺序严格按照 ORDER BY 的顺序来。 ...
不建议直接使用Spring的@Async
发表于2025-01-09|开发笔记|Spring
不建议直接使用Spring的@Async@Async 中关于线程池的使用部分在 AsyncExecutionInterceptor 中,在这个类中有一个 getDefaultExecutor 方法,当我们没有做过自定义线程池的时候,就会用 SimpleAsyncTaskExecutor 这个线程池。 @Overrideprotected Executor getDefaultExecutor(BeanFactory beanFactory) { Executor defaultExecutor = super.getDefaultExecutor(beanFactory); return (defaultExecutor != null ? defaultExecutor : new SimpleAsyncTaskExecutor());} SimpleAsyncTaskExecutor 这玩意坑很大,其实他并不是真的线程池,它是不会重用线程的,每次调用都会创建一个新的线程,也没有最大线程数设置。并发大的时候会产生严重的性能问题。 他的doExecut ...
Docker常用命令
发表于2024-12-26|开发笔记|Docker
Docker常用命令docker run:启动一个新的容器docker ps:列出正在运行的容器docker ps -a:列出所有容器docker stop: 停止正在运行的容器docker start: 启动已停止的容器docker rm:删除容器docker images: 列出本地镜像docker pull:从镜像仓库拉取或更新指定的镜像docker build: 使用 Dockerfile 构建镜像docker logs:查看日志docker logs -f <container-id or container-name>:实时跟踪日志输出docker logs --tail 50 <container-id or container-name>:查看最新的50行日志docker logs --since 30m <container-id or container-name>:查看最近30分钟的日志
Lombok应该谨慎使用
发表于2024-12-14|开发笔记|Lombok
Lombok应该谨慎使用Lombok 是一款非常实用 Java 工具,可用来帮助开发人员消除 Java 的冗长代码,尤其是对于简单的 Java 对象(POJO)。 它通过注释实现这一目的。 团队强X 因为 Lombok 的使用要求开发者一定要在 IDE 中安装对应的插件。 如果未安装插件的话,使用 IDE 打开一个基于 Lombok 的项目的话会提示找不到方法等错误。导致项目编译失败。 也就是说,如果项目组中有一个人使用了 Lombok,那么其他人就必须也要安装 IDE 插件。否则就没办法协同开发。 更重要的是,如果我们定义的一个 jar 包中使用了 Lombok,那么就要求所有依赖这个 jar 包的所有应用都必须安装插件,这种侵入性是很高的。 代码可读性,可调试性低 在代码中使用了 Lombok,确实可以帮忙减少很多代码,因为 Lombok 会帮忙自动生成很多代码。但是这些代码是要在编译阶段才会生成的,所以在开发的过程 中,其实很多代码其实是缺失的。 在代码中大量使用 Lombok,就导致代码的可读性会低很多,而且也会给代码调试带来一定的问题。 比如,我们想要知道某个类中的某个属性的 ...
Linux下rm正在写入的文件会发生什么
发表于2024-12-03|开发笔记|Linux
Linux下rm正在写入的文件会发生什么在 Linux 中,文件的存储由两部分组成: 文件名(Directory Entry):用户看到的文件路径(如 /data/file.txt)。 文件数据(Inode 和数据块):实际存储文件内容的磁盘空间。 rm 命令的作用是删除文件名与 inode 的链接(目录中看不到这个文件了)。 如果该文件被其他进程正在写入,则 inode 和数据块不会立即释放,进程还可以继续写入(数据仍可写入),等所有进程关闭文件后再回收资源(回收文件的磁盘空间)。 之所以这样,是因为其实在 linux 中,文件数据和文件名是分开的 文件名是目录中的一个“链接(link)”,指向 inode。 文件内容存在 inode 管理的 block 中。 rm 命令只是调用 unlink(),移除了一个目录项。
1234
avatar
CYK
我是CYK
文章
40
标签
39
分类
1
公告

怎么这么难!
我真服了!

最新文章
hexo+butterfly目录显示问题2025-10-28
cursor2025-10-25
Linux持续写入的日志如何清理2025-09-19
RAG是什么2025-08-11
RocketMQ如何保证消息不丢失2025-07-02
分类
  • 开发笔记39 篇
标签
Vercel MySQL SVN cursor vue 数据库 RAG DOCKER 大模型 coda BIG Akismet Linux Redis Spring uni-app ORACLE JAVA SCRIPT Butterfly python facefusion 本地缓存 JAVA 资源 MAVEN Twikoo 小程序 Algolia hexo Docker ai MQ RocketMQ Hexo MongoDb Nacos ElasticSearch Lombok Nginx
归档
  • 十月 20252 篇
  • 九月 20251 篇
  • 八月 20251 篇
  • 七月 20252 篇
  • 六月 20251 篇
  • 五月 20252 篇
  • 四月 20251 篇
  • 三月 20252 篇
网站资讯
本站访客数 :
本站总访问量 :
©2024 - 2025 By CYK

HEXO Butterfly GitHub
鲁ICP备2024065423号-1

搜索