github.com/nkatsaros/fscache

Streaming File Cache for #golang


License
MIT
Install
go get github.com/nkatsaros/fscache

Documentation

fscache

GoDoc Software License Build Status Coverage Status

Usage

Streaming File Cache for #golang

fscache allows multiple readers to read from a cache while its being written to. blog post

A Caching Middle-ware:

package main

import(
    "net/http"
    "time"

    "github.com/djherbis/fscache"
)

func main(){
    c, err := fscache.New("./cache", 0700, 0)
    if err != nil {
        log.Fatal(err.Error())
    }

    handler := func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "%v: %s", time.Now(), "hello world")
    }

    http.ListenAndServe(":8080", fscache.Handler(c, http.HandlerFunc(handler)))
}

Using the Cache directly:

package main

import (
    "io"
    "log"
    "os"

    "github.com/djherbis/fscache"
)

func main() {

    // create the cache, keys expire after 1 hour.
    c, err := fscache.New("./cache", 0755, 1)
    if err != nil {
        log.Fatal(err.Error())
    }

    // wipe the cache when done
    defer c.Clean()

    // Get() and it's streams can be called concurrently but just for example:
    for i := 0; i < 3; i++ {
        r, w, err := c.Get("stream")
        if err != nil {
            log.Fatal(err.Error())
        }

        if w != nil { // a new stream, write to it.
            go func(){
                w.Write([]byte("hello world\n"))
                w.Close()
            }()
        }

        // the stream has started, read from it
        io.Copy(os.Stdout, r)
        r.Close()
    }
}

Installation

go get github.com/djherbis/fscache