IP Visualizer 라이브 데모 및 redis 대량 로드 노드.
10961 단어 webdevnoderedisredishackathon
ipv.karate.monster으로 이동하여 사용해 보십시오. 그리고 네, 크롬 모바일 브라우저에서 실행하지 마세요. 터치 기능이 이상하고 정상적으로 작동하지 않습니다. 파이어폭스 모바일에서 작동하는 것 같지만, 모바일용으로 실제로 개발된 적이 없으므로 마일리지가 다양합니다. 컴퓨터를 사용하세요 😉.
사용하는 방법? 십자선 버튼을 누르고 지도를 클릭하고 드래그하여 원을 만듭니다.
원하는 대로 물건을 시각화하고 레이어와 설정을 변경합니다. 일부 레이어에서는 그려진 항목을 클릭하여 데이터를 가져올 수 있습니다.
Redis 대량 로드에 대해 이야기해 봅시다.
그래서 내 프로젝트를 위해 csv 파일을 구문 분석하고 redis에 데이터를 추가해야 합니다.
그래서 처음에는 csv 파일을 구문 분석하고 명령으로 약속을 배열로 삽질한 다음 노드 redis 클라이언트와 함께 정기적으로 보냈습니다. 이 접근 방식은 slooooow이며 권장하지 않습니다.
더 나은 방법이 필요해서 인터넷 검색을 시작하고 읽기 시작했습니다.
노드에서 redis-cli로 명령을 파이프하는 방법을 보여주는 a github repository을 우연히 발견했습니다.
내 코드와 또한 파이프라인을 구현했습니다the protocol needed for bulkloading.
아래는 코드입니다. 비슷한 작업을 시도하는 사람에게 유용할 수 있습니다.
const spawn = require('child_process').spawn;
const fs = require('fs');
const CsvReadableStream = require('csv-reader');
const redisPipe = spawn('redis-cli', ['--pipe']);
redisPipe.stdout.setEncoding('utf8');
redisPipe.stdout.pipe(process.stdout);
redisPipe.stderr.pipe(process.stderr);
const file = 'my.csv';
const BUFFER_SIZE = 524288; // 512KB
let buffer = '';
async function run() {
let inputStream = fs.createReadStream(file, 'utf8');
console.log('Let the piping commence!');
inputStream
.pipe(new CsvReadableStream({ asObject: true })) //reads in every row of file as object with keys being taken from csv header
.on('data', async function (row) {
//check that the row acutally have coordinates, if not i dont want it
if (row.longitude && row.latitude) {
//encode the string with the redis command and add it to the buffer
buffer += encodeRedis(`geoadd ips ${row.longitude} ${row.latitude} "${row.network}"`);
//when buffer is filled then write it and then empty buffer.
if (buffer.length > BUFFER_SIZE) {
redisPipe.stdin.write(buffer);
buffer = '';
}
}
})
.on('end', async function () {
redisPipe.stdin.write(buffer); //write the remaining buffer if any left
redisPipe.stdin.end(); //end the pipe
console.log('Update complete');
process.exit();
});
}
function encodeRedis(dataString) {
const dataArr = dataString.split(' '); //split data into array
let msg = '*' + dataArr.length + '\r\n'; //create start of message with amount of args
for (let i = 0; i < dataArr.length; i++) {
msg += '$' + dataArr[i].length + '\r\n' + dataArr[i] + '\r\n'; //encode the data
}
return msg; //return the encoded message
}
run();
Reference
이 문제에 관하여(IP Visualizer 라이브 데모 및 redis 대량 로드 노드.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/zoppatorsk/ip-visualizer-live-demo-redis-bulk-loading-with-node-572o텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)