From 1342e655e2adf93285ab96209c7acd09897d569b Mon Sep 17 00:00:00 2001 From: Rodrigo Nossal Date: Sat, 4 Aug 2018 21:17:23 -0300 Subject: [PATCH] db cached --- project.clj | 3 +-- src/clojure/nossal/api/shortner.clj | 4 +--- src/clojure/nossal/db.clj | 11 +++++++++++ 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/project.clj b/project.clj index af6c802..77b7f24 100644 --- a/project.clj +++ b/project.clj @@ -84,8 +84,7 @@ :profiles {:production {:env {:dev false :production true} :prep-tasks [["cljsbuild" "once" "app" "sw"] ["garden" "once"]]} - - :dev {:env {:dev "true", :production "false", :database-url "postgres://localhost/nossal"} + :dev {:env {:dev "true", :production "false", :database-url "postgres://nossal:nossal@localhost:5432/nossal"} ; :prep-tasks [["garden" "once"]] :cljsbuild {:builds {:app {:source-paths ["src/clojurescript/nossal/app"] diff --git a/src/clojure/nossal/api/shortner.clj b/src/clojure/nossal/api/shortner.clj index 4b0d20d..17a3cbf 100644 --- a/src/clojure/nossal/api/shortner.clj +++ b/src/clojure/nossal/api/shortner.clj @@ -20,10 +20,8 @@ (-> (res/response (json/write-str (encode (:id (first (data/insert-url db {:url url})))))) (res/content-type "text/plain"))) -(def get-url (memoize (fn [id] (data/url-by-id db {:id (decode encoded-id)})))) - (defn redirect [encoded-id] - (let [url (:url (get-url encoded-id))] + (let [url (:url (data/get-data data/url-by-id {:id (decode encoded-id)}))] (log/info url) (do (client/post "https://www.google-analytics.com/collect" diff --git a/src/clojure/nossal/db.clj b/src/clojure/nossal/db.clj index f0c8f95..0bcc03b 100644 --- a/src/clojure/nossal/db.clj +++ b/src/clojure/nossal/db.clj @@ -1,6 +1,7 @@ (ns nossal.db (:require [hugsql.core :as hugsql] [clojure.string :as s] + [clojure.core.cache :as cache] [environ.core :refer [env]] [heroku-database-url-to-jdbc.core :as h])) @@ -13,3 +14,13 @@ (hugsql/def-db-fns "sql/schema.sql") (hugsql/def-sqlvec-fns "sql/schema.sql") + + +(defonce cache-store (atom (cache/lru-cache-factory {}))) + +(defn get-data [func key] + (cache/lookup (swap! cache-store + #(if (cache/has? % key) + (cache/hit % key) + (cache/miss % key (func db key)))) + key))