Scala使用工厂模式返回操作Redis集群的工具类

package come.gome.data.utils

import redis.clients.jedis.{HostAndPort, JedisCluster, JedisPool, JedisPoolConfig}

import scala.collection.JavaConverters.setAsJavaSetConverter

/**
 * @author lgy
 * @note redis工具类
 */
object JedisUtils {

  var jedis:JedisUtils = _
  val REDIS_MAX_TOTAL = "100"
  val REDIS_MAX_IDLE = "8"
  val REDIS_WAIT_MILLIS = "10000"
  val REDIS_HOST = ""

  //工厂模式
  def apply(): JedisUtils = {
    if (jedis == null){
      jedis = new JedisUtils()
      jedis.init()
    }
    jedis
  }

}

class JedisUtils{
  var pool: JedisPool = _
  var config: JedisPoolConfig = _
  var hosts: java.util.Set[HostAndPort] = _

  //初始化
  def init():Unit = {

    val redis_conf = Map[String, String]()

    config = new JedisPoolConfig()
    //可用连接实例的最大数目,如果赋值为-1表示不限制
    config.setMaxTotal(JedisUtils.REDIS_MAX_TOTAL.toInt)
    //控制一个Pool最多有多少个状态为idle(空闲的)jedis实例,默认值8
    config.setMaxIdle(JedisUtils.REDIS_MAX_IDLE.toInt)
    //等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时,如果超时直接抛出异常
    config.setMaxWaitMillis(JedisUtils.REDIS_WAIT_MILLIS.toLong)
    //在borrow一个jedis实例时,是否提前进行validate操作,如果为true则得到的jedis实例均是可用的
    config.setTestOnBorrow(false)
    //设置为true,归还连接时,会进行检查,检查不通过,销毁
    config.setTestOnReturn(false)

    clusterInit(JedisUtils.REDIS_HOST)
  }

  def clusterInit(redis_conf: String):Unit = {
    hosts = redis_conf
      .split(",")
      .map(s => HostAndPort.parseString(s))
      .toSet.asJava
  }

  //返回jedis集群连接
  def getJedisCluster:JedisCluster = {
    new JedisCluster(hosts,config)
  }

  //关闭连接
  def close(jedis: JedisCluster):Unit = {
    getJedisCluster.close()
  }

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