Redis 是互联网技术领域使用最为普遍的存储中间件,它是「Remote Dictionary Service」的首字母缩写,也就是「远程字典服务」。Redis 以其超高的性能、完美的文档、简洁易懂的源码和丰富的客户端库支持在开源中间件领域广受好评。国内外不少大型互联网公司都在使用 Redis,好比 Twitter、YouPorn、暴雪娱乐、Github、StackOverflow、腾讯、阿里、京东、华为、新浪微博等等,不少中小型公司也都有应用。也能够说,对 Redis 的了解和应用实践已成为当下中高级后端开发者绕不开的必备技能。html
由 Redis 面试想到的面试
在面试后端工程师 Redis 技能的时候,面试官一般问的第一个问题就是“Redis 能用来作什么?”,第一个回答每每都会是「缓存」。缓存确实是 Redis 使用最多的领域,它相比 Memcache 而言更加易于理解、使用和控制。 但是若是再进一步问“还有呢?”,大多数同窗就会开始皱眉头,只有一小部分人会回答「分布式锁」。若是你就分布式锁再深刻问下去,他们基本就会开始摇头:咱们项目里面 Redis 的锁方法都是别人(应该是架构师)封装好的,拿过来直接使用,内部细节没有去了解过,也没有必要了解。 对相似的场景,我深有体会。由于关于 Redis 的面试题,以前准备了不少,可是真正能用上的却不多。当面试的同窗频繁地回复「不知道、没用过」的时候,再继续深刻追问已经毫无心义,这时候就须要切换话题了。偶尔赶上几个能持续不少回合的同窗,他们总能令人眼前一亮。若是再拓展一下周边知识点,就会发现这些人每每也会有所涉猎,这时我在心中已经暗暗地对这位同窗伸出了大拇指。 这样的面试经历过后也让我深入反思:架构师的技能很高,对提高团队研发效率颇有帮助,咱们很是钦佩和羡慕。可是普通开发者若是习惯于在架构师封装好的东西之上,只专一于作业务开发,那长此以往,在技术理解和成长上就会变得迟钝甚至麻木。从这个角度看,架构师也可能成为普通开发者的“敌人”,他的强大能力会让你们变成“温室的花朵”,一旦遇到环境变化就会不知所措。redis
其实不少业务场景,若是仅仅是会使用某项技术、框架,那是再简单不过了。但随着业务发展,系统的用户量、并发量涨上来以后,现有系统的问题就会层出不穷地暴露出来。若是不能深刻地了解系统、技术和框架背后的深层原理,不少问题根本没法理解到本质,更谈不上解决,临时抱佛脚也于事无补。 所谓「授人以鱼不若授人以渔」,本小册的初衷和目标就是帮助后端开发者较为深刻的理解 Redis 背后的原理和实践经验,作到知其然也知其因此然,为将来进阶成长为架构师作好准备。数据库
Redis能够作什么?后端
Redis的业务应用范围很是普遍,Redis 能够用在哪些地方?缓存
一、记录文章的评论数、点赞数和点击数(hash)。架构
二、记录用户的文章 ID 列表 (排序),便于快速显示用户的文章列表 (zset)。并发
三、记录文章的标题、摘要、做者和封面信息,用于列表展现。(hase)。框架
四、记录文章的点赞用户id列表,评论id列表,用于显示和去重计数(zset)。分布式
五、缓存近期热点文章,减小数据库压力(hash)。
六、记录文章的相关文章id,根据内容推荐相关文章(list)。
七、若是文章ID是整数自增的,可使用redis来分配文章id(计数器)。
八、收藏集和文章之间的关系(zset)。
九、记录热门文章id列表,总热榜和分类热榜(zset)。
十、缓存用户历史行为,进行恶意行为过滤(zset,hash)。