KV上MySQL与Redis的PK

来源:这里教程网 时间:2026-03-01 16:11:48 作者:

自己原文公众号: https://mp.weixin.qq.com/s/UfgCoVfe21q7bYiu2XtG3Q

首先我要说一下redis真的很强,使用也广泛,而且使用简单,在数据库兵器谱排行中KV领域的第一。

      不过在我接触过程中发现不少系统对redis依赖很强,甚至达到了没redis日子过不下去的程度。我不由得想那没有redis之前我们的系统就活不下去了吗?不见得。就像没有hadoop之前该怎么干活就怎么干活,四大行和三大运营商该出报表出报表。没听说这两个公司无法决策。(有时候技术被滥用了也是一种悲哀)

       言归正传,比如微博以前用redis缓存,其实不管什么系统用redis缓存我觉得都没错。但是不能说没有redis就停止服务,假设redis被击穿,或者发生问题。我们还是要继续走下去的,只是走的很慢。也就是说外围部队挡不住了,我就是打巷战也要坚持,不能说redis一完蛋就全体投降了。redis是数据库,内存数据库。后面还有Oracle、MySQL、PostgreSQL这些数据库,而且这些数据库都不是白给的。所不同的是redis的不需要SQL解析,而关系型数据库需要解析的。但是对于Oracle这种软软解析的来说,其实问题也不大。

    redis是单线程的,我们不能说全指望一个线程不出现问题,甚至不允许出现慢。如果能做到这个,那么我想在关系型数据库层面也能做得到。其实关系型数据库不管是Oracle的多进程还是MySQL这样的多线程都不是吃素的。我以前有三篇模拟。

https://mp.weixin.qq.com/s?__biz=Mzk0NDIxNDg5Mg==&mid=2247483843&idx=1&sn=a185aa932124c2987e34a4d78e3c3d40&chksm=c32947c0f45eced67261c7e0367830ed219a9401ef58d06bd198818879490e5da924d1971a27&token=1191007506&lang=zh_CN#rd

https://mp.weixin.qq.com/s?__biz=Mzk0NDIxNDg5Mg==&mid=2247483850&idx=1&sn=122bade9a68be1d05bfef95a2eeef4d7&chksm=c32947c9f45ecedf9ae7ac7201e5e801aff3f85b7618951177f15cc23d07b73c5d8d49788492&token=1191007506&lang=zh_CN#rd

https://mp.weixin.qq.com/s?__biz=Mzk0NDIxNDg5Mg==&mid=2247483855&idx=1&sn=8bdc3c4f09d2641451255dab2a45f42e&chksm=c32947ccf45eceda753997203e757f2a443cb6c5df0da7646b00c6f86251b7e0b902d25fa7b1&token=1191007506&lang=zh_CN#rd

最近安排了新人做几个压测。刚工作没多久的孩子做事还不错的。

redis 压测不同key 长度下10w key qps

这里正好说明越大越慢。本来redis的规范也是要禁止大key。可以看出一般每秒4万的QPS是很正常的。在网上也是可以的需要cluster模式,以及阿里云企业版什么的了。社区版这个数据说的过去。

后面的结果是这样的

谈好了redis看看mysql的。(oracle和PG同理)

  

      刚开始她用了2个C的mysql效果不太好

我让她加到8个C,就是下面这样子。充分发挥数据库的优势。(注意这个MySQL是默认参数,没做任何优化)

   可以看出每秒也有6w。单机MySQL,无优化,虚拟机,8C。10万记录级别下,用主键查询。类似redis的KV。至少说不输吧,略胜。如果CPU很多,再优化的话,那么就拉开差距了。更不要说mysql还有memcahce的插件,可以不用解析SQL了。

    而PG和Oracle的多进程能力就更加强了,所以说redis很强,但是其他数据库也不弱,完全可以承担压力。redis的定位是辅助缓存,而不是核心唯一。后面有更强大的数据库抗压,之所以让缓存分离出去是让数据库更加关注业务交易,减轻点负担。不过如果本身没有压力,自己来抗也不是不行。因为没有压力说明也不需要缓存。

      我们想想毕竟没有哪个股票交易的核心交易买卖是redis吧?

      其实单机的redis都已经满足我们日常的缓存要求,至于其他的功能消息队列等等,还是交给消息队列去做吧。至于锁,其实还是关系型数据库更加擅长,到了数据库还是会有锁检测的。(redis是支持分布式锁的,oracle也支持sharding。但是支持不见得一定要用,支持的好和支持还是有点区别的。现在的车有辅助驾驶或者自动驾驶,但是还是少用)别让redis的一个线程总是处理各式各样的事件。总被打扰效率也受影响。

相关推荐