摘要:Redis 作为一款高性能缓存服务,在互联网后端有着广泛的应用,也成为内存数据库事实上的标准。程序员们想要构建快速响应的服务,就有必要学习 Redis 并应用在工程中。
Redis 作为一款高性能缓存服务,在互联网后端有着广泛的应用,也成为内存数据库事实上的标准。程序员们想要构建快速响应的服务,就有必要学习 Redis 并应用在工程中。
但不少程序员在学完 Redis 的基本操作后,就陷入了一个困境,一问操作都会,但在实际工作中一用就发懵,这是为何?
Redis 本质上是一个键值对数据库,支持多种数据结构,如字符串、列表、集合、有序集合和哈希表等。程序员在掌握了数据的插入、查询、修改、删除操作后,面临的难题其实是如何为业务选择最合适的数据结构与解决方案。
我们来了解一下 Redis 的主流应用场景:
缓存:作为缓存数据库,减少对后端数据库的访问,提高系统性能。会话存储:在分布式系统中,用来存储用户会话信息,实现会话共享。排行榜和计数器:有序集合适合实现各种排行榜功能,如社交网络的点赞数、评论数等。消息队列:发布/订阅功能可以构建简单的消息队列系统。实时分析:可以用于统计网站的访问量、用户行为分析等。如果仅靠自己在上述业务场景中去摸索,那不知要费多少功夫,要是有现成的实例可供参考那该多好。
这本书现在有了!《Redis 应用实例》精选了 32 个实战案例,覆盖了使用 Redis 的主要业务场景,程序员想知道 Redis 怎么用只要翻开这本书就能找到答案。
不多说,我们先把工作环境搭建起来。
本书专注基于 Redis 的应用实现,因此对 Redis 的基础语法不会过多介绍,这需要读者预先学习,或者在阅读本书的过程中随时从其他资料中查找用到的命令详情。
建议大家可以先掌握以下命令:
字符串(Strings):设置键值对 (SET key value),获取键值 (GET key),递增 (INCR key),递减 (DECR key) 。列表(Lists):从列表左侧添加元素 (LPUSH key value),从右侧添加元素 (RPUSH key value),获取列表元素 (LRANGE key start stop) 。集合(Sets):添加元素 (SADD key member),检查元素是否存在于集合中 (SISMEMBER key member),获取集合中所有元素 (SMEMBERS key) 。有序集合(Sorted Sets):添加元素并设置分数 (ZADD key score member),获取有序集合的元素 (ZRANGE key start stop WITHSCORES) 。哈希(Hashes):添加键值对 (HSET key field value),获取键值 (HGET key field),获取所有字段和值 (HGETALL key) 。发布/订阅:发布消息到频道 (PUBLISH channel message),订阅频道 (SUBSCRIBE channel) 。书中所有示例均以 Python 语言编写,没有用到太多高级特性,读者掌握 Python 基本语法即可流畅阅读。
接下来要准备好实验环境,为了保持学习体验的一致性,建议读者安装以下三个软件,并注意不低于对应的版本:
Redis 7.4Python 3.12redis-py 客户端版本为 5.1.0b7为我们讲述 Redis 实战用法的本书作者是黄健宏,他从 2011 年接触 Redis 起,就一直在持续地学习和研究 Redis , 并通过写书、翻译、讲授课程等方式与大家分享他了解到的 Redis 知识。
黄健宏是多部 Redis 技术畅销书的作译者,包括《Redis 实战》《Redis 设计与实现》等。而在技术演进多年之后,他在这些经典作品的基础上延续发展,编写了这本更贴近当下的《Redis 应用实例》。
在研究、传播 Redis 技术的过程中,黄健宏看到当前市场上大多数 Redis 图书关注的是命令、运维、架构、源码分析等方面的内容,而对实际应用着墨不多。因此他决定创作本书,把读者最关心的常见应用方法给讲透。
我们来具体了解书中的 32 个应用实例。
本书根据应用特点,从三个方面来介绍 Redis 在业务中的使用,分别是内部组件、外部应用、数据结构。每个实例单独构成一章,由需求描述、解决方案、实现代码、重点回顾构成,有些实例中还包含扩展实现。
内部组件
通常用于系统内部,如缓存、锁、计数器、迭代器、速率限制器等,通过构建这些组件,读者可以大幅提升系统整体性能。
缓存文本数据:使用字符串键缓存单项数据,使用JSON/哈希键缓存多项数据。缓存二进制数据:讲解了设置二进制传输的方法,给出了一个图片缓存示例。锁:使用带有 NX 选项的 SET 命令来实现加/解锁操作。带密码保护功能的锁:通过 SET 命令把客户端给定的密码设置为锁键的值。自增数字 ID:使用使用字符串键/哈希键实现自增数字 ID 生成器。计数器:使用使用字符串键/哈希键实现计数器。唯一计数器:使用集合键/HyperLogLog 键实现唯一计数器。速率限制器:用字符串键以及键的自动过期特性实现。二元操作记录器:用位图数据结构实现,可用于签到功能。资源池:用集合实现对系统资源的管理。紧凑字符串:使用 APPEND 命令加上特定的分隔符存储多个字符串。数据库迭代器:用迭代器类 DbIterator 封装 SCAN 命令,方便访问。流迭代器:使用 XRANGE/XREAD 实现流迭代器。外部应用
这部分介绍的是如何构建一些常见功能,包括如直播弹幕、社交关系、排行榜、分页、地理位置等。
消息队列:使用一个流作为其底层实现,用 XADD 添加消息,用 XRANGE/XREAD 读取消息。标签系统:使用集合为目标创建标签。自动补全:使用有序集合存储建议表。抽奖:使用集合维护抽奖名单。社交关系:每个用户维护正在关注者集合与关注者集合。登录会话:设置哈希键的过期时间,维持用户登录状态。短网址生成器:创建ID并映射到原网址。投票:使用集合记录支持者与反对者名单。排行榜:使用有序集合实现热度排行榜单。分页:使用列表实现分页操作。时间线:使用有序集合实现内容的时间线管理。地理位置:GEOADD 记录坐标,GEOPOS 获取坐标,GEODIST 计算距离,GEOSEARCH 搜索附近用户。数据结构
这部分介绍了先进先出队列、栈、优先队列和矩阵等 Redis 常用数据结构的用法,读者可以学会将它们作为其他程序的底层数据结构或者基本构件使用。
先进先出队列:基于列表实现。定长队列和淘汰队列:基于列表实现。栈(后进先出队列):基于列表实现。优先队列:基于有序集合实现。循环队列:基于列表实现。矩阵:使用列表/位图实现矩阵存储。逻辑矩阵:使用位图实现。掌握了这 32 个经典实例,读者必定如虎添翼,能够快速构建出稳定高效的应用。
《Redis 应用实例》全面而深入,它凝聚了作者多年的研究和实践经验,本书通过精心设计的内容和实用的实例,为读者提供 Redis 最佳实践指导 。
本书一大特点是覆盖了 Redis 的三个核心应用领域:内部组件、外部应用和数据结构。从系统内部的缓存和锁机制,到用户直接互动的直播弹幕和社交关系,再到底层的数据结构实现,如队列和栈,这本书为读者揭示了 Redis 在不同场景下的强大功能和灵活性。
精彩书摘
另一大特点是面向实战,极具实用性。书中的实例聚焦于核心原理,通过精选的关键 API 和简洁的代码实现,使读者能够快速把握 Redis 的核心概念。这种聚焦核心的方法有助于读者在掌握基础后,能够灵活地将知识应用到更广泛的情境中。
本书提供了完整的代码示例,所有实例程序均用 Python 编写,代码风格简单直接,易于理解。书中还附有代码地址链接,读者可以下载运行,进一步学习和实践。
代码示例
本书内容编排合理,逻辑清晰,每个章节都设计为可以独立阅读,适合自学。无论是按顺序系统学习,还是根据个人兴趣选择特定章节,读者都可以获得良好的学习体验。
对于书中的难点,本书提供了配套的视频讲解“Redis应用十讲”,通过扫描书中的二维码即可免费观看,为读者提供了更加直观和便捷的学习方式。
本书适合对 Redis 有一定基础的技术人群,无论是想要深化 Redis 技能的开发者,还是希望在项目中应用 Redis 的工程师,都能从这本书中获得宝贵的知识和实用的技巧。
学会《Redis 应用实例》的 32 个经典案例,互联网应用开发全都能拿下!
来源:西亚教育