- 博客(222)
- 收藏
- 关注
原创 redis zset 内部排序方式
倒序排序”不存在于存储层面,只存在于查询层面内部存储永远是从小到大ZREVRANGE只是"从后往前取数据"的查询方式所有rank相关操作(如ZREMRANGEBYRANK)都基于内部的从小到大排序。
2025-08-04 16:14:37
275
原创 Redis Stream 会保存所有消息吗,还是说消息被取走了就会删掉
Redis Stream 默认会保存所有消息,不会在消费者取走后自动删除。消息被 XACK 确认后仅从消费组的挂起列表(PEL)中移除,但仍保留在 Stream 中。可通过 XDEL 显式删除或设置 MAXLEN 限制队列长度来自动清理旧消息。这种机制支持消息重试和重复消费,同时允许通过配置控制存储空间。
2025-07-22 18:08:26
207
原创 etcd压缩历史版本
etcd压缩历史版本机制解析 etcd通过多版本并发控制(MVCC)保存键值修改历史,每次写入都会生成新修订版本(revision)。压缩机制会删除旧版本,只保留设定数量的最近版本(如autoCompactionRetention:1000保留最近1000版)。该功能可节省存储空间、提升查询性能、优化内存使用,但压缩后旧版本将无法访问。实际应用中需根据存储条件和业务需求(如故障恢复、数据审计)平衡版本保留数量,在保证功能前提下合理配置压缩参数。
2025-07-15 22:49:35
304
原创 etcd自动压缩清理
摘要:etcd自动压缩配置autoCompactionMode:revision表示采用修订版本号压缩模式,autoCompactionRetention:1000则设置保留最近的1000个修订版本。该配置通过定期压缩历史数据来优化存储空间、提升性能并防止数据无限增长。revision模式基于变更次数而非时间进行压缩,1000个版本的保留量适合需要平衡存储空间和历史记录的场景。用户可根据需求调整参数值或切换至periodic时间模式。
2025-07-15 22:47:14
191
原创 es里为什么node和shard不是一对一的关系
Elasticsearch 设计分片(shard)机制,是为了实现弹性伸缩、负载均衡、并发性能提升和高可用容灾“多目标”,绝不是一一对应就能解决的。让shard数量远多于node数量,是分布式架构的基本思想之一。所以,不让shard和node一对一,而是允许多个shard分配在同一个node上,是为了支持弹性扩展、高并发、容灾、高利用率等多种需求。
2025-07-13 17:23:32
531
原创 es里的node和shard是一一对应的关系吗,可以多个shard分配到一个node上吗
es里的node和shard不是一一对应关系。一个node上可以分配多个shard。
2025-07-13 17:02:01
362
原创 es里的index和mongo里的collection的区别
Elasticsearch中的index与MongoDB的collection概念类似,都是数据的逻辑分组单位,相当于关系型数据库中的表。两者的层级结构分别为:Elasticsearch的Cluster>Index>Document,MongoDB的Database>Collection>Document。传统关系型数据库的Table最接近这两个概念。虽然命名不同,但index和collection都起到数据分组的作用,主要区别在于Elasticsearch没有显式的数据库级别概念。
2025-07-13 01:55:58
371
原创 k8s metadata.labels,spec.template.metadata.labels,spec.selector 三者之间的关系。
这个字段定义了如何找到你想要该 Kubernetes 对象(例如 Service 或 Deployment)管理的 Pod。:这些标签(labels)附加在你创建的对象(例如 Pod、Service、或 Deployment)上。标签是键值对,可以被用来组织和分类这些对象。在这个示例中,我们创建了一个名为 “my-deployment” 的 Deployment,它的标签为。中,我们定义了这个 Deployment 创建的 Pod 的标签也为。的 Pod,并且它创建的所有新 Pod 的标签都将为。
2023-11-06 14:20:13
2023
3
原创 k8s service
在 Kubernetes(K8s)中,Service 是一个抽象的概念,表示一个应用程序的逻辑集合和访问这些应用程序的策略。通常,Service 都通过标签(Label)与 Pod 连接,服务会自动为这些 Pod 创建端口映射关系,有利于流量的负载均衡和服务发现。
2023-11-04 23:49:09
623
原创 k8s replicaSet,deployment 学习笔记
k8s replicaSet,deployment 学习笔记。在 Kubernetes 中,ReplicaSet和Deployment都是用来确保某种 Pod 的副本数目。但是,ReplicaSet和Deployment是有差别的,二者的关系可以粗略地理解为Deployment对ReplicaSet的进一步封装。ReplicaSet是为了确保任意时刻都有特定数量的 Pod 副本在运行。换句话说,如果有 Pod 出现故障被删除,ReplicaSet会自动创建新的 Pod 来替代。但ReplicaSet。
2023-10-29 21:37:12
681
原创 golang判断文本文件是否是BOM格式
在Go语言中,我们可以通过读取文本文件的前几个字节来识别它是否是BOM格式的文件。BOM(Byte Order Mark)是UTF编码标准中的一部分,用于标示文本文件的编码顺序。对于不同类型的UTF编码(UTF-8, UTF-16, UTF-32),BOM的值是不同的。
2023-10-06 15:55:21
476
原创 Dockerfile RUN
请注意,每个 RUN 指令都会创建一个新的镜像层,因此在 Dockerfile 中使用 RUN 指令时,要注意将多个命令合并到一个 RUN 指令中以减小镜像的层数,这可以提高构建性能并减小镜像大小。例如:RUN [“apt-get”,“update”]例如: RUN apt-get update。
2023-09-16 15:44:08
665
原创 k8s pod “cpu和内存“ 资源限制
对于 CPU,我们知道计算机里 CPU 的资源是按 “时间片”的方式来进行分配的,系统里的每一个操作都需要 CPU 的处理,所以,哪个任务要是申请的 CPU 时间片越多,那么它得到的 CPU 资源就越多。这里的 m 就是毫、毫核的意思,Kubernetes 集群中的每一个节点可以通过操作系统的命令来确认本节点的 CPU 内核数量,然后将这个数量乘以1000,得到的就是节点总 CPU 总毫数。Pod的资源限制的能力。对于一个pod来说,资源最基础的2个的指标就是:CPU和内存。
2023-06-18 11:23:13
3819
原创 mongodb indexes索引 和 primary Key主键的异同学习笔记
索引是用于提高数据库查询性能的数据结构。它可以在一个或多个字段上创建,以帮助数据库快速定位和访问特定数据。通过创建适当的索引,可以减少查询时的扫描量,提高查询的效率。
2023-06-14 12:45:31
551
原创 k8s pod state terminating学习笔记
当一个 Kubernetes(k8s)Pod 处于 “Terminating”(终止)状态时,意味着该 Pod 正在被优雅地终止或删除。终止过程通常包括多个步骤,以确保 Pod 的容器正确停止并清理任何关联资源。
2023-06-12 12:59:46
1093
原创 zlib压缩,原始数据大小对压缩结果的影响
在某些情况下,当数据量较小时,使用Zlib进行压缩可能会导致压缩后的结果变大的情况。这是由于Zlib的压缩算法决定的,它的压缩算法是基于Deflate算法的,而Deflate算法在数据量较小时的效果可能不如数据量较大时显著。
2023-06-04 17:25:50
717
原创 关于dockerfile CMD 命令的坑
dockerfile 中的 CMD 命令在docker run -it 不会执行 CMD 命令。。
2023-05-23 17:05:05
1074
1
原创 go.mod: checksum mismatch 报错解决办法
go.mod 里的依赖项版本号升级之后,本地下载的缓存并没有清理掉还是旧的版本,所以把go mod缓存清理掉然后删掉go sum重新生成。升级go.mod依赖版本之后会报错。
2023-04-02 11:38:21
1854
转载 解读 K8s Pod 的 13 种异常
Pod 的资源请求量是 Pod 中所有容器的资源请求之和,Pod 的资源限制量是 Pod 中所有容器的资源限制之和。而当硬亲和规则不被满足时,Pod 将无法被调度,需要检查 Pod 调度规则和目标节点状态,对调度规则或节点进行合理调整。Pod 通过 NodeSelector 节点选择器指定调度到带有特定 Label 的节点,若不存在满足 NodeSelector 的可用节点,Pod 将无法被调度,需要对 NodeSelector 或节点 Label 进行合理调整。超过 Namespace 资源配额。
2023-03-16 10:28:47
744
原创 docker 报错 error: invalid character ‘\x00‘ looking for beginning of value
执行docker build的时候报错:error: invalid character ‘\x00’ looking for beginning of value。删除 ~/.docker/contexts 目录,然后重启 dockerDesktop导致报错的原因是 meta.json 损坏,被写入了零值。
2023-03-11 11:41:41
6363
原创 golang defer
defer会把声明的以及放到栈上,当外部的包含方法return之前,返回参数到调用方法之前调用。在defer语句声明的时候入参就已经确定下来了,所以如果要传入指定参数那么就要在defer前给入参赋值。
2023-02-18 17:18:01
835
原创 go版本升级后 goland debug报错:RNING: undefined behavior version of Delve is too old for Go version
go版本升级后 goland debug报错:RNING: undefined behavior version of Delve is too old for Go version
2023-02-05 16:44:50
2203
原创 golang reflect反射之Elem()方法
golang reflect反射之Elem()方法可以看到 对于 Type类型的funcTyp,直接取Kind时,它的类型为ptr,也就是在反射中所有的指针类型都是ptr,但是当我们想要获取指针背后元素的真正数据类型时就需要使用Elem方法,Elem源码如下(省略了多个case,只关注Pointer):可以看到它是把指针类型的保存的地址取出来,然后转换为Type类型。
2022-12-08 12:00:54
1698
原创 mongodb 16M 限制
mongodb 单个document最大限制为16M。验证代码如下调整 sizee大小为16M,ReplaceOne返回错误 “an inserted document is too large”
2022-12-04 20:51:55
3224
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人