왕초보일지

240220 TIL | 더미 데이터 집어넣기

다시은 2024. 2. 20. 21:17

값이 쌍따옴표와 함께 저장됨

=> Serialization 문제를 해결하기 위해 잠깐 적용해봤었던 GenericJackson2JsonRedisSerializer 으로 인한 현상이었다.

 

저장된 캐시를 가져올 때 생겼던

SerializationException: Could not read JSON: Cannot construct instance of "org.springframework.data.domain.SliceImpl"

직렬화 과정에서 SliceImpl 생성자가 없는 문제??

 

직렬화/역직렬화 문제는 SliceImpl 을 구현한 CustomSliceImpl 을 팀원이 직접 만들어서 해결했다.

class CustomSliceImpl<T> @JsonCreator(mode = JsonCreator.Mode.PROPERTIES) constructor(
    @JsonProperty("content") content: List<T>?,
    @JsonProperty("size") size: Int,
    @JsonProperty("hasNext") hasNext: Boolean
) : SliceImpl<T>(content!!, PageRequest.of(0, size), hasNext) {
    @JsonIgnore
    override fun getPageable(): Pageable {
        return super.getPageable()
    }
}

@JsonCreator 

@JsonIgnore

 

 

 

 

Redis 직렬화 문제 관련 글 

 

 

 


MySQL dummy Procedure 로 데이터 집어넣기

DROP DATABASE IF EXISTS sp_example;

CREATE DATABASE sp_example;

USE sp_example;

DROP TABLE IF EXISTS board;

CREATE TABLE board(
    id BIGINT UNSIGNED AUTO_INCREMENT,
    title VARCHAR(200) NOT NULL,
    contents VARCHAR(1000) NOT NULL,
    writer_id BIGINT NOT NULL,
    PRIMARY KEY (id)
);

DELIMITER $$
DROP PROCEDURE IF EXISTS loopInsert$$
CREATE PROCEDURE loopInsert()
BEGIN DECLARE i INT DEFAULT 1;
WHILE i <= 50000  # 원하는 데이터의 개수 입력
DO # 원하는 형태의 데이터를 토대로 INSERT 쿼리 작성
INSERT INTO board(title, contents, writer_id) VALUES (CONCAT('제목', i), CONCAT('내용', i), 1);						
SET i = i + 1;
END WHILE;
END$$

DELIMITER $$

# 작성한 MySQL Procedure 호출
CALL loopInsert;

 

mysql workbench 사용

 

 

백만여개의 데이터를 집어넣는데에 12초가 걸렸다.

 


+-------------------+
|   Cache Name      |
+-------------------+
|                   |
|     +----------+  |
|     |   Key    |  |
|     +----------+  |
|     |  Value   |  |
|     +----------+  |
|                   |
+-------------------+

 

 


@CacheEvict 

적용 안됨

=>redisTemplate 로 직접 제거