Scala 操作Redis使用連接池工具類RedisUtil
2019-06-29 16:25Gavin-Feng Java教程
這篇文章主要介紹了Scala 操作Redis使用連接池工具類RedisUtil,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
本文介紹了Scala 操作Redis,分享給大家,具體如下:
005 | import org.apache.commons.pool2.impl.GenericObjectPoolConfig |
006 | import org.apache.logging.log4j.scala.Logging |
007 | import redis.clients.jedis.{Jedis, JedisPool, Response} |
008 | import redis.clients.util.Pool |
010 | object RedisUtil extends Logging { |
011 | private [ this ] var jedisPool: Pool[Jedis] = _ |
013 | def main(args: Array[String]): Unit = { |
014 | val password = "h-{<Fc!yJL87_Zkc8S" |
015 | val host = "192.168.100.101" |
018 | RedisUtil.init(host, port, timeout, password, 0 ) |
027 | val result = RedisUtil.bulkGetCols(Array( "hash" , "ss" )) |
028 | logger.info(s "result: ${result}" ) |
031 | def init(host: String, port: Int, timeout: Int, password: String, database: Int = 0 ): Unit = { |
032 | jedisPool = new JedisPool( new GenericObjectPoolConfig, host, port, timeout, password, database) |
035 | def get(key: Array[Byte]): Array[Byte] = { |
036 | val jedis = jedisPool.getResource |
037 | val result: Array[Byte] = jedis.get(key) |
042 | def set(key: Array[Byte], value: Array[Byte]): Boolean = { |
044 | val jedis = jedisPool.getResource |
045 | jedis.set(key, value) |
049 | case e: Exception => { |
050 | logger.error(s "寫入數據到Redis出錯: ${e}" ) |
057 | def getCols(key: String, |
058 | cols: Array[String] = Array.empty |
059 | ): Map[String, Array[Byte]] = { |
060 | import scala.collection.JavaConverters._ |
061 | val jedis = jedisPool.getResource |
062 | var map = Map.empty[String, Array[Byte]] |
063 | if (cols.length > 0 ) { |
064 | val pipe = jedis.pipelined() |
065 | val response = pipe.hmget(key.getBytes(), cols.map(_.getBytes()): _*) |
067 | map = cols.zip(response.get.asScala).toMap.filter(x => x._2 != null ) |
070 | logger.info(s "key: ${key}" ) |
071 | val tmpMap: util.Map[Array[Byte], Array[Byte]] = jedis.hgetAll(key.getBytes()) |
072 | map = tmpMap.asScala.toMap.map(x => ( new String(x._1), x._2)) |
080 | cols: Array[String] = Array.empty |
081 | ): Map[String, Array[Byte]] = { |
082 | val jedis = jedisPool.getResource |
083 | var map = Map.empty[String, Array[Byte]] |
084 | if (cols.length > 0 ) { |
086 | val value: Array[Byte] = jedis.hget(key.getBytes(), col.getBytes()) |
088 | map = map + (col -> value) |
092 | logger.info(s "rowkey: ${key}" ) |
093 | val tmpMap: util.Map[Array[Byte], Array[Byte]] = jedis.hgetAll(key.getBytes()) |
094 | import scala.collection.JavaConverters._ |
095 | map = tmpMap.asScala.toMap.map(x => ( new String(x._1), x._2)) |
101 | def bulkGetCols(keys: Array[String], |
102 | cols: Array[String] = Array.empty |
103 | ): Map[String, Map[String, Array[Byte]]] = { |
104 | import scala.collection.JavaConverters._ |
105 | var result: Map[String, Map[String, Array[Byte]]] = Map.empty |
106 | val jedis = jedisPool.getResource |
107 | val pipe = jedis.pipelined |
108 | if (cols.length > 0 ) { |
109 | val data = keys.map(x => { |
110 | pipe.hmget(x.getBytes(), cols.map(_.getBytes()): _*) |
117 | result = keys.zip(data.map(_.get().asScala.toArray).map(cols.zip(_).toMap.filter( null != _._2))) |
118 | .toMap.filter(_._2.nonEmpty) |
120 | val data: Array[Response[util.Map[Array[Byte], Array[Byte]]]] = keys.map(x => { |
121 | pipe.hgetAll(x.getBytes()) |
127 | result = keys.zip(data.map(_.get().asScala.map(x => ( new String(x._1), x._2)).toMap)) |
128 | .toMap.filter(_._2.nonEmpty) |
133 | def bulkGetCols2(rowkeys: Array[String], |
134 | cols: Array[String] = Array.empty |
135 | ): Map[String, Map[String, Array[Byte]]] = { |
136 | val jedis = jedisPool.getResource |
137 | var map = Map.empty[String, Map[String, Array[Byte]]] |
138 | import scala.collection.JavaConverters._ |
139 | for (rowkey <- rowkeys) { |
140 | var cellMap = Map.empty[String, Array[Byte]] |
141 | if (cols.length > 0 ) { |
143 | val value = jedis.hget(rowkey.getBytes(), col.getBytes()) |
145 | cellMap = cellMap + (col -> value) |
149 | logger.info(s "rowkey: ${rowkey}" ) |
150 | val tmpMap = jedis.hgetAll(rowkey.getBytes()) |
151 | cellMap = tmpMap.asScala.toMap.map(x => ( new String(x._1), x._2)) |
153 | if (cellMap.nonEmpty) { |
154 | map = map + (rowkey -> cellMap) |
163 | fieldValues: Map[String, String] |
165 | import scala.collection.JavaConverters._ |
166 | val data = fieldValues.map(element => { |
167 | (element._1.getBytes(), element._2.getBytes()) |
169 | val jedis = jedisPool.getResource |
170 | jedis.hmset(key.getBytes(), data) |
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。