package com.qianwen.mdc.collect.config.redis; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.Objects; import org.springframework.cache.interceptor.SimpleKey; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.data.redis.serializer.RedisSerializer; public class RedisKeySerializer implements RedisSerializer { private final Charset charset; private final ConversionService converter; public RedisKeySerializer() { this(StandardCharsets.UTF_8); } public RedisKeySerializer(Charset charset) { Objects.requireNonNull(charset, "Charset must not be null"); this.charset = charset; this.converter = DefaultConversionService.getSharedInstance(); } public Object deserialize(byte[] bytes) { if (bytes == null) { return null; } return new String(bytes, this.charset); } public byte[] serialize(Object object) { String key; Objects.requireNonNull(object, "redis key is null"); if (object instanceof SimpleKey) { key = ""; } else if (object instanceof String) { key = (String) object; } else { key = this.converter.convert(object, String.class); } return key.getBytes(this.charset); } }