값이 쌍따옴표와 함께 저장됨
=> 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
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 로 직접 제거
'왕초보일지' 카테고리의 다른 글
240223 TIL | (0) | 2024.02.23 |
---|---|
240221 TIL | 직렬화 역직렬화? (0) | 2024.02.21 |
240219 TIL | (0) | 2024.02.19 |
240218 TIL | Redis 사용 (2) | 2024.02.18 |
240216 TIL | (1) | 2024.02.16 |