diff --git a/README.md b/README.md index 6067e2c..5184278 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,11 @@ enabled using the `-cache` flag. It supports the following values: variable be set. - azure URL (e.g. `azure://container-name/`) - will cache images on Azure Storage. This requires `AZURESTORAGE_ACCOUNT_NAME` and - `AZURESTORAGE_ACCESS_KEY` environmental variables set. + - redis URL (e.g. `redis://hostname/`) - will cache images on + the specified redis host. The full URL syntax is defined by the [redis URI + registration](https://www.iana.org/assignments/uri-schemes/prov/redis). + Rather than specify password in the URI, use the `REDIS_PASSWORD` + environment variable. For example, to cache files on disk in the `/tmp/imageproxy` directory: diff --git a/cmd/imageproxy/main.go b/cmd/imageproxy/main.go index 685a6da..75b8940 100644 --- a/cmd/imageproxy/main.go +++ b/cmd/imageproxy/main.go @@ -22,12 +22,15 @@ import ( "log" "net/http" "net/url" + "os" "strings" "github.com/PaulARoy/azurestoragecache" "github.com/diegomarangoni/gcscache" + "github.com/garyburd/redigo/redis" "github.com/gregjones/httpcache" "github.com/gregjones/httpcache/diskcache" + rediscache "github.com/gregjones/httpcache/redis" "github.com/peterbourgon/diskv" "sourcegraph.com/sourcegraph/s3cache" "willnorris.com/go/imageproxy" @@ -132,6 +135,12 @@ func parseCache() (imageproxy.Cache, error) { return gcscache.New(u.String()), nil case "azure": return azurestoragecache.New("", "", u.Host) + case "redis": + conn, err := redis.DialURL(u.String(), redis.DialPassword(os.Getenv("REDIS_PASSWORD"))) + if err != nil { + return nil, err + } + return rediscache.NewWithClient(conn), nil case "file": fallthrough default: