go
文章平均质量分 80
go语言学习
_Jerry_...
明心见性,Github:https://github.com/jerry609
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
GeeRPC第一天 服务端与消息编码(1)
fill:#333;ClientServerCodecReadHeaderReadBodyClientServerCodec这段代码实现了一个简单的 RPC (Remote Procedure Call) 框架,涵盖了编解码器(Codec) 相关功能以及RPC 服务器的基本处理逻辑。codecMagicNumber int // MagicNumber 表示这是一个 GeeRPC 请求CodecType codec.Type // 客户端可以选择不同的编解码器来编码数据。原创 2024-11-18 15:42:30 · 836 阅读 · 0 评论 -
go http小结
ResponseWriterhttp.Request原创 2024-11-14 10:51:54 · 186 阅读 · 0 评论 -
go strings查找手册
【代码】go strings查找手册。原创 2024-11-14 09:33:35 · 545 阅读 · 0 评论 -
7天用Go从零实现分布式缓存GeeCache(改进)
为了解决上述问题,需要在循环条件中增加对缓存长度的判断,避免在缓存为空时进入无限循环。防止在缓存为空时进入无限循环。当缓存中没有任何项可供移除时,循环会终止,避免程序卡死。方法用于将一个键值对添加到缓存中,或者更新已有的键值对。好的,我来为您完整地解说这段代码,指出其中的问题并给出改进方案。,上述循环会自动移除最久未使用的缓存项,直到缓存大小符合限制。,使逻辑更直观,表示当前缓存大小超过了最大限制。临时允许缓存大小超过限制,或者调整。直接返回,不将其添加到缓存中。如果更新后的缓存大小超过了。原创 2024-11-13 11:38:41 · 549 阅读 · 0 评论 -
7天用Go从零实现分布式缓存GeeCache(总结)
实现了一个基于最近最少使用(LRU)策略的缓存,不支持并发访问。存储缓存条目的键和值。定义缓存值必须实现的Len方法,用于计算其占用的字节数。构造一个新的Cache实例。向缓存中添加或更新键值对,并根据需要移除最久未使用的条目。获取指定键的值,并将其移动到前端表示最近使用。移除缓存中最久未使用的条目。返回缓存中条目的数量。文件内容概述:定位拥有特定键的节点。从节点获取数据。设计思路:定义清晰的接口(PeerPicker和PeerGetter),实现模块之间的解耦和灵活扩展。原创 2024-11-13 11:36:15 · 1870 阅读 · 0 评论 -
7天用Go从零实现分布式缓存GeeCache(学习)(5)
Request和Response,用于 Geecache 节点间的通信。文件(生成的geecachepb包)import (fmt "fmt"if m!= nil {return nil消息类型Request:包含Group和Key字段,用于客户端向缓存服务器请求数据。Response:包含Value字段,用于缓存服务器响应客户端的数据请求。互斥锁sync.Mutexcache结构体:使用mu锁保护对。原创 2024-11-12 16:47:39 · 723 阅读 · 0 评论 -
7天用Go从零实现分布式缓存GeeCache(学习)(3)
Cache字段解释maxBytes:缓存的最大容量(字节数)。nbytes:当前已使用的缓存大小(字节数)。ll:双向链表,*list.List,用于记录元素的访问顺序。cache:字典(哈希表),,键为字符串,值为链表元素的指针,方便快速查找。OnEvicted:可选的回调函数,当元素被移除时调用。entry字段解释key:缓存项的键。value:缓存项的值,实现了Value接口。Value接口Len() int方法Len():返回值所占的字节数。Hash类型定义哈希函数类型,接收。原创 2024-11-12 16:20:40 · 851 阅读 · 0 评论 -
go语言 分布式一致
至此,HTTPPool 既具备了提供 HTTP 服务的能力,也具备了根据具体的 key,创建 HTTP 客户端从远程节点获取缓存值的能力。方法用于从对应 group 查找缓存值。PeerGetter 就对应于上述流程中的 HTTP 客户端。方法用于根据传入的 key 选择相应节点 PeerGetter。在这里,抽象出 2 个接口,PeerPicker 的。第二步,为HTTPPool添加节点选择的功能。第三步,实现PeerPicker接口。接口 PeerGetter 的。原创 2024-11-11 17:57:28 · 577 阅读 · 0 评论 -
7天用Go从零实现分布式缓存GeeCache(学习)(4)上锁总结
Mutex和RWMutex是基础的锁,分别用于一般的互斥和读写场景。OnceCondWaitGroup、和atomic则提供了更高级的并发控制,适用于不同的场景。sync.Map是线程安全的 map,适合高并发场景,避免手动加锁。原创 2024-11-10 12:27:25 · 686 阅读 · 0 评论 -
7天用Go从零实现分布式缓存GeeCache(学习)(2)
Group在这个缓存系统中的核心意义是管理特定类别的缓存数据,每个Group代表一个逻辑上的缓存分组。它负责提供数据的获取逻辑,包括缓存查询和缓存未命中时的数据加载。通过分组的概念,可以更细粒度地控制缓存的逻辑和数据范围,实现高效的数据存储和读取。以下是Groupimport ("fmt""log""sync"// Group 是缓存的命名空间和相关数据加载的管理器name string // 缓存组名称getter Getter // 数据加载回调,当缓存未命中时使用。原创 2024-11-10 12:22:58 · 1787 阅读 · 0 评论 -
go语言使用总结
在 Go 中,返回指针类型通常用于允许共享对象状态,但根据实际需求,可以选择返回值类型或指针类型。原创 2024-11-09 16:25:21 · 659 阅读 · 0 评论 -
7天用Go从零实现分布式缓存GeeCache(学习)
启动服务器并监听端口9999。当收到一个请求时,服务器会自动调用&s的ServeHTTP方法来处理该请求。在ServeHTTP中,使用w和r参数构建响应。因此,ServeHTTP的调用是函数在处理请求时自动完成的。http定义了常量,表示缓存服务的默认路径前缀,所有请求都应以该路径前缀开头(如HTTPPoolHTTPPool是一个结构体,代表一组 HTTP 节点组成的缓存池。它实现了PeerPicker接口,可以在集群中选择适当的节点。字段解释::表示当前节点的基本 URL,例如。原创 2024-11-09 16:24:33 · 1002 阅读 · 0 评论
分享