1、为什么redis单线程架构,性能还能如此好,为什么不采用多线程。
首先redis是纯内存数据库,在redis上面其实是没有缓存命中率问题的,只要你往redis上存了,数据就一定在内存里面。
为什么单线程性能还如此好,因为原因a,既然采用了纯内存,在redis规范的使用条件下,都是O(1)操作,所以在这种情况下,从redis获取数据不是系统的瓶颈,这种时候redis依赖的网络将成为主要瓶颈,所以redis采用网络io多路复用
为什么不采用多线程,还是因为a,在redis规范的使用条件,大部分操作都是O(1),还是那句话,内存操作已经不是redis的瓶颈,为何还要采用多线程,多线程可比单线程复杂多了。况且采用多线程带来的锁竞争,未必会比单线程快。
2、血泪史得到的redis操作规范。
凡是redis操作中O(n),比如LRANGE key 0 -1 、LSET 、HGETALL、都要慎用,这些key当很小的时候对性能的影响不明显,当这些key在一些无意识的情况下变的很大,此时就会暴露出redis单线程模型的缺点,阻塞其他操作,造成整个业务系统性能下降。
还是使用redis这个数据库作为缓存cache,一定要对热门的key做业务系统内部缓存,防止redis集群单片过热,导致整个业务系统其模块性能下降。一个操作O(1),并发10000qps,redis单个分片将阻塞,这也是避免热分片,尽量将这种热key提前CodeReview的时候查出来。
避免单key数据过大,道理和b类似,单个操作O(1),然而内存copy的时候花了O(10000),最后得到的效果一样。
写了很久居然忘发了。
领取专属 10元无门槛券
私享最新 技术干货