使用spring数据保存在redis中的值有奇怪的前缀

bvpmtnay  于 2021-06-09  发布在  Redis
关注(0)|答案(1)|浏览(357)

我将springdataredis与kotlin一起使用,但由于dataredis-1250的缺点,没有spring数据存储库。所以,我创建了自己的小仓库。

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) "\xac\xed\x00\x05t\x00\x0cuuid:test"
   2) "\xac\xed\x00\x05t\x00\x10response:test"

这个奇怪的字符串前缀是什么?正如我所说,这似乎并不影响检索,但我很好奇。
spring数据redis 2.3.5.release。

ylamdve6

ylamdve61#

这原来是由于使用了默认值 JdkSerializationRedisSerializer ,我猜奇怪的是字段元信息(类型等)。其他redis序列化程序,如 GenericJackson2JsonRedisSerializer 不要这样做,数据将以可读的格式保存。

相关问题