Skip to content

Commit

Permalink
Tweak OhcCache
Browse files Browse the repository at this point in the history
  • Loading branch information
Yuki Ishikawa committed May 1, 2018
1 parent 1b589f5 commit 720f7fd
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 29 deletions.
29 changes: 24 additions & 5 deletions modules/ohc/src/main/scala/scalacache/ohc/OhcCache.scala
@@ -1,5 +1,8 @@
package scalacache.ohc

import java.nio.ByteBuffer

import com.google.common.base.Charsets
import org.caffinitas.ohc.{CacheSerializer, OHCache, OHCacheBuilder}
import org.slf4j.LoggerFactory

Expand Down Expand Up @@ -48,17 +51,33 @@ class OhcCache[V](underlying: OHCache[String, V])(implicit val config: CacheConf

object OhcCache {

val stringSerializer: CacheSerializer[String] = new CacheSerializer[String]() {

def serialize(s: String, buf: ByteBuffer): Unit = {
val bytes = s.getBytes(Charsets.UTF_8)
buf.putInt(bytes.length)
buf.put(bytes)
}

def deserialize(buf: ByteBuffer): String = {
val bytes = new Array[Byte](buf.getInt)
buf.get(bytes)
new String(bytes, Charsets.UTF_8)
}

def serializedSize(s: String): Int =
s.getBytes(Charsets.UTF_8).length + 4

}

/**
* Create a new OHC cache
*/
def apply[V](
keySerializer: CacheSerializer[String],
valueSerializer: CacheSerializer[V]
)(implicit config: CacheConfig): OhcCache[V] =
def apply[V](implicit config: CacheConfig, valueSerializer: CacheSerializer[V]): OhcCache[V] =
new OhcCache(
OHCacheBuilder
.newBuilder()
.keySerializer(keySerializer)
.keySerializer(stringSerializer)
.valueSerializer(valueSerializer)
.timeouts(true)
.build()
Expand Down
27 changes: 3 additions & 24 deletions modules/ohc/src/test/scala/scalacache/ohc/OhcCacheSpec.scala
@@ -1,10 +1,8 @@
package scalacache.ohc

import java.nio.ByteBuffer
import java.time.Instant

import com.google.common.base.Charsets
import org.caffinitas.ohc.{CacheSerializer, OHCache, OHCacheBuilder}
import org.caffinitas.ohc.{OHCache, OHCacheBuilder}
import org.scalatest.concurrent.ScalaFutures
import org.scalatest.{BeforeAndAfter, FlatSpec, Matchers}

Expand All @@ -13,30 +11,11 @@ import scalacache._

class OhcCacheSpec extends FlatSpec with Matchers with BeforeAndAfter with ScalaFutures {

private val stringSerializer = new CacheSerializer[String]() {
def serialize(s: String, buf: ByteBuffer): Unit = {
val bytes = s.getBytes(Charsets.UTF_8)
buf.put(((bytes.length >>> 8) & 0xFF).toByte)
buf.put(((bytes.length >>> 0) & 0xFF).toByte)
buf.put(bytes)
}

def deserialize(buf: ByteBuffer): String = {
val length = ((buf.get & 0xff) << 8) + ((buf.get & 0xff) << 0)
val bytes = new Array[Byte](length)
buf.get(bytes)
new String(bytes, Charsets.UTF_8)
}

def serializedSize(s: String): Int =
s.getBytes(Charsets.UTF_8).length + 2
}

private def newOHCache: OHCache[String, String] =
OHCacheBuilder
.newBuilder()
.keySerializer(stringSerializer)
.valueSerializer(stringSerializer)
.keySerializer(OhcCache.stringSerializer)
.valueSerializer(OhcCache.stringSerializer)
.timeouts(true)
.build()

Expand Down

0 comments on commit 720f7fd

Please sign in to comment.