This code is a simple code for caching static resources. If data stored in memory? caching. If not stored in memory or expired? proxing and cached.
package main
import (
"fmt"
"strings"
"sync"
"time"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/proxy"
"github.com/patrickmn/go-cache"
)
type cache_data struct {
response_header map[string]string
response_body []byte
}
var caching_value = cache.New(5*time.Minute, 30*time.Minute)
var lhb_web_url string = "http://lhb-web.prd-lhb.svc.cluster.local"
var cacheMutex1 = &sync.Mutex{}
func call_web(c *fiber.Ctx) error {
uri := c.OriginalURL()
request_url := lhb_web_url + uri
cacheMutex1.Lock()
cachedVal, found := caching_value.Get(uri)
if !found {
if err := proxy.Do(c, request_url); err != nil {
return err
}
will_caching := &cache_data{c.GetRespHeaders(), c.Response().Body()}
fmt.Println("Data Store!")
caching_value.Set(uri, will_caching, cache.DefaultExpiration)
asdf, _ := caching_value.Get(uri)
fmt.Println(asdf.(*cache_data).response_header)
cacheMutex1.Unlock()
return nil
}
cacheMutex1.Unlock()
fmt.Println("Caching!")
cachedData := cachedVal.(*cache_data)
for k, v := range cachedData.response_header {
c.Set(k, v)
}
c.Response().BodyWriter().Write(cachedData.response_body)
return nil
}
func call_was_api(c *fiber.Ctx) error {
var new_url string
uri := c.OriginalURL()
if strings.HasPrefix(uri, "/lhbtest") {
new_url = lhb_web_url + uri
} else {
new_url = lhb_web_url + "/lhbtest" + uri
}
if err := proxy.Do(c, new_url); err != nil {
return err
}
return nil
}
func main() {
app := fiber.New()
app.Get("/templates/*", call_web)
app.Get("/css/*", call_web)
app.Get("/download/*", call_web)
app.Get("/images/*", call_web)
app.Get("/js/*", call_web)
app.Get("/module/*", call_web)
app.Get("/imageView/*", call_web)
app.Use("/", call_was_api)
app.Listen(":80")
}
When i request to web page twice and watching log. Stored data and caching data is dirrent. Why? Since the header value is changed, rendering does not work.
[hhhjjj0918@asdfasd ~]$ k logs -f pathadd-99878fd74-fkdkc -n prd-lhb | grep -A2 http://blahblah.com/js/jquery/jquery-3.3.1.min.js
http://blahblah.com/js/jquery/jquery-3.3.1.min.js
Data Store!
map[Accept-Ranges:bytes Content-Length:86927 Content-Type:application/javascript Date:Wed, 14 Jun 2023 05:22:58 GMT Etag:"644122c7-1538f" Last-Modified:Thu, 20 Apr 2023 11:32:23 GMT Server:nginx/1.24.0]
--
http://blahblah.com/js/jquery/jquery-3.3.1.min.js
Caching!
map[Accept-Ranges:bytes Content-Length:46727 Content-Type:image/jpegn/javascript Date:Wed, 14 Jun 2023 05:22:58 GMT Etag:bytesalive1538f" Last-Modified:Sun, 11 Jun 2023 11:18:54 GMT Server:nginx/1.24.0]