>  기사  >  데이터 베이스  >  SpringBoot에 Redis를 통합하여 파이프라인을 구현하는 방법

SpringBoot에 Redis를 통합하여 파이프라인을 구현하는 방법

WBOY
WBOY앞으로
2023-05-30 09:19:561409검색

1. Redis 파이프라인

Redis 명령을 실행하려면 Redis 클라이언트와 Redis 서버가 다음 단계를 수행해야 합니다.

  • 클라이언트는 서버에 명령을 보냅니다.

  • 서버는 명령 요청을 수락합니다. 명령을 실행하고 해당 결과를 생성합니다.

  • 서버는 결과를 클라이언트에 반환합니다.

  • 클라이언트는 명령의 실행 결과를 수락하고 이를 사용자에게 표시합니다.

Redis 명령에 소비되는 대부분의 시간은 명령 요청을 보내고 명령 결과를 수신하고, Redis 명령 요청을 원하는 수만큼 함께 패키징한 다음, 모두 한 번에 서버로 보내는 데 소요됩니다. 요청이 처리되면 모든 실행 결과가 한 번에 클라이언트에 반환됩니다.

참고:

Redis 서버는 클라이언트가 파이프라인에 포함하는 명령 수를 제한하지 않지만 클라이언트의 입력 버퍼에 대해 기본 볼륨 제한을 1GB로 설정합니다. 클라이언트가 전송한 데이터 양이 이 값을 초과하는 경우 제한에 도달하면 Redis 서버는 클라이언트를 강제로 닫습니다. 따라서 동일한 파이프라인에서 많은 수의 명령이나 일부 매우 큰 명령을 한 번에 실행하지 않는 것이 가장 좋습니다.

또한 많은 클라이언트에는 암시적인 버퍼 크기 제한이 있습니다. 파이프라인 기능을 사용할 때 일부 파이프라인 명령이 실행되지 않거나 파이프라인에서 반환된 결과가 불완전한 경우 프로그램이 한계에 도달했을 가능성이 있습니다. 클라이언트의 내장 버퍼 크기 제한.

2. SpringBoot 통합 Redis 파이프라인 인스턴스

SpringBoot 통합 Redis 인스턴스

단일 증분 명령을 사용하여 200만 개의 키 처리:

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 <p>시간 소비는 다음과 같습니다: 12비트, 단위 ns<br></p><p><img src="https://img.php.cn/upload/article/000/887/227/168540959894676.png" alt="SpringBoot에 Redis를 통합하여 파이프라인을 구현하는 방법"></p><p> 파이프라인은 200만 개의 키를 처리하고 매번 300개의 명령을 패키징하여 아래와 같이 서버에 보냅니다. </p><pre class="brush:php;toolbar:false">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  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;
            }
        });
    }
}</object></integer></integer>

소비된 시간: 11비트, 단위: ns, 이는 a에 걸리는 시간의 1/6입니다. 단일 명령.

SpringBoot에 Redis를 통합하여 파이프라인을 구현하는 방법

위 내용은 SpringBoot에 Redis를 통합하여 파이프라인을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제