Redis는 Node.js에서 클라이언트와 연결하여
다양한 데이터 조작을 할 수 있는 강력한 메모리 기반 데이터베이스
1. Redis 서버와 연결
Redis 서버와 연결하려면
redis 모듈을 사용해 클라이언트를 생성하고, 서버와 연결을 설정해야 함const redis = require('redis'); const client = redis.createClient(); client.on('error', function (err) { console.log('Error ' + err); });
위 코드에서는
createClient() 함수를 사용해 클라이언트를 생성하고, error 이벤트 핸들러를 통해 연결 오류를 감지하여 콘솔에 출력하도록 설정. 모든 데이터 조작 예제는 이 연결 코드가 필수
2. 데이터 조작: Key/Value 조작
Redis에서 가장 기본적인 데이터 저장 방식은
set과 get을 통한 키-값 쌍 저장client.set('String Key', 'String Value', redis.print); // 데이터 저장 client.get('String Key', function (err, value) { if (err) throw err; console.log(value); // 데이터 조회 });
set: 첫 번째 인자로 키, 두 번째 인자로 값을 입력.redis.print는 명령어 수행 결과를 출력하는 옵션으로, 생략해도 무방.
get: 첫 번째 인자로 키를 입력하며, 콜백 함수 내에서 해당 키에 대한 값을 조회할 수 있음.
3. 해시 테이블 (해시맵) 조작
Redis의 해시 테이블은 객체와 비슷한 구조로, 키와 필드/값 쌍을 저장할 수 있음.
이때
hmset과 hset을 사용하여 데이터를 저장하고, hget, hkeys로 데이터를 조회함client.hmset('codigm', { 'goormIDE': 'cloud service', 'goormEDU': 'edu service' }, redis.print); client.hset('Hash Key', 'HashTest 1', '1', redis.print); client.hset(['Hash Key', 'HashTest 2', '2'], redis.print); // 값 가져오기 client.hget('codigm', 'goormIDE', function (err, value) { if (err) throw err; console.log('goormIDE is: ' + value); }); // 모든 필드명 가져오기 client.hkeys('codigm', function (err, keys) { if (err) throw err; keys.forEach(function (key, i) { console.log('codigm ' + i + ': ' + key); }); });
hmset: 첫 번째 인자는 해시 테이블 이름, 이후 필드-값 쌍을 한 번에 여러 개 설정할 수 있음
hset: 특정 키와 값으로 한 개의 항목을 설정할 때 사용
hget: 특정 필드 값을 가져옴
hkeys: 해시 테이블의 모든 키 값을 가져옴
4. 리스트 조작하기
리스트는 여러 개의 값을 저장하는 자료구조로, Redis에서
lpush와 lrange로 데이터를 조작할 수 있음client.lpush('tasks', 'Node.js', redis.print); client.lpush('tasks', 'Redis', redis.print); client.lrange('tasks', 0, -1, function (err, items) { if (err) throw err; items.forEach(function (item, i) { console.log('list ' + i + ': ' + item); }); });
lpush: 리스트에 값을 추가하며, 앞에서부터 추가됨
lrange: 리스트의 특정 범위에 있는 값을 가져옴.0과1은 리스트의 처음과 끝을 의미
5. Set 조작
Set은 중복 없는 값을 저장하는 자료구조로,
sadd와 smembers로 조작할 수 있음client.sadd('test', 'goorm', redis.print); client.sadd('test', 'codigm', redis.print); client.sadd('test', 'goorm', redis.print); // 중복 값이므로 저장되지 않음 client.sadd('test', 'codigm2', redis.print); client.smembers('test', function (err, data) { if (err) throw err; console.log(data); // ['goorm', 'codigm', 'codigm2'] });
sadd: Set에 값을 추가. 중복 값은 저장되지 않음
smembers: Set의 모든 값을 반환
6. Redis 전체 코드
아래 코드는 Redis 서버를 실행한 후 Node.js에서 Redis 데이터 조작을 시도하는 코드
const redis = require('redis'); const client = redis.createClient(); client.on('error', function (err) { console.log('Error ' + err); }); // Key/Value 저장 client.set('String Key', 'String Value', redis.print); // 해시 테이블 저장 client.hset('Hash Key', 'HashTest 1', '1', redis.print); client.hset(['Hash Key', 'HashTest 2', '2'], redis.print); // 값 가져오기 client.get('String Key', function (err, reply) { console.log(reply.toString()); }); // 해시 테이블의 모든 키 가져오기 client.hkeys('Hash Key', function (err, replies) { console.log(replies.length + ' replies:'); replies.forEach(function (reply, i) { console.log(' ' + i + ': ' + reply); }); }); // 해시 테이블 전체 데이터 가져오기 client.hgetall('Hash Key', function (err, obj) { console.dir(obj); });
코드를 실행하기 전, Redis 서버를 실행해야 함.
redis-server 명령어로 Redis 서버를 구동한 후 코드를 실행하면 각 명령어의 결과를 확인할 수 있음