SpringBoot 통합 Redis 파이프 의 예제 코드
4436 단어 SpringBootRedis파이프
Redis 명령 을 실행 하려 면 Redis 클 라 이언 트 와 Redis 서버 는 다음 절 차 를 실행 해 야 합 니 다.
클 라 이언 트 가 서버 에 명령 을 보 냅 니 다
주의사항:
Redis 서버 는 클 라 이언 트 가 파이프 에 포 함 된 명령 수량 을 제한 하지 않 지만 클 라 이언 트 의 입력 버퍼 에 기본 값 이 1GB 인 부피 상한 선 을 설정 합 니 다.클 라 이언 트 가 보 낸 데이터 양 이 이 제한 을 초과 하면 Redis 서버 는 클 라 이언 트 를 강제로 닫 습 니 다.따라서 한꺼번에 대량의 명령 이나 부피 가 매우 큰 명령 을 같은 파이프 에 넣 지 않 는 것 이 좋다.
그 밖 에 많은 클 라 이언 트 자체 에 도 숨겨 진 버퍼 크기 제한 이 있 습 니 다.만약 에 흐름 선 특성 을 사용 하 는 과정 에서 일부 흐름 선 명령 이 실행 되 지 않 거나 흐름 선 이 돌아 오 는 결과 가 완전 하지 않 은 것 을 발견 하면 프로그램 이 클 라 이언 트 에 내 장 된 버퍼 크기 제한 에 부 딪 혔 을 가능성 이 높 습 니 다.
2.SpringBoot 통합 Redis 파이프 인 스 턴 스
SpringBoot 통합 redis 의 인 스 턴 스
하나의 increment 명령 을 사용 하여 200 w key 를 처리 합 니 다:
public class RedisPipelineStudy extends BaseTest {
@Autowired
private StringRedisTemplate stringRedisTemplate;
private static final String PREFIX = "test0:";
@Test
public void test() {
StopWatch stopWatch = new StopWatch();
stopWatch.start("test0");
for (int times = 0; times < 2; times++) {
for (int i = 0; i < 1000000; i++) {
stringRedisTemplate.opsForValue().increment(PREFIX + i, 1L);
}
}
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
}
}
소모 시간 은 다음 과 같다.파이프 incrBy 를 사용 하여 200 w 개의 key 를 처리 하고 매번 300 개의 명령 을 포장 하여 서버 에 보 냅 니 다.다음 과 같 습 니 다.
public class RedisPipelineStudy extends BaseTest {
@Autowired
private StringRedisTemplate stringRedisTemplate;
private static final String PREFIX = "test1:";
@Test
public void test() {
StopWatch stopWatch = new StopWatch();
stopWatch.start("test1");
List<Integer> recordList = new ArrayList<>();
for (int times = 0; times < 2; times++) {
for (int i = 0; i < 1000000; i++) {
try {
recordList.add(i);
if (recordList.size() > 300) {
incrByPipeline(recordList);
recordList = new ArrayList<>();
}
} catch (Exception e) {
System.out.println(e);
}
}
if (!CollectionUtils.isEmpty(recordList)) {
incrByPipeline(recordList);
recordList = new ArrayList<>();
}
}
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());
}
private void incrByPipeline(List<Integer> recordList) {
stringRedisTemplate.executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
try {
for (Integer record : recordList) {
byte[] key = (PREFIX + record).getBytes();
connection.incrBy(key, 1);
}
} catch (Exception e) {
System.out.println(e);
}
return null;
}
});
}
}
소모 시간:11 위,단위:ns,단일 명령 소모 시간의 1/6 입 니 다.SpringBoot 통합 Redis 파이프 에 관 한 예제 코드 에 관 한 글 은 여기까지 입 니 다.더 많은 SpringBoot 통합 Redis 파이프 내용 은 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부탁드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Java・SpringBoot・Thymeleaf】 에러 메세지를 구현(SpringBoot 어플리케이션 실천편 3)로그인하여 사용자 목록을 표시하는 응용 프로그램을 만들고, Spring에서의 개발에 대해 공부하겠습니다 🌟 마지막 데이터 바인딩에 계속 바인딩 실패 시 오류 메시지를 구현합니다. 마지막 기사🌟 src/main/res...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.