killme2008 / carmine-sentinel

A Clojure library designed to connect redis by sentinel, make carmine to support sentinel.
Eclipse Public License 1.0
14 stars 4 forks source link

carmine-sentinel/wcar 有没有可能支持不经过 sentinel 直连 redis? #15

Closed ylgrgyq closed 5 years ago

ylgrgyq commented 5 years ago

有没有可能支持这样的使用方式:

(def server-spec
  {:host       (env :redis-host "127.0.0.1")
   :port       (int-env :redis-port 6379)
   :timeout-ms (int-env :redis-timeout 2000)
   :db         (int-env :redis-db 2)
   :password   (not-empty (env :redis-password))})

(defmacro wcar* [& body]
  (car-sentinel/wcar {:pool           pool
                      :spec           server-spec
                      :sentinel-group (env :sentinel-group-config)
                      :master-name    (env :sentinel-master-name)}
    ~@body))

(wcar*
  (car/set "x" 1))

通过环境变量去提供 sentinel-group 和 master-name 的配置,如果提供的话,则走 sentinel 方式去连 redis。如果没有提供,则通过 server-spec 配置内的 host, port 直接去连 redis。如果 server-spec 内忘记提供 host, port 就报错,连不上 redis。

这样的好处是在本地调试时候,不用将完整的 sentinel 环境全部搭建起来,只用起一个单机的 redis 就行了,本地配置不提供 :sentinel-group-config 和 :sentinel-master-name 的配置。之后在线上环境提供这两个配置就能使用线上的 sentinel 集群提供高可用。

killme2008 commented 5 years ago

:+1: