From 235b8f871fdfa35f9595268d194d28a3de655ec0 Mon Sep 17 00:00:00 2001 From: Mitchell Riedstra Date: Sun, 24 Oct 2021 15:57:32 -0400 Subject: Unix sockets for redis. Page use FS interface. Clear redis func. Additionally, Funcs can be passed in. --- cmd/server/app.go | 19 +++++++++++++++++++ cmd/server/handlers.go | 9 +++++++-- cmd/server/main.go | 11 +++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) (limited to 'cmd/server') diff --git a/cmd/server/app.go b/cmd/server/app.go index c4992ae..4f62a09 100644 --- a/cmd/server/app.go +++ b/cmd/server/app.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "log" "os" "github.com/gomodule/redigo/redis" @@ -72,3 +73,21 @@ func loadConf(fn string) (*App, error) { return app, nil } + +// ClearRedis is a little helper function that allows us to easily clear +// the redis cache at runtime. +func (a *App) ClearRedis() error { + if a.redisPool == nil { + return nil + } + + client := a.redisPool.Get() + defer client.Close() + + _, err := client.Do("DEL", a.RedisKey) + if err != nil { + log.Println("Encountered error clearing redis cache: ", err) + } + + return fmt.Errorf("clearing redis: %w", err) +} diff --git a/cmd/server/handlers.go b/cmd/server/handlers.go index 61bb623..205d462 100644 --- a/cmd/server/handlers.go +++ b/cmd/server/handlers.go @@ -14,13 +14,18 @@ func (a *App) ServeHTTP(w http.ResponseWriter, r *http.Request) { rtr := mux.NewRouter() rtr.HandleFunc(a.ReIndexPath, a.RebuildIndexHandler) rtr.PathPrefix("/static/").Handler(a.StaticHandler()) - rtr.PathPrefix(fmt.Sprintf("/%s/{tag}", a.FeedPrefix)).HandlerFunc( - a.FeedHandler) if a.redisPool != nil { + rtr.PathPrefix(fmt.Sprintf("/%s/{tag}", a.FeedPrefix)).Handler( + rediscache.HandleWithParams(a.redisPool, a.RedisKey, + http.HandlerFunc(a.FeedHandler))) + rtr.PathPrefix("/").Handler(rediscache.Handle( a.redisPool, a.RedisKey, http.HandlerFunc(a.PageHandler))) } else { + rtr.PathPrefix(fmt.Sprintf("/%s/{tag}", a.FeedPrefix)).HandlerFunc( + a.FeedHandler) + rtr.PathPrefix("/").Handler(http.HandlerFunc(a.PageHandler)) } diff --git a/cmd/server/main.go b/cmd/server/main.go index 21f7031..912cba0 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -6,6 +6,8 @@ import ( "log" "net/http" "os" + "strings" + "text/template" "time" "github.com/gomodule/redigo/redis" @@ -73,6 +75,11 @@ func main() { //nolint:funlen MaxActive: 12000, //nolint:gomnd Dial: func() (redis.Conn, error) { c, err := redis.Dial("tcp", *redisAddr) + + if strings.HasPrefix(*redisAddr, "unix:") { + c, err = redis.Dial("unix", strings.TrimPrefix(*redisAddr, "unix:")) + } + if err != nil { log.Println("Redis dial error: ", err) } @@ -87,6 +94,10 @@ func main() { //nolint:funlen os.Stderr.Write(b) } + page.Funcs = template.FuncMap{ + "ClearRedis": app.ClearRedis, + } + srv := &http.Server{ Handler: app, Addr: *listen, -- cgit v1.2.3