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() } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
SpringBoot整合SpringSecurity和JWT和Redis實現統一鑒權認證
Spring Security是一個可以為Java應用程序提供全面安全服務的框架,同時它也可以輕松擴展以滿足自定義需求,本文主要介紹了SpringBoot整合SpringSecurity和JWT和Redis實現統一鑒權認證,感興趣的可以了解一下2023-11-11MyBatis-Plus UpdateWrapper 使用常見陷阱和解決方案
MyBatis-Plus是Mybatis的一個增強,簡化了Mybatis的開發(fā)過程,不僅保持了Mybatis原有的功能,而且在無代碼侵略下增加了許多的增強的功能,提供了豐富的CRUD操作,單表的CRUD操作無需編寫SQL語句,本文介紹的是UpdateWrapper的常見陷阱和對應的解決方案,感興趣的朋友一起看看吧2024-08-08Java面試崗常見問題之ArrayList和LinkedList的區(qū)別
ArrayList和LinkedList作為我們Java中最常使用的集合類,很多人在被問到他們的區(qū)別時,憋了半天僅僅冒出一句:一個是數組一個是鏈表。這樣回答簡直讓面試官吐血。為了讓兄弟們打好基礎,我們通過實際的使用測試,好好說一下ArrayList和LinkedList的區(qū)別這道經典的面試題2022-01-01java數組算法例題代碼詳解(冒泡排序,選擇排序,找最大值、最小值,添加、刪除元素等)
這篇文章主要介紹了java數組算法例題代碼詳解(冒泡排序,選擇排序,找最大值、最小值,添加、刪除元素等),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05淺談java并發(fā)之計數器CountDownLatch
CountDownLatch是通過一個計數器來實現的,當我們在new 一個CountDownLatch對象的時候需要帶入該計數器值,該值就表示了線程的數量。下面我們來深入了解一下吧2019-06-06SpringBoot中自定義首頁(默認頁)及favicon的方法
這篇文章主要介紹了SpringBoot中如何自定義首頁(默認頁)及favicon,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08