Skip to content

Instantly share code, notes, and snippets.

@skuro
Created November 9, 2022 21:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save skuro/cd8556772f9223273816f822fbb5b0a4 to your computer and use it in GitHub Desktop.
Save skuro/cd8556772f9223273816f822fbb5b0a4 to your computer and use it in GitHub Desktop.
(ns io.codehopper.fun-with-redis
(:require [taoensso.carmine :as car :refer (wcar)]
[skyscraper.core :as sky]
[skyscraper.cache :as sky.cache]
[reaver]))
(def seed
[{:url "https://clojuredays.org",
:processor :page
:page 2022}])
(def redis {:pool {} :spec {:uri "redis://127.0.0.1:6379"}})
(defn redis-cache
[redis-conn]
(reify
sky.cache/CacheBackend
(save-blob [_ key blob metadata]
(car/wcar redis-conn
(car/set key {:blob blob
:meta metadata})))
(load-blob [_ key]
(car/wcar redis-conn
(car/get key)))
java.io.Closeable
(close [_]
nil)))
(sky/defprocessor :page
:cache-template "dcd/:page"
:skyscraper.db/columns [:sponsor :year]
:process-fn (fn [doc ctx]
(concat
(reaver/extract-from doc
"#sponsors a"
[:sponsor :year]
".sponsor" (reaver/attr :href)
".sponsor" (constantly (str (:page ctx))))
)))
(defn run [cache]
(sky/scrape! seed
:html-cache cache
:db-file "/tmp/dcd.db"
:parse-fn sky/parse-reaver))
(comment
(def _x (redis-cache redis))
(sky.cache/save-blob _x :cache-key "I'm a blob" {:meta "too-meta"})
(sky.cache/load-blob _x :cache-key)
(car/wcar redis
(car/get "dcd/1"))
(car/wcar redis
(car/keys "*"))
(run (redis-cache redis)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment