Scala 操作Redis使用连接池工具类RedisUtil

 更新时间:2019年06月19日 10:57:24   作者:Gavin-Feng  
这篇文章主要介绍了Scala 操作Redis使用连接池工具类RedisUtil,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

本文介绍了Scala 操作Redis,分享给大家,具体如下:

package com.zjw.util

import java.util

import org.apache.commons.pool2.impl.GenericObjectPoolConfig
import org.apache.logging.log4j.scala.Logging
import redis.clients.jedis.{Jedis, JedisPool, Response}
import redis.clients.util.Pool

object RedisUtil extends Logging {
 private[this] var jedisPool: Pool[Jedis] = _

 def main(args: Array[String]): Unit = {
  val password = "h-{<Fc!yJL87_Zkc8S"
  val host = "192.168.100.101"
  val port = 6379
  val timeout = 1000
  RedisUtil.init(host, port, timeout, password, 0)
  //RedisUtil.set("Time".getBytes(), "2018-09-03 09:00:00".getBytes())
  //val result = RedisUtil.get("Time".getBytes())
  //println(new String(result))
  //val map = Map("name"-> "zhangsan","age"-> "21", "gender"-> "male", "id"-> "519099386")
  //RedisUtil.setCols("hash",map)

  // val result = RedisUtil.getCols("hash", Array("name", "age", "xx")).map(x => (x._1, new String(x._2)))
  // logger.info(result)
  val result = RedisUtil.bulkGetCols(Array("hash", "ss"))
  logger.info(s"result: ${result}")
 }

 def init(host: String, port: Int, timeout: Int, password: String, database: Int = 0): Unit = {
  jedisPool = new JedisPool(new GenericObjectPoolConfig, host, port, timeout, password, database)
 }

 def get(key: Array[Byte]): Array[Byte] = {
  val jedis = jedisPool.getResource
  val result: Array[Byte] = jedis.get(key)
  jedis.close()
  result
 }

 def set(key: Array[Byte], value: Array[Byte]): Boolean = {
  try {
   val jedis = jedisPool.getResource
   jedis.set(key, value)
   jedis.close()
   true
  } catch {
   case e: Exception => {
    logger.error(s"写入数据到Redis出错: ${e}")
    false
   }
  }
 }


 def getCols(key: String,
       cols: Array[String] = Array.empty
       ): Map[String, Array[Byte]] = {
  import scala.collection.JavaConverters._
  val jedis = jedisPool.getResource
  var map = Map.empty[String, Array[Byte]]
  if (cols.length > 0) {
   val pipe = jedis.pipelined()
   val response = pipe.hmget(key.getBytes(), cols.map(_.getBytes()): _*)
   pipe.sync()
   map = cols.zip(response.get.asScala).toMap.filter(x => x._2 != null)
   pipe.close()
  } else {
   logger.info(s"key: ${key}")
   val tmpMap: util.Map[Array[Byte], Array[Byte]] = jedis.hgetAll(key.getBytes())
   map = tmpMap.asScala.toMap.map(x => (new String(x._1), x._2))
  }
  jedis.close
  map
 }

 def getCols2(
        key: String,
        cols: Array[String] = Array.empty
       ): Map[String, Array[Byte]] = {
  val jedis = jedisPool.getResource
  var map = Map.empty[String, Array[Byte]]
  if (cols.length > 0) {
   for (col <- cols) {
    val value: Array[Byte] = jedis.hget(key.getBytes(), col.getBytes())
    if (null != value) {
     map = map + (col -> value)
    }
   }
  } else {
   logger.info(s"rowkey: ${key}")
   val tmpMap: util.Map[Array[Byte], Array[Byte]] = jedis.hgetAll(key.getBytes())
   import scala.collection.JavaConverters._
   map = tmpMap.asScala.toMap.map(x => (new String(x._1), x._2))
  }
  jedis.close
  map
 }

