golang的一个基于内存的key-value 缓存

原创 2016年11月09日 14:26:59

前两天业务里边需要一个需求需要用到一个带有时效性的单机缓存,对于数据不要求固化存储,于是乎就自己写了一个简单的key-value的memcache。

整个cache提供了,set、get、replace,delete等方法,在初始化cache的时候可以根据业务需求初始化每个item在cache中的失效时间,以及检测删除过期数据的时间周期。提供了一个对int型value计数的方法Increment。

缓存源码的链接,也可以通过 go get github.com/UncleBig/goCache 的方式获取。 下面

下面是一个使用的例子,对每个方法都有简要的说明

package example

import (
    cache "UncleBig/goCache"
    "fmt"
    "time"
)

func main() {
    // Create a cache with a default expiration time of 5 minutes, and which
    // purges expired items every 30 seconds
    c := cache.New(10*time.Minute, 30*time.Second)

    // Set the value of the key "foo" to "bar", with the default expiration time
    c.Set("foo", "bar", cache.DefaultExpiration)

    // Get the string associated with the key "foo" from the cache
    //foo, found := c.Get("foo")
    if foo, found := c.Get("foo"); found {
        fmt.Println(foo)
    }
    // Set the value of the key "num" to 10, with the default expiration time.And add 1 to it.
    c.Set("num", 10, cache.DefaultExpiration)
    err1 := c.Increment("num", 1)
    if err1 != nil {
        fmt.Println(err1)
    }
    if num, found := c.Get("num"); found {
        fmt.Println(num)
    }
    //Replace the value of item "foo"
    err := c.Replace("foo", "change", cache.DefaultExpiration)
    if err != nil {
        fmt.Println(err)
    }

    if foo, found := c.Get("foo"); found {
        fmt.Println(foo)
    }
    //Get the number of the item in the cache
    c.Set("test", "hehe", cache.DefaultExpiration)
    num := c.ItemCount()
    fmt.Println(num)
    //Delete the item in the cache
    c.Delete("foo")
    if _, found := c.Get("foo"); !found {
        fmt.Println("delete")
    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010471121/article/details/53099401

golang开发缓存组件

 花了一天时间看了下实验楼的cache组件,使用golang编写的,收获还是蛮多的,缓存组件的设计其实挺简单的,主要思路或者设计点如下: 全局struct对象:用来做缓存(基于该struc...
  • oaa608868
  • oaa608868
  • 2016-12-06 17:08:02
  • 1279

Go缓存库cache2go源码阅读

项目地址:https://github.com/muesli/cache2go/blob/master/README.md项目介绍cache2go: 一个并发安全,具有心跳功能的缓存库。核心功能只有...
  • Paddy90
  • Paddy90
  • 2017-06-06 16:20:07
  • 1329

Go 语言编写的缓存及缓存过滤库:groupcache

groupcache 是使用 Go 语言编写的缓存及缓存过滤库,作为 memcached 许多场景下的替代版本。 对比原始 memcached         首先,groupcache 与 ...
  • songbohr
  • songbohr
  • 2013-11-15 22:56:09
  • 8667

Golang简单的memcache实现

这两天在做项目的过程中遇到了一个访问全局变量的问题场景:编写一个方法,获取id对应的token值,token需要缓存起来(全局变量内存缓存),如果获取不到或者token的时间过期,那么发送http请求...
  • lavorange
  • lavorange
  • 2017-06-24 23:12:05
  • 689

通过内存缓存来提升计算性能(golang代码)

当在进行大量的计算时,提升性能最直接有效的一种方式就是避免重复计算。通过在内存中缓存和重复利用相同计算的结果,称之为内存缓存。        最明显的例子就是生成斐波那契数列的程序,要计算数列中第 ...
  • Benert
  • Benert
  • 2017-08-02 20:15:46
  • 511

golang使用groupcache(github.com上golang团队发布)

groupcache 简介groupcache是一款开源的缓存组件.与memcache与redis不同的时,groupcache不需要单独的部署,可以作为你程序的一个库来使用. 这样方便我们开发的程序...
  • hzwy23
  • hzwy23
  • 2016-11-22 23:46:48
  • 4280

golang的缓冲channel和无缓冲channel的区别

golang channel 有缓冲 与 无缓冲 是有重要区别的 我之前天真的认为 有缓冲与无缓冲的区别 只是 无缓冲的 是 默认 缓冲 为1 的缓冲式 其实是彻底错误的,无缓冲的与有缓冲...
  • samete
  • samete
  • 2016-10-07 18:58:27
  • 1501

golang实现自定义驱动的Cache

近期在写 ActivedRouter项目的时候需求一个缓存模型,要求缓存模型支持不同驱动,例如:memory、file、redis、mysql,实现思路代码如下:cache.go文件,定义缓存对外接口...
  • yue7603835
  • yue7603835
  • 2017-05-11 10:36:05
  • 655

go channel有无缓存的区别

无缓冲的与有缓冲channel有着重大差别,那就是一个是同步的 一个是非同步的。 比如 c1:=make(chan int)         无缓冲 c2:=make(chan int,1)  ...
  • whatday
  • whatday
  • 2017-12-05 21:25:49
  • 234

3.go开源cache2go项目笔记——cachetable文件

3.go开源cache2go项目蛤蟆笔记——cachetable文件        该文件是项目中行数最多的go文件。共338行。 1     导入: "log"        "sort"     ...
  • notbaron
  • notbaron
  • 2016-07-23 23:34:39
  • 30758
收藏助手
不良信息举报
您举报文章:golang的一个基于内存的key-value 缓存
举报原因:
原因补充:

(最多只允许输入30个字)