문자열 데이터 다루기
✒️ 2026-07-01 20:24 내용 수정
실습 참고 자료
- 인프런의 lettuce를 이용하여 redis 다루어 보기(저자: 신현호) 강의 내용을 참고하여 진행하였다.
- DB 연결 설정 분리를 진행한 후의 코드 형식을 적용했다.
문자열 추가
- key에 저장된 value가 String일 때, String 문자열을 추가하려면
append()메서드를 사용한다.
@Test
public void stringRange() {
CommandAction action = (redisCommands -> {
// Redis 연결 테스트를 위한 Key-value
String key = "lettuce:string";
String value = "hello";
redisCommands.set(key, value);
// 저장된 key-value 확인
String get = redisCommands.get(key);
System.out.println("get = " + get);
// key에 저장된 value에 문자열 추가하기
redisCommands.append(key, "_addr");
System.out.println("get = " + redisCommands.get(key));
});
CommandTemplate.commandAction(action);
}

문자열 길이 확인
- 문자열의 길이를 확인할 때
strlen()을 사용한다.
@Test
public void stringRange() {
CommandAction action = (redisCommands -> {
// Redis 연결 테스트를 위한 Key-value
String key = "lettuce:string";
String value = "hello";
redisCommands.set(key, value);
// 저장된 key-value 확인
String get = redisCommands.get(key);
System.out.println("get = " + get);
// key에 저장된 value에 문자열 추가하기
redisCommands.append(key, "_addr");
System.out.println("get = " + redisCommands.get(key));
// 문자열 길이 확인
Long strlen = redisCommands.strlen(key);
System.out.println("strlen = " + strlen);
});
CommandTemplate.commandAction(action);
}

문자열 추출과 치환
- 문자열을 시작 index부터 종료 index까지 추출할 때는
getrange()를, 문자열을 치환할 대는setrange()를 사용한다.
@Test
public void stringRange() {
CommandAction action = (redisCommands -> {
// Redis 연결 테스트를 위한 Key-value
String key = "lettuce:string";
String value = "hello";
redisCommands.set(key, value);
// 저장된 key-value 확인
String get = redisCommands.get(key);
System.out.println("get = " + get);
// key에 저장된 value에 문자열 추가하기
redisCommands.append(key, "_addr");
System.out.println("get = " + redisCommands.get(key));
// 문자열 길이 확인
Long strlen = redisCommands.strlen(key);
System.out.println("strlen = " + strlen);
// 문자열 추출
String getRange = redisCommands.getrange(key, 0, 4);
System.out.println("getRange = " + getRange);
// 문자열 치환
redisCommands.setrange(key, 6, "updateStr");
System.out.println("update Get = " + redisCommands.get(key));
});
CommandTemplate.commandAction(action);
}
- "hello_addr"에서 0번째는 h, 4번째는 o다.
- 6번째 위치는
_이후의 위치이므로 새 String을_뒤에 추가하게 된다.

mset, mget
- 한 번의 호출로 여러 데이터를
set혹은get수행한다. - 여러 데이터를 저장할 때 Map 인터페이스으로 데이터를 받는다.
@Test
public void stringRange() {
CommandAction action = (redisCommands -> {
// Redis 연결 테스트를 위한 Key-value
String key = "lettuce:string";
String value = "hello";
redisCommands.set(key, value);
// 저장된 key-value 확인
String get = redisCommands.get(key);
System.out.println("get = " + get);
// key에 저장된 value에 문자열 추가하기
redisCommands.append(key, "_addr");
System.out.println("get = " + redisCommands.get(key));
// 문자열 길이 확인
Long strlen = redisCommands.strlen(key);
System.out.println("strlen = " + strlen);
// 문자열 추출
String getRange = redisCommands.getrange(key, 0, 4);
System.out.println("getRange = " + getRange);
// 문자열 치환
redisCommands.setrange(key, 6, "updateStr");
System.out.println("update Get = " + redisCommands.get(key));
// MSET
Map<String, String> map = new LinkedHashMap<>();
// map에 데이터 넣기
for (int i = 0; i < 5; i++) {
map.put(key + i, value + i);
}
// 생성한 map 저장
redisCommands.mset(map);
// MGET
List<KeyValue<String, String>> mapResult = redisCommands
.mget(map.keySet().toArray(new String[0]));
mapResult.stream().forEach(m -> {
System.out.println("key = " + m.getKey() + " | value = " + m.getValue());
});
});
CommandTemplate.commandAction(action);
}
