redis 导出数据到文件
- 工作中碰到一个这样的场景:flink 处理数据,sink到redis。
- 完成之后想直接去查看Redis的所有key-value,使用三方工具不够直观,于是想了个办法,直接把所有的key-value导出来,放在文本里查看分析结果。
- 代码如下
package com.cywx.app; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; import java.io.*; import java.util.Set; /** * @Author:HMZ * @Description:导出redis数据 * @Data:11:46 2021.04.25 */ public class test { public static void main(String[] args) throws IOException { //获取配置 JedisPoolConfig poolConfig = new JedisPoolConfig(); poolConfig.setMaxTotal(10000); poolConfig.setMaxIdle(32); poolConfig.setMaxWaitMillis(100 * 1000); poolConfig.setTestOnBorrow(true); //连接redis JedisPool jedisPool = new JedisPool(poolConfig, "***.***.***.***", 6379, 10000,"123",3); Jedis jedis = jedisPool.getResource(); //获取所有的key Set<String> keys = jedis.keys("**"); BufferedWriter bw1 = new BufferedWriter(new FileWriter("D:\\cell.txt")); int a =0; int b =0; //遍历所有的key,并写入本地key.txt for (String key : keys) { a++; bw1.write(key); bw1.newLine(); bw1.flush(); System.out.println("写入第:"+a+"个key"); } //关流 bw1.close(); //创建读写流 BufferedReader br = new BufferedReader(new FileReader("D:\\key.txt")); BufferedWriter bw2 = new BufferedWriter(new FileWriter("D:\\value.txt")); //遍历key.txt的没一个key,并去redis获取这个key的value,然后写入本地value.txt String str; while ((str = br.readLine()) != null) { b++; String s = jedis.get(str); bw2.write(str+","); bw2.write(s); bw2.newLine(); bw2.flush(); System.out.println("写入第:"+b+"个基站信息"); } bw2.close(); System.out.println("完工"); jedisPool .close; jedis.close; } }
- 键值对共999万个,key放在了一个set中,实测可行。
- 实测查询redis key 写入本地 的速度比较慢,获取key的速度非常快。
- 听说redis支持了多线程,有大佬可以试试。