首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏程序猿的学习笔记

    Go Cache

    源码阅读是2020年开始的一个长期计划,主要目的有两个:1.提高自己对GO语言的理解,2.理解功能设计的原理。 项目地址 https://github.com/patrickmn/go-cache 学习总结 Go Cache 算是比较常用的本地缓存工具。他结构清晰,操作简单,非常实用。 因此,我们说go cache 是并发安全。这一块它提供的方法还是比较全面的,我们只看一些常用的方法。 go j.Run(c) } //定时器运行方法 func (j *janitor) Run(c *cache) { ticker := time.NewTicker(j.Interval) 这里可以看下LRU算法的讲解,并且附带着GO代码:缓存淘汰算法—LRU算法 - 知乎 另外,go-zero中的cache 中实现了LRU算法,可以看下的源码。

    2.3K80发布于 2021-04-27
  • 来自专栏golang算法架构leetcode技术php

    golang源码分析:go-cache

    github.com/patrickmn/go-cache是知名golang local cache实现里面最简单的一种,可以理解为就是简单的map加锁实现的,它通过定时器来进行过期key 首先看下如何使用它 package main import ( "fmt" "time" "github.com/patrickmn/go-cache" ) func main() { 方法从缓存中获取一个键值对: value, found := c.Get("key") if found { fmt.Println(value) } 介绍完使用规则后我们开始分析源码,它只有两个文件cache.go 和sharded.go,首先看下第一个文件。 j go j.Run(c) } func newCache(de time.Duration, m map[string]Item) *cache { func newCacheWithJanitor(

    78910编辑于 2023-09-06
  • 来自专栏后端云

    Golang缓存库 go-cache

    go-cache是什么以及应用场景 go-cache 是一个类似Memcached的go库,key:value存储在内存中。适合单机应用调用。 https://github.com/patrickmn/go-cache 使用 import ( "fmt" "github.com/patrickmn/go-cache" "time" ) { fmt.Println(foo) } } go-cache源码分析 从上面的基本使用,用了New,Set,Get方法,去查看的对应的源码。 sync.RWMutex onEvicted func(string, interface{}) janitor *janitor } go-cache : ci, stop: make(chan bool), } c.janitor = j go j.Run(c) } 定时清理包括:创建看门狗结构体janitor,并赋值给cache结构体的成员变量

    1.9K20编辑于 2022-11-25
  • 来自专栏Golang语言社区

    Golang语言-cache2go使用

    例子:

    95250发布于 2018-03-21
  • 来自专栏Golang语言社区

    go开源cache2go项目蛤蟆笔记——简单使用-

    1 下载开源 下载路径:https://github.com/muesli/cache2go 2 代码如下: packagemain import( "fmt" "time" "cache2go-master cache:=cache2go.Cache("myCache") //Wewillputanewiteminthecache.Itwillexpireafter //notbeingaccessedviaValue cache.Add("someKey",0,&val) //cache2gosupportsafewhandycallbacksandloadingmechanisms. cache.SetAboutToDeleteItemCallback(func(e*cache2go.CacheItem){ fmt.Println("Deleting:",e.Key(),e.Data cache.Flush() } 3 执行如下 Found value in cache: Thisis a test! Item is not cached(anymore).

    802110发布于 2018-03-23
  • 来自专栏crossoverJie

    Go 实现一个 LRU cache

    前言 早在几年前写过关于 LRU cache 的文章:https://crossoverjie.top/2018/04/07/algorithm/LRU-cache/ 当时是用 Java 实现的,最近我在完善 ptg: Performance testing tool (Go), 用 Go 实现的 gRPC 客户端调试工具。 Go 官方库中并没有相关的实现,考虑到程序的简洁就不打算依赖第三方库,自己写一个;本身复杂度也不高,没有几行代码。 配合这个数据结构,我便在 ptg 中实现了请求历史记录的功能: 将每次的请求记录存储到 lru cache 中,最近使用到的历史记录排在靠前,同时也能提供相关的搜索功能;具体可见下图。 最终就是通过这个 LruCache 实现了上图的效果,想要了解更多细节的可以参考源码: https://github.com/crossoverJie/ptg/blob/main/gui/lru.go

    35320编辑于 2022-10-27
  • 来自专栏人人都是架构师

    Go每日一库之81:go-cache(单机缓存库)

    go-cache https://github.com/patrickmn/go-cache 一句话描述 基于内存的 K/V 存储/缓存 : (类似于Memcached),适用于单机应用程序 简介 go-cache 基于内存的 K/V 存储/缓存 : (类似于Memcached),适用于单机应用程序 ,支持删除,过期,默认Cache共享锁, 大量key的情况下会造成锁竞争严重 为什么选择go-cache? Example package main import ( "fmt" "time" "github.com/patrickmn/go-cache" ) type MyStruct struct } c.mu.Unlock() for _, v := range evictedItems { c.onEvicted(v.key, v.value) } } 思考 Lock 的使用 在go-cache Doc http://godoc.org/github.com/patrickmn/go-cache 比较 相似的库 https://github.com/golang/groupcache https

    5.5K40编辑于 2023-09-30
  • 来自专栏golang

    每日一库之 go-cache 单机缓存

    go-cache 是一个 golang 的缓存库, 用于缓存 k, v 对, 缓存时间过期后存储的值会失效, 底层是一个 map, 过期后内部 Item 是不会自动清除, 需要手动调用DeleteExpired 方法清除过期项 安装 go get github.com/patrickmn/go-cache 使用方法 // 创建Cache对象, 第一个参数为缓存时间, 第二个参数为清理缓存项的时间间隔 // 底层是一个 使用 gin 框架 package main import ( "fmt" "time" "github.com/gin-gonic/gin" "github.com/patrickmn/go-cache e, } // TODO: Calls to mu.Unlock are currently not deferred because defer // adds ~200 ns (as of go1 c.mu.Unlock() } 设置写锁,防止多个 goroutine 同时修改一个 item, 然后设置过期时间 这就是 go-cache 库, 主要用于单机缓存,底层是一个 map, 使用RWMutex

    41011编辑于 2025-07-04
  • 来自专栏搜索引擎技术研讨

    ES Cache: Page Cache

    操作系统视角 从操作系统的角度, page cache也称为disk cache, 是操作系统对硬盘(HDD or SSD)的缓存. OS 使用当前空闲的RAM来保存page cache, 用来加速对硬盘的访问. page cache在内核实现, 对应用程序几乎是透明的. 一般操作系统会把全部空闲的内存用作page cache. 缓存内容 page cache的缓存内容就是索引文件. 可配置项 可以配置page cache预先读取. 主要是解决操作系统重启后造成的page cache失效问题. 当Lucene读取索引文件的时候, 会自动使用page cache做索引文件的缓存. page cache的存储粒度是什么? 内存满了, 有些page cache被kernel通过类似LRU的算法释放了. 操作系统重启. page cache的淘汰算法是怎么样的?

    1.6K40编辑于 2022-04-25
  • 来自专栏后端云

    client-go 源码分析(2) - discovery模块:discovery cache

    DiscoveryClient可以将资源相关信息存储于本地,默认存储位置为~/.kube/cache和~/.kube/http-cache。 缓存可以减轻client-go对KubernetesAPI Server的访问压力。 DiscoveryClient第一次获取资源组、资源版本、资源信息时,首先会查询本地缓存,如果数据不存在(没有命中)则请求Kubernetes API Server接口(回源),Cache将Kubernetes 该方法的代码分析参考 client-go 源码分析(1) - discovery模块:discoveryclient获取所有的gv和gvr 用下面的构造方法构造CachedDiscoveryClient 是client-go中相对简单的缓存机制,通过缓存设计,实时发送rest api请求,缓存超时,实现了即能获取相对较新的信息,又减轻rest api请求的压力,这种通过缓存和rest API请求结合的方式也是

    52520编辑于 2023-02-10
  • 来自专栏搜索引擎技术研讨

    ES Cache: Node Cache

    描述 NodeCache也称为QueryCache, 是在Node(机器)级别缓存的, 同一个节点上的多个shards共用的一个Node Cache. Node Cache是段级别的, 段在进行段合并而销毁的时候, 其对应的NodeCache会失效, 没有warmup. Solr Filter Cache的存储粒度是shard(某一个index在当前节点的shard), ES Node Cache的存储粒度是什么? segment. ES Node Cache与Solr的Filter Cache的warm up 区别. ES的Node Cache是以段为单位的, 当添加新段的时候, 老段的缓存不受影响, 当执行段合并的时候, 被销毁的段的NodeCache会直接失效, 没有warmup.

    1.4K50编辑于 2022-02-09
  • 来自专栏Core Net

    .Net cachecache更新

    </returns> public static T Get<T>(string key) { return (T)Cache[key]; } ///

    /// Adds the specified key and object to the cache. /// key</param> /// <param name="data">Data</param> /// <param name="cacheTime">Cache key)); } /// /// Removes the value with the specified key from the cache { Remove(key); } } /// /// Clear all cache

    1.3K50发布于 2018-05-17
  • 来自专栏TopFE

    Could not create cache adapter cache factory not found: factory for cache adapter ““ was not regist

    RROR: Could not create cache adapter error=cache factory not found: factory for cache adapter Job failed (system failure): Error response from daemon: OCI runtime create failed: container_linux.go :349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go Check if the specified host path exists and is the expected type (docker.go:792:0s) duration=27.219164339s

    2K20编辑于 2022-01-24
  • 来自专栏Ryan Miao

    Spring cache简单使用guava cache

    This abstraction is materialized by the org.springframework.cache.Cache and org.springframework.cache.CacheManager 这样,在执行method之前每个cache都会检查是否存在 - 如果至少一个cache命中了,然后就会返回关联的值。 如果不想使用默认的cache resolver,你需要实现接口:org.springframework.cache.interceptor.CacheResolver 自定义Cache Resolution 默认的cache resolution适合于使用一个CacheManager并且没有复杂的cache resolution. 默认的,cache代理不会lock并且同样的数据也许会计算多次,这与cache的目标相悖。 在这些特殊的场景,当计算的时候,参数sync可以用来通知将cache lock cache entry.

    4.4K70发布于 2018-03-13
  • 来自专栏各类技术文章~

    lru_cachecache原理

    python中的实现 python3中的functools模块的lru_cache实现了这个功能 lru_cache查看源码解释:Least-recently-used cache decorator. cache使用场景:1.频繁使用 2.每一次获取代价高 3.一定时间内具有幂等性 4.压力大 5.预热(提前存入cache) ---- lru_cache(maxsize=128, typed=False # Least-recently-used cache decorator. # 缓存 -》 命中 import time @lru_cache() # 3.8后内部处理 lru_cache currsize # 如果缓存数量大于0则清除缓存 if cache_info[3] > 0: get_userinfo_list.cache_clear() return __wrapped__.cache_clear() return jsonify("新增用户成功") 2.2 functiontools.wrap装饰器对lru_cache的影响 ​ 在上节我们看到

    1.3K00发布于 2021-10-23
  • 来自专栏linux驱动个人学习

    linux Page cache和buffer cache正解

    Page cache和buffer cache一直以来是两个比较容易混淆的概念,在网上也有很多人在争辩和猜想这两个cache到底有什么区别,讨论到最后也一直没有一个统一和正确的结论,在我工作的这一段时间 ,page cache和buffer cache的概念曾经困扰过我,但是仔细分析一下,这两个概念实际上非常的清晰。 当page cache的数据需要刷新时,page cache中的数据交给buffer cache,但是这种处理在2.6版本的内核之后就变的很简单了,没有真正意义上的cache操作。 简单说来,page cache用来缓存文件数据,buffer cache用来缓存磁盘数据。 从上面的分析可以看出,2.6内核中的buffer cache和page cache在处理上是保持一致的,但是存在概念上的差别,page cache针对文件的cache,buffer是针对磁盘块数据的cache

    3.6K20发布于 2019-01-03
  • 来自专栏YIN_尹的博客

    LRU Cache

    什么是LRU Cache LRU是Least Recently Used的缩写,意思是最近最少使用,它是一种Cache替换算法。 什么是Cache? 除了CPU与主存之间有Cache, 内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache── 称为Internet临时文件夹或网络内容缓存等。 而Cache的容量有限,那如果cache满了怎么办? 当Cache的容量用完后,而又有新的内容需要添加进来时, 就需要挑选并舍弃原有的部分内容,从而腾出空间来放新内容。 这就涉及到cache的替换算法,而LRU Cache就是cache替换算法中的一种! LRU Cache 的替换原则就是将最近最少使用的内容替换掉。 LRU Cache的实现 那要实现一个LRU Cache其实并不难,方法和思路有很多;但是想要实现一个高效(所有操作都是O(1) )的LRU Cache是有难度的 实现LRU Cache的方法和思路很多

    52810编辑于 2024-01-23
  • 来自专栏xingoo, 一个梦想做发明家的程序员

    DB Cache

    1 DB Cache 是以bock为单位组织的缓冲区,不同大小的BLOCK对应不同的缓冲区参数 2 DB Cache的命中率越高,访问性能就越好 3 Cache中的数据块通过散列算法实现 4 每个链上的 buffers数量,最佳的情况是每个链上只有一个buffer 5 DBWR进程控制脏数据写入 6 在DB Cache,同一个数据块中可能存在多个版本的数据 7 大表的扫描,热块冲突都可能导致闩锁的争用 CKPT搜索这些BUFFER,将脏数据写入该链,再由DBWR写入磁盘 闩锁争用: 1 热块冲突 2 数据库在某个时间段出现大量的数据块扫描、热链 使用keep pool存放大表,可以降低物理读,改善cache 命中率 使用owi观点和时间模型分析,帮助分析数据库性能 DB cache命中率低,意味着更多的物理IO、更多的闩锁使用、较低的效率。 RAC中,更多的实例间通信消息 DB cache调优,注意 free buffere waits \ writes complete waits两个性能指标

    1.1K90发布于 2018-01-18
  • 来自专栏Khan安全团队

    Web Cache Vulnerability Scanner 是一个基于 Go 的 CLI 工具

    Web Cache Vulnerability Scanner (WCVS) 是由Hackmanit开发的用于Web 缓存中毒的快速且通用的 CLI 扫描程序。 选项 2:使用 Go 获取存储库 可以使用 Go 获取存储库。 go get -u https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner 用法 WCVS 使用它的标志是高度可定制的。

    78710编辑于 2022-01-12
  • 来自专栏落叶飞翔的蜗牛

    Guava Cache

    根据科普中国的定义,缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。 由于特定的工作流程,使用者必须在创建Cache或者获取数据时指定不存在数据时应当怎么获取数据。

    84430发布于 2021-04-23
领券