Redis的使⽤场景和⾼并发⾼性能
⾼性能
假设这么个场景,你有个操作,⼀个请求过来,吭哧吭哧你各种乱七⼋糟操作查询mysql,半天查出来⼀个结果,耗时600ms。但是这个结果可能接下来⼏个⼩时都不会变了,或者变了也可以不⽤⽴即反馈给⽤户。那么此时咋办?
缓存啊,折腾600ms查出来的结果,扔缓存⾥,⼀个key对应⼀个value,下次再有⼈查同样的数据,别⾛mysql折腾600ms了。直接从缓存⾥取出,通过⼀个key查出来⼀个value,2ms搞定。性能提升300倍。
这就是所谓的⾼性能。
就是把你⼀些复杂操作耗时查出来的结果,如果确定后⾯不咋变了,然后但是马上还有很多的请求,那么直接结果放缓存,后⾯直接读缓存就好了。
⾼并发
mysql这么重的数据库,压根⼉设计不是让你玩⼉⾼并发的,虽然也可以玩⼉,但是天然⽀持不好。mysql单机⽀撑到2000qps也开始容易报警了。
所以要是你有个系统,⾼峰期⼀秒钟过来的请求有1万,那⼀个mysql单机绝对会死掉。你这个时候就只能上缓存,把很多数据放缓存,别放mysql。缓存功能简单,说⽩了就是key-value式操作,单机⽀撑的并发量轻松⼀秒⼏万⼗⼏万,⽀撑⾼并发so easy。单机承载并发量是mysql单机的⼏⼗倍。
所以要结合这俩场景考虑⼀下,你为啥要⽤缓存?
⼀般很多同学项⽬⾥没啥⾼并发场景,那就别折腾了,直接⽤⾼性能那个场景吧,就思考有没有可以缓存结果的复杂查询场景,后续可以⼤幅度提升性能,优化⽤户体验,有,就说这个理由,没有?那你也得编⼀个出来吧,不然你不是在搞笑么
问题分析
(1) redis 和 memcached 的区别
redis⽀持更丰富的数据类型(⽀持更复杂的应⽤场景):Redis不仅仅⽀持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。memcache⽀持简单的数据类型,String。
redis与Memcached⼀样,都⽀持数据的持久化,为了保证效率,数据都是缓存在内存中。区别的是Redis会周期性的把更新的数据写⼊磁盘或者把修改操作写⼊追加的记录⽂件,并且在此基础上实现了master-slave(主从)同步,⽽Memecache只会把数据全部存在内存之中。集模式:memcached没有原⽣的集模式,需要依靠客户端来实现往集中分⽚写⼊数据;但是 redis ⽬前是原⽣⽀持 cluster 模式的.
Memcached是多线程,⾮阻塞IO复⽤的⽹络模型;Redis使⽤单线程的多路 IO 复⽤模型
redis支持的数据结构(2)为啥redis单线程模型也能效率这么⾼? 1)纯内存操作
2)核⼼是基于⾮阻塞的IO多路复⽤机制
3)单线程反⽽避免了多线程的频繁上下⽂切换问题(百度)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论