 
 (comment (wcar {} (car/ping) (extend-exists nil ["k1" "invalid" "k3"])))
 
+(def ^:private k-evictable "carmine:tundra:evictable")
 (defn- extend-exists-missing-ks [ttl-ms ks & [only-evictable?]]
   (let [existance-replies (->> (extend-exists ttl-ms ks)
                                (car/with-replies) ; Single bulk reply

    datastore     - Storage for frozen key data. Default datastores:
                    `taoensso.carmine.tundra.faraday/faraday-datastore`
                    `taoensso.carmine.tundra.s3/s3-datastore`.
    :freezer      - Optional. Preps key data to/from datastore. May provide
                    services like compression and encryption, etc. Defaults to
                    Nippy with default options (Snappy compression and no

                    Otherwise YOU WILL IRREVOCABLY **LOSE DATA**.

  See `ensure-ks`, `dirty`, `worker` for TundraStore API."
  [datastore & [{:keys [qname freezer redis-ttl-ms]
                 :or   {qname "default" freezer nippy-freezer}}]]

  (assert (or (nil? freezer) (satisfies? IFreezer freezer)))
  (assert (satisfies? IDataStore datastore))
  (assert (or (nil? redis-ttl-ms) (>= redis-ttl-ms (* 1000 60 60 10)))
          (str "Bad TTL (< 10 hours): " redis-ttl-ms))

  (->TundraStore datastore freezer
    {:tqname (format "carmine-tundra-%s" (name qname))
     :redis-ttl-ms redis-ttl-ms}))
