smokezl / matryoshka

支持分布式环境,基于redis和机器内存(memory)的多级缓存
MIT License
32 stars 5 forks source link

一点提醒 #1

Open kelvins-io opened 3 years ago

kelvins-io commented 3 years ago

batchLoadFromSource函数里 在循环中使用defer 不会有问题吗 for key, cacheKey := range batchSource.loadKeyCacheMap { keys = append(keys, key) defer c.lock.unLock(cacheKey) }

smokezl commented 3 years ago

这里没有问题 1、这个循环在外层上锁,等待锁不在这个段函数中,所以不会有死锁 2、这里defer直接调用的函数,没有像下边的代码一样用闭包 像这样

defer func(){
    c.lock.unLock(cacheKey)
}()

所以这里没有问题

kelvins-io commented 3 years ago

你的俄罗斯套娃缓存代码我看完了,实现思路没什么问题,就是看代码就觉得很复杂,>_<,里面定义的接口应该是给外部来实现的吧,但是为什么都是小写开头呢

smokezl commented 3 years ago

如果哪里复杂,可以提出来一起讨论一下呀。 里边的接口有两种,一种是redis 和 内存缓存的接口,这个是不对外暴露的,只是内部逻辑用,所以用小写;另一种是redis的实现接口,这个是支持外部注入的,这个是用大写

XiaoMaoGuai commented 3 years ago

遇到go mod报错了,解决方法: replace github.com/smokezl/matryoshka v1.0.1 => matryoshka v1.0.1