golang cache--go-cache

go-cache是一款类似于memached 的key/value 缓存软件。它比较适用于单机执行的应用程序。

go-cache实质上就是拥有过期时间并且线程安全的map,可以被多个goroutine安全访问。

下面举例说明其用法。

Demo

package main

import (
        "log"
        "time"

        "github.com/patrickmn/go-cache"
)

func main(){

        c := cache.New(30*time.Second, 10*time.Second)

        c.Set("Title", "Spring Festival", cache.DefaultExpiration)

        value, found := c.Get("Title")
        if found {
                log.Println("found:", value)
        } else {
                log.Println("not found")
        }

        time.Sleep(60*time.Second)
        log.Println("sleep 60s...")
        value, found = c.Get("Title")
        if found {
                log.Println("found:", value)
        } else {
                log.Println("not found")
        }

}

output

2019/02/05 17:49:32 found: Spring Festival

2019/02/05 17:50:32 sleep 60s...

2019/02/05 17:50:32 not found

  • 首先,创建一个新的cache,其中key的过期时间是30s,并且每10s清除缓存中的过期key。

    定期清除缓存中的过期key,是通过一个常驻goroutine实现的。

  • 接着,设置一个key/value,及其过期时间。过期时间使用默认过期时间,即30s。
  • 获取这个key,可以看到,此时这个key在cache中是存在的。
  • 睡眠60s,使刚才设置的key过期。
  • 再次获取这个key,此时key已经过期,被清除了,不在cache中。

参考

go-cache

原文地址:https://www.cnblogs.com/lanyangsh/p/10352938.html

时间: 2024-08-30 18:14:36

golang cache--go-cache的相关文章

Page Cache buffer Cache

https://www.thomas-krenn.com/en/wiki/Linux_Page_Cache_Basics References Jump up ↑ The Buffer Cache (Section 15.3) page 348, Linux-Kernel Manual: Guidelines for the Design and Implementation of Kernel 2.6, Robert Love, Addison-Wesley, 2005 Jump up ↑ L

L1 Cache, L2 Cache读取命中率与时钟周期计算

CPU在Cache中找到有用的数据被称为命中,当Cache中没有CPU所需的数据时(这时称为未命中),CPU才访问内存.从理论上讲,在一颗拥有2级Cache的CPU中,读取L1 Cache的命中率为80%.也就是说CPU从L1 Cache中找到的有用数据占数据总量的80%,剩下的20%从L2 Cache读取.由于不能准确预测将要执行的数据,读取L2的命中率也在80%左右(从L2读到有用的数据占总数据的16%).那么还有的数据就不得不从内存调用,但这已经是一个相当小的比例了. 假如CPU从L1,L

发现不错的cache系统Cache Manager Documentation

http://cachemanager.net/Documentation/Index/cachemanager_architecture https://www.nuget.org/packages/CacheManager.Web/ https://github.com/MichaCo/CacheManager/tree/master/samples/CacheManager.Samples.Mvc

level cache

level_cachewww.zhaoch.top > 项目level cache是一个golang编写支持分片存储的多级的缓存库.整体设计上在保障性能够用的前提下尽可能的通过设计方案简化代码实现,便于维护和二次开发.该库能够管理多种速度价格不同的设备进行对象分片的功能,实现性能和价格的平衡.level cache以分片为粒度进行数据的存储和热点管理,方便类似视频的数据进行分段缓存.项目地址:https://github.com/GhostZCH/levelcache特色功能支持多级缓存,自动将

Linux内存学习之buffer和cache的区别详解

本文和大家分享的主要是linux 中 内存buffer 和 cache 的区别相关内容,一起来看看吧,希望对大家 学习linux有所帮助. 细心的朋友会注意到, 当你在 linux 下频繁存取文件后 , 物理内存会很快被用光 , 当程序结束后 , 内存不会被正常释放 , 而是一直作为 caching. 这个问题 , 貌似有不少人在问 , 不过都没有看到有什么很好解决的办法 . 那么我来谈谈这个问题 . 先来说说free 命令 [[email protected] ~]# free -m tota

guava cache与spring集成

缓存的背景 缓存,在我们日常开发中是必不可少的一种解决性能问题的方法.简单的说,cache 就是为了提升系统性能而开辟的一块内存空间.在cpu进行计算的时候, 首先是读取寄存器,然后内存,再是硬盘.由于寄存器容量很小,不太适合存储我们需要快速读取的数据,放在硬盘中话,效率太低,所以大多数人将一些静态资源或者不经常修改的数据放在内存中. 缓存的作用 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用.在日常开发的很多场合,由于受限于硬盘 IO的性能或者我们自身业务系统的数

浅谈数据库系统中的cache(转)

http://www.cnblogs.com/benshan/archive/2013/05/26/3099719.html 浅谈数据库系统中的cache(转) Cache和Buffer是两个不同的概念,简单的说,Cache是加速"读",而buffer是缓冲"写",前者解决读的问题,保存从磁盘上读出 的数据,后者是解决写的问题,保存即将要写入到磁盘上的数据.在很多情况下,这两个名词并没有严格区分,常常把读写混合类型称为buffer cache,本文后续的论述中,统一

.Net Cache

在.net中有两个类实现了Cache HttpRuntime.Cache 应该程序使用的Cache,web也可以用 HttpContext.Current.Cache  web上下文的Cache对象,只能在Web上使用 asp.net 页面缓存的封装 /// <summary> /// 根据 cacheKey 获取缓存内容 /// </summary> /// <param name="context">HttpContext</param&g

Mybatis源码分析之Cache二级缓存原理 (五)

一:Cache类的介绍 讲解缓存之前我们需要先了解一下Cache接口以及实现MyBatis定义了一个org.apache.ibatis.cache.Cache接口作为其Cache提供者的SPI(ServiceProvider Interface) ,所有的MyBatis内部的Cache缓存,都应该实现这一接口 Cache的实现类中,Cache有不同的功能,每个功能独立,互不影响,则对于不同的Cache功能,这里使用了装饰者模式实现. 看下cache的实现类,如下图: 1.FIFOCache:先进

Spring使用Cache、整合Ehcache

从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该方法参数和返回结果作为一个键值对存放在缓存中,等到下次利用同样的参数来调用该方法时将不再执行该方法,而是直接从缓存中获取结果进行返回.所以在使用Spring Cache的时候我们要保证我们缓存的方法对于相同的方法参数要有相同的返回结果. 使用Spring Cache需要我们做两方面的事: n  声明