标签:: Java

多级缓存的设计与实现

Overview 总览在高并发量的后端业务中,多级缓存是一个非常常见的设计。事实上,多级缓存策略在计算机硬件也是普遍存在的。 为什么会有多级缓存?通常缓存都是比原数据要小的,设立缓存的目的很简单:某些数据经常用到,我们不想每次都去最深的地方(这里一般是指数据库)去找,所以我们就在更方便取到数据的地方把这些数据保存起来。 那么,为什么要用多级缓存呢?对于所有的数据来说,并不是每一份数据使用的频率都一

为什么不建议在 Redis 使用大 Key

Preview公司里某位工程师小斌发现在一个 Redis 集群中的 some_big_list 经常出现慢查询,而且 QPS 特别高。初步定位是出现了一个热点的 Key。12newexplore> llen some_big_list500000 上面的命令发现,这个 some_big_list 是一个大 Key,导致 Redis Server 的服务器 CPU idle 很低,结果出现了慢

构造函数需要加锁吗

我们在写 Java 的时候,经常会使用到 synchronized 关键字。synchronized 是一个相对重量级的锁,它有两种使用形式。 对一个具体的变量加锁。 12345678Logger l = LoggerFactory.getLogger(getClass().getName());synchronized (l) { // do something}sy

记一次使用RxJava重构的经历

前言垃圾代码时常会出现在时间不够的情况下,所以重构是一件非常重要非常有意义的事情。 需求我们的 Studio 项目中需要上传头像的功能,所以选择了一个开源库 PhotoPicker 来做图片的选择。通过这个库我们就可以在Activity # onActivityResult 方法来获取用户选择的图片地址,然后通过 LeanCloud 的 AVFile 来进行上传。 原来的实现12345678910