Closed timzaak closed 5 years ago
J2Cache 二级缓存框架,稍微看了一下,到时候估计根据其 cache 接口自己改造 scala cache 吧。
目前的这个 SingleRedis Client 没有实现 ArrayByte, 所以所有序列化都要走String(UTF-8) 再转换成 ArrayByte. for performance! add arraybyte wrapper. then add avro case class transform.
根据最新的 J2Cache 的实现,发现还有一级缓存状态同步的问题。 ehcache 有三套。目前直接用 ehcache 就可以了。
scalacache 目前已熟。并自带 Bytes 序列化。外加 Flag
设计,看看其思路能不能用来做AB 测试。
最近看了一篇在 tikv 上实现 redis 接口的文章。初始感觉牛逼,就细细了解了一tikv。 性能上挂靠rocksdb, 牛逼。 从 tikv 接口上看,提供了带有Transcation 可遍历的 分布式 SortedMap 接口。
怪不得文章里的 benchmark 就只放出了 Get Set 的测试。在此基础上封装其他的 redis 数据结构接口,不得xx。
所以这个东西的价值在于工程中依赖的 redis 老代码太多,而 redis 实现 PB 级别的 kv 缓存成本过高。所以做个中间件出来。
假如这样的话。将 redis 接口转化成 sql 语句,直接对接 tidb 上会怎么样。性能会差好几个档次应该。毕竟涉及到sql解析以及更多余的索引+空间使用。
一级缓存
放本机内存,对jvm来讲就是放heap堆,然后加个时间戳的HashMap。
二级缓存
其实也是全局缓存,主要存共享Session等,多台机子都用到的场景。
缓存结构
目前已知的大都是KV形式的,顶多在存取V的api加上自动序列化。
当然还有队列,BitMap 等。但不太常用。
缓存问题
方案介绍一
方案介绍二
Redis 分布式
scalacache提供了优秀的cache api设计,但目前还不成熟,只能用它的PUT,GET函数, 也没解决上述问题,需要在它基础上再封装。目前看来,上述问题解决主要是参数设置、二次缓存和锁的使用,而且这些都是并发量上去后的问题。
另外,缓存在项目的中位置,我觉得应该和 Dao 内。由 Dao 提供统一的数据访问接口,并处理 Cache 是要问题。但这样,会造成一个问题,缓存过来的数据,需要在程序中重新组装一遍,但这个带来了数据一致性的好处。我觉得是可以接受的。