2017-12-11 17 views
0

redis를 scalacache에 통합하려고합니다. 키는 일반적으로 문자열이지만 값은 객체 세트 [문자열] 등 캐시이redis가 지원되는 스칼라 캐시

val cache: RedisCache = RedisCache(config.host, config.port) 
private implicit val scalaCache: ScalaCache[Array[Byte]] = ScalaCache(cacheService.cache) 

에 의해 초기화 될 수 있습니다 그러나, 나는이 오류가 무엇입니까 넣어 호출하는 동안 "[문자열을 설정 유형에 대한 어떤 코덱을 찾을 수 없습니다 ]와 Repr ". 내가 그래서 추가 here을 제안 내 캐시 입력 코덱을 제공해야처럼

class A extends Codec[Set[String], Array[Byte]] with GZippingBinaryCodec[Set[String]] 

심지어 후, 내 클래스 A는 같은 오류를 던지고있다, 같은데. 나는 무엇이 없는가.

import scalacache.serialization.binary._ 

또는 JSON으로 키르케 사용 : 당신이 link에서 언급 한 바와 같이

+0

전체 코드와 작동 코드를 붙여 넣으십시오. 사용 된 변수는 정의되지 않았습니다. – KarateKid

답변

1

의 모습을 바이너리로 다음 버전에서 해결 및 circe 직렬화. 나는 버전 10이고 다음에 의해 해결된다.

implicit object SetBindaryCodec extends Codec[Any, Array[Byte]] { 
    override def serialize(value: Any): Array[Byte] = { 
     val stream: ByteArrayOutputStream = new ByteArrayOutputStream() 
     val oos = new ObjectOutputStream(stream) 
     oos.writeObject(value) 
     oos.close() 
     stream.toByteArray 
    } 

    override def deserialize(data: Array[Byte]): Any = { 
     val ois = new ObjectInputStream(new ByteArrayInputStream(data)) 
     val value = ois.readObject 
     ois.close() 
     value 
    } 
    } 

특권이 최신이다. 버전을 업그레이드하고, 누군가 필요로 할 때를 대비하여 게시했습니다.

1

, 당신은 바이너리 형식으로 값을 직렬화 할 수 있습니다

import scalacache.serialization.circe._ 
import io.circe.generic.auto._