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()
}
}