当前位置:首页 > 问答 > 正文

弹性伸缩带来的好处,redis缓存怎么灵活用起来真心挺方便的

(根据知乎专栏“云原生技术实践”关于资源管理的讨论) 弹性伸缩带来的好处,最直接的感受就是省钱和省心,以前我们要搞个活动,比如双十一或者新品发布,最头疼的就是服务器,你根本不知道会有多少人涌进来,怕服务器撑不住网站崩溃,就只能提前花大价钱租用或者买很多台服务器放着,结果可能活动没想象中那么火爆,大部分机器就闲着,钱白白浪费了,看着都心疼,但用了弹性伸缩之后,这事儿就变得聪明多了,它就像个自动的管家,时时刻刻盯着你的网站压力,比如CPU用了多少,内存还剩多少,平时人少的时候,它就只维持几台机器运行,成本压到最低,一旦发现访问量开始往上爬,快要扛不住了,它不用你吩咐,自己就立马去启动新的服务器,加入到服务的队伍里来,保证网站不会卡顿或者宕机,等活动结束了,人潮退去,它又会把多余的服务器关掉,避免资源闲置,这样一来,我们只需要为真正用到的计算能力付钱,再也不用为可能用不着的“备胎”买单了,成本控制变得非常精准。

弹性伸缩带来的好处,redis缓存怎么灵活用起来真心挺方便的

(根据某技术博客“高并发系统设计心得”中的案例) 除了省钱,弹性伸缩还让系统特别扛得住冲击,也就是稳定性大大提升,以前最怕的就是突发流量,比如某个大V突然转发了我们的链接,流量瞬间暴涨,运维同事就得火急火燎地手动去加机器,整个过程手忙脚乱,很可能还没等机器启动好,网站已经挂了一会儿了,用户体验非常差,现在有了自动伸缩,系统自己能应对这种突发状况,几乎是瞬间就能扩容,把流量平稳地接住,用户几乎感觉不到卡顿,对我们开发者和运营来说,心里也踏实多了,不用再24小时提心吊胆地盯着监控数据,可以睡个安稳觉了,这种自动化的能力,也让整个业务的灵活性提高了不少,我们可以更大胆地做一些推广活动,不用担心技术跟不上。

(引用自开源社区Redis官方文档的应用模式章节) 再说说Redis缓存怎么灵活用起来,真心挺方便的,Redis最简单直接的用法就是给数据库减负,比如我们网站上有个热门商品页面,每天被访问几十万次,如果每次点击都去查数据库,数据库肯定受不了,速度也会慢,这时候就可以用Redis,第一次查数据库后,把这个商品信息放到Redis里,设置个过期时间,比如五分钟,接下来的五分钟内,所有用户再来访问这个页面,直接从Redis里拿数据,速度飞快,像是从内存里取东西一样,数据库那边一下就轻松了,这就是所谓的“缓存热点数据”,效果立竿见影。

弹性伸缩带来的好处,redis缓存怎么灵活用起来真心挺方便的

(根据项目实践经验总结) 但Redis的灵活之处远不止于此,它还能用来做很多“小工具”,我们可以用它来实现简单的秒杀功能,秒杀的核心问题是不能超卖,也就是库存只有100件,不能卖出101件去,利用Redis一个叫DECR的命令(就是原子减一),可以非常完美地解决这个问题,先把库存数量预先放到Redis里,每个用户下单时,都通过这个命令去减库存,这个操作是原子性的,不会出现两个人同时减导致库存错乱的情况,只有减完之后结果大于等于0的人,才算抢购成功,否则就返回已售罄,这种方式比用数据库事务来处理要简单和高效得多。

(参考了“架构师之路”微信公众号中关于会话管理的文章) 还有一个特别常见的灵活用法就是存放用户登录状态(Session),在传统的单台服务器上,用户登录信息存在本机内存没问题,但现在网站基本都是多台服务器,用户这次请求可能落到A机器,下次可能落到B机器,如果Session存在A上,B就不认识这个用户了,解决办法就是把所有用户的Session统一存到一个Redis集群里,这样不管用户访问哪台服务器,都能从Redis里读到登录信息,实现了“分布式会话”,用户感觉就像始终在和一台服务器打交道一样,体验无缝衔接。

(结合多个技术分享中关于排行榜功能的实现) Redis自带的数据结构也给了我们很多惊喜,比如它有一种叫有序集合(Sorted Set)的类型,天生就是用来做排行榜的,像游戏里的玩家积分排名、论坛里的帖子热度排名,都可以用这个来实现,每次玩家得分变化或者帖子被点赞,就更新一下它在有序集合里的分数,然后要取前十名,就是一个命令的事情,效率极高,如果这个功能用数据库来做,SQL语句会写得很复杂,而且数据量大了以后查询会非常慢,用Redis就显得格外轻巧和方便。

(综合自社区对Redis持久化功能的讨论) 很多人刚开始担心Redis是内存数据库,万一服务器重启数据不就没了吗?其实Redis自己也考虑了灵活性,它提供了两种主要的持久化方式,可以把内存里的数据定期存到硬盘上,这样即使重启,也能从硬盘恢复数据,保证了重要数据不会丢失,我们可以根据业务的重要性,选择不同的持久化策略,在性能和可靠性之间做一个平衡。

Redis的灵活性就在于它不只是一个简单的缓存,它提供的多种数据结构和原子操作,让我们能像搭积木一样,巧妙地解决很多传统数据库不擅长处理的高并发、实时性要求高的场景问题,用好了它,确实能让系统性能提升一个大档次,开发效率也高很多。

弹性伸缩带来的好处,redis缓存怎么灵活用起来真心挺方便的