当前位置:   article > 正文

redis中scan使用之java(api)和scala(api)_jedispoolutil.scan

jedispoolutil.scan

一、scala(api)

1、工具类

  1. package com.cn.util
  2. import redis.clients.jedis.JedisPool
  3. object RedisUtils {
  4. private val host = "master"
  5. private val port = 6379
  6. //private val poolConfig = new GenericObjectPoolConfig()
  7. lazy val pool = new JedisPool(host, port)
  8. //关闭
  9. lazy val hooks = new Thread() {
  10. override def run(): Unit = {
  11. println("Execute hook thread: " + this)
  12. pool.destroy()
  13. }
  14. }
  15. }

2、测试

  1. package com.cn.util
  2. import redis.clients.jedis.ScanParams
  3. import scala.util.control.Breaks.{break, breakable}
  4. object TestRedis {
  5. def main(args: Array[String]): Unit = {
  6. val jedis = RedisUtils.pool.getResource
  7. jedis.auth("123456")
  8. jedis.select(2)
  9. var scanRet = "0"
  10. val params = new ScanParams()
  11. params.`match`("*ll*")
  12. params.count(2)
  13. breakable {
  14. do {
  15. val ret = jedis.scan(scanRet, params)
  16. //返回下次遍历的游标
  17. scanRet = ret.getStringCursor
  18. val resultList = ret.getResult
  19. // val value = resultList.iterator()
  20. // while (value.hasNext){
  21. // println(value.next())
  22. // }
  23. resultList.toArray.foreach(x => println(x))
  24. } while (!scanRet.equals("0"))
  25. }
  26. jedis.close()
  27. }
  28. }

3、输出结果

  1. hello
  2. ahellog
  3. hellog
  4. hellp

二、java(api)

1、工具类

  1. package com.cn.until;
  2. import redis.clients.jedis.Jedis;
  3. import redis.clients.jedis.JedisPool;
  4. import redis.clients.jedis.JedisPoolConfig;
  5. /**
  6. *在高版本的jedis jar包,比如本版本2.9.0,JedisPoolConfig没有setMaxActive和setMaxWait属性了
  7. * 这是因为高版本中官方废弃了此方法,用以下两个属性替换。
  8. * maxActive ==> maxTotal
  9. * maxWait==> maxWaitMillis
  10. */
  11. public class RedisUtil {
  12. //创建连接池对象
  13. private static JedisPool pool=null;
  14. //设定连接超时时间
  15. private static int POOL_TIMEOUT = 10000;
  16. //创建连接池
  17. public static JedisPool getPool(String host,int port,String pwd){
  18. if(pool==null ){
  19. JedisPoolConfig config = new JedisPoolConfig();
  20. //设置jedis的最大实例数
  21. config.setMaxTotal(10);
  22. //设置jedis的最大空闲实例数
  23. config.setMaxIdle(5);
  24. // 表示当borrow(引入)一个jedis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisConnectionException;
  25. config.setMaxWaitMillis(1000 * 10);
  26. // 在borrow一个jedis实例时,是否提前进行validate操作;如果为true,则得到的jedis实例均是可用的;
  27. config.setTestOnBorrow(true);
  28. pool=new JedisPool(config,host,port,POOL_TIMEOUT,pwd);
  29. }
  30. return pool;
  31. }
  32. //关闭连接池
  33. public static void closePool(){
  34. if(pool!=null){
  35. pool.close();
  36. }
  37. }
  38. //归还jedis实例到连接池
  39. public static void returnJedis2Pool(Jedis jedis){
  40. if(jedis!=null){
  41. jedis.close();
  42. }
  43. }
  44. }

2、测试

  1. package com.cn.service;
  2. import com.cn.until.RedisUtil;
  3. import redis.clients.jedis.Jedis;
  4. import redis.clients.jedis.JedisPool;
  5. import redis.clients.jedis.ScanParams;
  6. import redis.clients.jedis.ScanResult;
  7. import java.util.List;
  8. public class TestRedisScan {
  9. public static void main(String[] args) {
  10. String host="master";
  11. int port=6379;
  12. String pwd="123456";
  13. JedisPool pool = RedisUtil.getPool(host, port, pwd);
  14. Jedis jedis = pool.getResource();
  15. jedis.select(2);
  16. String scanRet="0";
  17. ScanParams scanParams = new ScanParams();
  18. //模糊查询
  19. scanParams.match("*ll*");
  20. //每次查询两条
  21. scanParams.count(2);
  22. do{
  23. ScanResult<String> ret = jedis.scan(scanRet, scanParams);
  24. //返回下次使用的游标
  25. scanRet = ret.getStringCursor();
  26. //返回结果集
  27. List<String> resultList = ret.getResult();
  28. for (String result:resultList) {
  29. System.out.println(result);
  30. }
  31. }while (!scanRet.equals("0"));
  32. //归还jedis实例
  33. RedisUtil.returnJedis2Pool(jedis);
  34. //关闭连接池
  35. RedisUtil.closePool();
  36. }
  37. }

3、输出结果

  1. hello
  2. ahellog
  3. hellog
  4. hellp

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号