 def bulkGetCols(keys: Array[String],
         cols: Array[String] = Array.empty
         ): Map[String, Map[String, Array[Byte]]] = {
  import scala.collection.JavaConverters._
  var result: Map[String, Map[String, Array[Byte]]] = Map.empty
  val jedis = jedisPool.getResource
  val pipe = jedis.pipelined
  if (cols.length > 0) {
   val data = keys.map(x => {
    pipe.hmget(x.getBytes(), cols.map(_.getBytes()): _*)
   })

   pipe.sync
   pipe.close
   jedis.close

   result = keys.zip(data.map(_.get().asScala.toArray).map(cols.zip(_).toMap.filter(null != _._2)))
    .toMap.filter(_._2.nonEmpty)
  } else {
   val data: Array[Response[util.Map[Array[Byte], Array[Byte]]]] = keys.map(x => {
    pipe.hgetAll(x.getBytes())
   })
   pipe.sync
   pipe.close
   jedis.close

   result = keys.zip(data.map(_.get().asScala.map(x => (new String(x._1), x._2)).toMap))
    .toMap.filter(_._2.nonEmpty)
  }
  result
 }

 def bulkGetCols2(rowkeys: Array[String],
         cols: Array[String] = Array.empty
         ): Map[String, Map[String, Array[Byte]]] = {
  val jedis = jedisPool.getResource
  var map = Map.empty[String, Map[String, Array[Byte]]]
  import scala.collection.JavaConverters._
  for (rowkey <- rowkeys) {
   var cellMap = Map.empty[String, Array[Byte]]
   if (cols.length > 0) {
    for (col <- cols) {
     val value = jedis.hget(rowkey.getBytes(), col.getBytes())
     if (null != value) {
      cellMap = cellMap + (col -> value)
     }
    }
   } else {
    logger.info(s"rowkey: ${rowkey}")
    val tmpMap = jedis.hgetAll(rowkey.getBytes())
    cellMap = tmpMap.asScala.toMap.map(x => (new String(x._1), x._2))
   }
   if (cellMap.nonEmpty) {
    map = map + (rowkey -> cellMap)
   }
  }
  jedis.close
  map
 }

 def setCols(
        key: String,
        fieldValues: Map[String, String]
       ): Unit = {
  import scala.collection.JavaConverters._
  val data = fieldValues.map(element => {
   (element._1.getBytes(), element._2.getBytes())
  }).asJava
  val jedis = jedisPool.getResource
  jedis.hmset(key.getBytes(), data)
  jedis.close()
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • JVM中四种GC算法案例详解

    JVM中四种GC算法案例详解

    这篇文章主要介绍了JVM中四种GC算法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Java中的super关键字_动力节点Java学院整理

    Java中的super关键字_动力节点Java学院整理

    这篇文章主要介绍了Java中的super关键字的相关知识,需要的朋友参考下
    2017-04-04
  • 使用Spring自定义实现IOC和依赖注入(注解方式)

    使用Spring自定义实现IOC和依赖注入(注解方式)

    这篇文章主要介绍了使用Spring自定义实现IOC和依赖注入(注解方式),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 一篇文章超详细的介绍Java继承

    一篇文章超详细的介绍Java继承

    Java中的继承是一种机制,表示为一个对象获取父对象的所有属性和行为,下面这篇文章主要给大家介绍了关于Java继承的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-03-03
  • Java基于JDK 1.8的LinkedList源码详析

    Java基于JDK 1.8的LinkedList源码详析

    这篇文章主要给大家介绍了关于Java基于JDK 1.8的LinkedList源码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • IntelliJ IDEA如何设置JDK版本

    IntelliJ IDEA如何设置JDK版本

    这篇文章主要介绍了IntelliJ IDEA如何设置JDK版本问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • java锁机制ReentrantLock源码实例分析

    java锁机制ReentrantLock源码实例分析

    这篇文章主要为大家介绍了java锁机制ReentrantLock源码实例分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 浅谈springboot多模块(modules)开发

    浅谈springboot多模块(modules)开发

    这篇文章主要介绍了浅谈springboot多模块(modules)开发,详细的介绍了springboot多模块的实现,有兴趣的可以了解一下
    2017-09-09
  • Springboot启动后立即某个执行方法的四种方式

    Springboot启动后立即某个执行方法的四种方式

    spring项目如何在启动项目是执行一些操作,在spring中能通过那些操作实现这个功能呢,下面这篇文章主要给大家介绍了关于Springboot启动后立即某个执行方法的四种方式,需要的朋友可以参考下
    2022-06-06
  • 详解Java异常处理的使用与思考

    详解Java异常处理的使用与思考

    异常处理的概念起源于早期的编程语言,如 LISP、PL/I 和 CLU。这些编程语言首次引入了异常处理机制,以便在程序执行过程中检测和处理错误情况。本文主要来介绍一下Java中的异常处理,需要的可以参考一下
    2023-04-04

最新评论