昨天遇到了一個奇葩的需求:把僞造的資料持久化到Linux伺服器的Redis中
要說的話,其實也是很簡單的。大概有那麼幾種方法可以執行個體化到Redis中。
- 直接在Linux上使用Redis 指令把相應的key值和value值寫入。
- 寫一個.java的方法,使用jedis 把相應的key 和value寫入到Redis中
但是,由于資料條數很多,且都是比較長的JSON字元串。是以我不大可能會直接在Linux上操作Redis用戶端。是以簡便有效的方式就是寫一個.java 檔案批量處理然後寫入。
那麼問題來了:
我的.java檔案需要在Linux上使用javac編譯并運作。
但是由于我的java檔案中import有第三方jar的内容,直接進行javac編譯的話會報錯。
代碼如下:
package com.example;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisShardInfo;
import redis.clients.jedis.ShardedJedis;
import redis.clients.jedis.ShardedJedisPool;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
public class AddCompleteInfo {
static ShardedJedisPool pool;
static {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal();
config.setMaxIdle(); // 對象最大空閑時間
config.setMaxWaitMillis(); // 擷取對象最大等待時間。
config.setTestOnBorrow(true);
String host = "127.0.0.1";
int port = ;
List<JedisShardInfo> jdsInfoList = new ArrayList<JedisShardInfo>();
JedisShardInfo infoA = new JedisShardInfo(host, port);
jdsInfoList.add(infoA);
pool = new ShardedJedisPool(config, jdsInfoList);
}
public static void main(String[] args) {
String file = "/testJva/infroad.txt";
String reader = AddCompleteInfo.reader(file);
Pattern p = Pattern.compile("&");
String[] split = p.split(reader);
for (String string : split) {
System.out.println("分開的值是:"+string);
JSONObject parseObject = JSON.parseObject(string);
String token = parseObject.getString("token");
System.out.println("token的值是:"+token);
ShardedJedis jedis = pool.getResource();
jedis.set(token, string);
jedis.sadd("ALLTOKEN", token);
jedis.sadd("COMPLETED", token);
if (jedis != null)
jedis.close();
}
public static String reader(String filePath) {
try {
File file = new File(filePath);
if (file.isFile() && file.exists()) {
InputStreamReader read = new InputStreamReader(
new FileInputStream(file), "UTF-8");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = bufferedReader.readLine();
while (lineTxt != null) {
return lineTxt;
}
}
} catch (UnsupportedEncodingException | FileNotFoundException e) {
System.out.println("Cannot find the file specified!");
e.printStackTrace();
} catch (IOException e) {
System.out.println("Error reading file content!");
e.printStackTrace();
}
return null;
}
}
最後使用Eclipse将隻包含主要代碼的java項目,打成一個Runnable JAR file的 jar包
然後在Linux上使用,java -jar + jar包名稱 的方式來運作,這樣,就可以直接使得.java檔案中的main方法運作下去
具體的過程看下圖:
在晚上上述三步之後,就完成了編譯的過程。接着需要把輸出的jar包上傳到伺服器上進行運作。
infroad.txt 這個裡面是包含了我json字元串的檔案,裡面每一段json都是按照&作為分割符号進行分割的。具體看代碼
然後使用指令行運作這個jar檔案即可。
java -jar kkkkkkkskk.jar