序-为什么要学Redis
和隔壁组的老哥聊天,老哥最近面了十几个候选人,他觉得合格的只有四五个。我问他主要问了什么?他重点提到了Redis。
提到这,他忍不住吐槽:“他们很多人Redis真的不行,问他们Redis主从、哨兵、集群什么的都答不上来。基本上就用过一些封装的api,也敢写熟悉。”
听到这,我也有点不好意思,这些东西我也不太清楚,我也只是个只会调api的crud仔,要是现在在他手下面试,基本会被挂掉吧。
而且Redis这东西还真的不是“造火箭”的范畴,这个老哥他们组的业务大量用到了Redis,而且和数据库不同,Redis是没有专门的运维人员的,数据迁移、故障排查等等运维工作都是由开发来完成的。
所以对开发人员,Redis不应该是一个api包裹的黑箱,而要打破认知的障碍,深入学习Redis,积蓄进步的力量。
1、Redis简介
Redis[1]是一种基于键值对(key-value)的NoSQL数据库,与很多键值对数据库不同的是,Redis中的值可以是由string(字符串)、hash(哈希)、
list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)、 HyperLogLog、GEO(地理信息定位)等多种数据结构和算法组成,因此
Redis可以满足很多的应用场景,而且因为Redis会将所有数据都存放在内存中,所以它的读写性能非常惊人。不仅如此,Redis还可以将内存的数据利
用快照和日志的形式保存到硬盘上,这样在发生类似断电或者机器故障的时 候,内存中的数据不会“丢失”。
除了上述功能以外,Redis还提供了键过期、发布订阅、事务、流水线、Lua脚本等附加功能。总之,如果在合适的场景使用好Redis,它就会像一把瑞士军刀一样所向披靡。
国内外很多大型互联网公司都在使用 Redis,比如 Twitter、YouPorn、暴雪娱乐、Github、StackOverflow、腾讯、阿里、京东、华为、新浪微博等等,很多中小型公司也都有应用。也可以说,对 Redis 的了解和应用实践已成为当下中高级后端开发者绕不开的必备技能。
2、Redis的应用场景
2.1、缓存
缓存机制几乎在所有的大型网站都有使用,合理地使用缓存不仅可以加快数据的访问速度,而且能够有效地降低后端数据源的压力。Redis提供了键值过期时间设置,并且也提供了灵活控制最大内存和内存溢出后的淘汰策略。可以这么说,一个合理的缓存设计能够为一个网站的稳定保驾护航。
2.2、排行榜系统
排行榜系统几乎存在于所有的网站,例如按照热度排名的排行榜,按照发布时间的排行榜,按照各种复杂维度计算出的排行榜,Redis提供了列表和有序集合数据结构,合理地使用这些数据结构可以很方便地构建各种排行榜系统。
2.3、计数器应用
计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1的操作,如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持计数 功能而且计数的性能也非常好,可以说是计数器系统的重要选择。
2.4、社交网络
赞/踩、粉丝、共同好友/喜好、推送、下拉刷新等是社交网站的必备功 能,由于社交网站访问量通常比较大,而且传统的关系型数据不太适合保存这种类型的数据,Redis提供的数据结构可以相对比较容易地实现这些功能。
2.5、消息队列系统
消息队列系统可以说是一个大型网站的必备基础组件,因为其具有业务解耦、非实时业务削峰等特性。Redis提供了发布订阅功能和阻塞队列的功能,虽然和专业的消息队列比还不够足够强大,但是对于一般的消息队列功能基本可以满足。
2.6、分布式锁与单线程机制
- 验证前端的重复请求(可以自由扩展类似情况),可以通过redis进行过滤:每次请求将request Ip、参数、接口等hash作为key存储redis(幂等性请求),设置多长时间有效期,然后下次请求过来的时候先在redis中检索有没有这个key,进而验证是不是一定时间内过来的重复提交
- 秒杀系统,基于redis是单线程特征,防止出现数据库“爆破”
- 全局增量ID生成,类似“秒杀”
3、Redis各版本特性
Redis借鉴了Linux操作系统对于版本号的命名规则:版本号第二位如果是奇数,则为非稳定版本(例如2.7、2.9、3.1),如果是偶数,则为稳定版本(例如2.6、2.8、3.0、3.2)。
Redis重要版本时间轴如下:
其中Redis3.0是一个重要的版本,添加Redis的分布式实现Redis Cluster,填补了 Redis官方没有分布式实现的空白。
参考:
【1】:《Redis开发与运维》
【2】:掘金小册 《Redis 深度历险:核心原理与应用实践》
【3】:Redis之各版本特性
【4】:一:Redis的7个应用场景