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"寫入數(shù)據(jù)到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()
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot整合spring-data-jpa的方法
這篇文章主要介紹了SpringBoot整合spring-data-jpa的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06
Yml轉(zhuǎn)properties文件工具類YmlUtils的詳細(xì)過程(不用引任何插件和依賴)
這篇文章主要介紹了Yml轉(zhuǎn)properties文件工具類YmlUtils(不用引任何插件和依賴),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08
Java生成10個1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出
這篇文章主要介紹了Java生成10個1000以內(nèi)的隨機(jī)數(shù)并用消息框顯示數(shù)組內(nèi)容然后求和輸出,需要的朋友可以參考下2015-10-10
Spring中三種常見Bean的初始化參數(shù)機(jī)制你了解嗎
在Spring框架中,Bean的實例化與初始化是一個復(fù)雜的過程,本文我們主要來聊一聊它的常見的三種機(jī)制:InitializingBean接口、BeanDefinitionRegistryPostProcessor接口和EnvironmentAware接口,感興趣的小伙伴可以了解下2023-11-11
基于springboot服務(wù)間Feign調(diào)用超時的解決方案
這篇文章主要介紹了基于springboot服務(wù)間Feign調(diào)用超時的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
SpringBoot如何使用ApplicationContext獲取bean對象
這篇文章主要介紹了SpringBoot 如何使用ApplicationContext獲取bean對象,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Java BigDecimal解決double精度丟失的問題
我們在日常開發(fā)中, 有很多時候會遇到小數(shù)(double類型)精確計算,本文主要介紹了Java BigDecimal解決double精度丟失的問題,具有一定的參考價值,感興趣的可以了解一下2023-11-11

