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")
    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。

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

groupcache 是使用 Go 语言编写的缓存及缓存过滤库,作为 memcached 许多场景下的替代版本。 对比原始 memcached         首先,groupcache 与 ...

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

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

golang开发缓存组件

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

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

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

对golang的Channel初始化的有缓存与无缓存解释

首先编程的时候遇到疑问,输出跟我所想预想不一样,后来查到了golang社区的帖子,其中一篇帖子 :健哥大人  做出了一些解释。 我摘抄重点过来: 无缓冲的与有缓冲channel有着重大差别,那...

Go缓存库cache2go源码阅读

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

golang实践-如何实现高性能的定时任务管理器

问题背景在业务中,我们经常需要基于定时任务来触发来实现各种功能。比如TTL会话管理、锁、定时任务(闹钟)或更复杂的状态切换等等。 由于go语言协程非常轻,很容易开启多个并发。如果结合time包,能够...

面向HBase的内存key-value缓存的实现

0x01 背景之所以要实现这个缓存主要原因如下(但是由于不是实际业务场景需求,所以可能不太准确,也可能不存在这个需求): * 非结构化数据的爆炸式增长 * 处理速度的要求越来越高 * HBase...

400行代码实现本地Key-Value缓存,性能每秒几百万次,进程重启有效,LRU淘汰——HashTable

liuyun827@foxmail.com原创,转载请注明出处:http://blog.csdn.net/gdutliuyun827 Key-Value缓存有很多,用的较多的是memcache、re...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:golang的一个基于内存的key-value 缓存
举报原因:
原因补充:

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