欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Scala 操作Redis使用連接池工具類(lèi)RedisUtil

 更新時(shí)間:2019年06月19日 10:57:24   作者:Gavin-Feng  
這篇文章主要介紹了Scala 操作Redis使用連接池工具類(lèi)RedisUtil,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

本文介紹了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"寫(xiě)入數(shù)據(jù)到Redis出錯(cuò): ${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()
 }

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot整合SpringSecurity和JWT和Redis實(shí)現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證

    SpringBoot整合SpringSecurity和JWT和Redis實(shí)現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證

    Spring Security是一個(gè)可以為Java應(yīng)用程序提供全面安全服務(wù)的框架,同時(shí)它也可以輕松擴(kuò)展以滿(mǎn)足自定義需求,本文主要介紹了SpringBoot整合SpringSecurity和JWT和Redis實(shí)現(xiàn)統(tǒng)一鑒權(quán)認(rèn)證,感興趣的可以了解一下
    2023-11-11
  • JSP 獲取spring容器中bean的兩種方法總結(jié)

    JSP 獲取spring容器中bean的兩種方法總結(jié)

    這篇文章主要介紹了JSP 獲取spring容器中bean的方法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 淺談idea中導(dǎo)入maven項(xiàng)目的兩種方式

    淺談idea中導(dǎo)入maven項(xiàng)目的兩種方式

    本文主要介紹了淺談idea中導(dǎo)入maven項(xiàng)目的兩種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08
  • MyBatis-Plus UpdateWrapper 使用常見(jiàn)陷阱和解決方案

    MyBatis-Plus UpdateWrapper 使用常見(jiàn)陷阱和解決方案

    MyBatis-Plus是Mybatis的一個(gè)增強(qiáng),簡(jiǎn)化了Mybatis的開(kāi)發(fā)過(guò)程,不僅保持了Mybatis原有的功能,而且在無(wú)代碼侵略下增加了許多的增強(qiáng)的功能,提供了豐富的CRUD操作,單表的CRUD操作無(wú)需編寫(xiě)SQL語(yǔ)句,本文介紹的是UpdateWrapper的常見(jiàn)陷阱和對(duì)應(yīng)的解決方案,感興趣的朋友一起看看吧
    2024-08-08
  • Java面試崗常見(jiàn)問(wèn)題之ArrayList和LinkedList的區(qū)別

    Java面試崗常見(jiàn)問(wèn)題之ArrayList和LinkedList的區(qū)別

    ArrayList和LinkedList作為我們Java中最常使用的集合類(lèi),很多人在被問(wèn)到他們的區(qū)別時(shí),憋了半天僅僅冒出一句:一個(gè)是數(shù)組一個(gè)是鏈表。這樣回答簡(jiǎn)直讓面試官吐血。為了讓兄弟們打好基礎(chǔ),我們通過(guò)實(shí)際的使用測(cè)試,好好說(shuō)一下ArrayList和LinkedList的區(qū)別這道經(jīng)典的面試題
    2022-01-01
  • java數(shù)組算法例題代碼詳解(冒泡排序,選擇排序,找最大值、最小值,添加、刪除元素等)

    java數(shù)組算法例題代碼詳解(冒泡排序,選擇排序,找最大值、最小值,添加、刪除元素等)

    這篇文章主要介紹了java數(shù)組算法例題代碼詳解(冒泡排序,選擇排序,找最大值、最小值,添加、刪除元素等),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • 小伙熬夜用Java重現(xiàn)經(jīng)典超級(jí)馬里奧代碼實(shí)例

    小伙熬夜用Java重現(xiàn)經(jīng)典超級(jí)馬里奧代碼實(shí)例

    這篇文章主要介紹了Java重現(xiàn)經(jīng)典超級(jí)馬里奧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 淺談java并發(fā)之計(jì)數(shù)器CountDownLatch

    淺談java并發(fā)之計(jì)數(shù)器CountDownLatch

    CountDownLatch是通過(guò)一個(gè)計(jì)數(shù)器來(lái)實(shí)現(xiàn)的,當(dāng)我們?cè)趎ew 一個(gè)CountDownLatch對(duì)象的時(shí)候需要帶入該計(jì)數(shù)器值,該值就表示了線(xiàn)程的數(shù)量。下面我們來(lái)深入了解一下吧
    2019-06-06
  • SpringBoot中自定義首頁(yè)(默認(rèn)頁(yè))及favicon的方法

    SpringBoot中自定義首頁(yè)(默認(rèn)頁(yè))及favicon的方法

    這篇文章主要介紹了SpringBoot中如何自定義首頁(yè)(默認(rèn)頁(yè))及favicon,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):順序隊(duì)列和循環(huán)隊(duì)列

    java數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):順序隊(duì)列和循環(huán)隊(duì)列

    下面小編就為大家分享一篇java隊(duì)列實(shí)現(xiàn)方法(順序隊(duì)列,循環(huán)隊(duì)列),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-08-08

最新評(píng)論