Значения, сохраненные в Redis с использованием данных Spring, имеют странные префиксы

#spring-boot #redis #spring-data #spring-data-redis #lettuce

#spring-boot #redis #spring-данные #spring-data-redis #салат

Вопрос:

Я использую Spring Data Redis с Kotlin, но без репозиториев Spring data из-за недостатка DATAREDIS-1250. Итак, я создал свой собственный маленький репозиторий.

 interface CoroutinesRepository<T : Serializable> {
    suspend fun save(entity: T): T
    suspend fun findByIdOrNull(id: String): T?
    suspend fun deleteById(id: String)
}
  

и его реализация:

 abstract class AbstractCoroutinesRepository<T : Serializable>(clazz: Class<T>) : CoroutinesRepository<T> {
    private val hash: String = clazz.simpleName
        .// convert class name to hyphenated string
    private val idField: Field = clazz.declaredFields
        .// find field with @Id annotation

    @Autowired
    private lateinit var redisTemplate: ReactiveRedisTemplate<Any, Any>
    @Autowired
    private lateinit var persistenceProperties: PersistenceProperties

    override suspend fun save(entity: T): T {
        val valueOps = redisTemplate
            .opsForValue()
        valueOps.set("$hash:${idField.get(entity)}", entity, getTtl(persistenceProperties))
            .awaitFirst()
        return entity
    }
    // Other methods omitted
}
  

используется как:

 @Repository
class ResponseRepositoryImpl : AbstractCoroutinesRepository<Response>(Response::class.java)
  

Это работает, и приведенный выше код может устанавливать и получать значения из Redis. Однако, когда я запрашиваю из Redis CLI, я вижу:

 127.0.0.1:6379> SCAN 0
1) "0"
2) 1) "xacxedx00x05tx00x0cuuid:test"
   2) "xacxedx00x05tx00x10response:test"
  

Что это за странный строковый префикс? Как я уже сказал, это, похоже, не влияет на извлечение, но мне любопытно.

Spring Data Redis 2.3.5.RELEASE.

Ответ №1:

Оказалось, что это связано с использованием default JdkSerializationRedisSerializer , и я предполагаю, что странность заключается в метаинформации поля (тип и т.д.). Другие сериализаторы Redis, подобные GenericJackson2JsonRedisSerializer этому, этого не делают, и данные сохраняются в удобочитаемом формате.