Redis受人欢迎的使用场景

本文主要说明Redis的常用场景。其实知道Redis是什么是很重要,如果你的场景其实就是一个工作流,而你还是以Redis是缓存的角度去看待,明显会出问题。希望阅读完本文后,你能突破现有的业务局限,尝试探索新的领域。
在此简单介绍下

Redis介绍

Redis是基于内存的NoSQL数据结构存储,经常用作数据库、缓存和消息中间件。和同样基于内存的组件,如Memcached不同,它能将数据持久化到硬盘,也提供一定的错误恢复,它还有丰富易操作的数据结构。它具有优秀的性能,能低延迟处理大规模的数据,也足够简单。
我们知道,大部分NoSQL数据库并不需要定义好的SQL模式Schema,而是使用文档、KV或图等存储格式。而Redis与众不同的一点是它有不同的数据结构供你使用,如最常用的String/Hash/List/Set等等。如果你曾用过Memcached,这类只能以字符串存储的产品,应该对Redis这点更喜欢。这些数据结构是高度可配置的,增加很少的代码就能实现更复杂的(数据结构)功能。

常用场景

首先对常用场景做个概括:

  1. 统计数据和交互数据的缓存
  2. 用户会话数据管理
  3. 计数、排名等实时分析
  4. 商品/文章推荐
  5. 工作流的消息队列

缓存

缓存是Redis最知名的用法,也是入门都会遇到的典型案例。构建一个高性能可扩展的系统几乎都会涉及缓存,就和硬盘和内存一样,Redis保存部分核心存储的副本,以应对最频繁的访问,把压力转移避免核心存储造成性能瓶颈。具体说:

  • 缓存静态页面等页面内容,这样能减少后端Web服务器压力;
  • 缓存诸如排名,热点文章等更新慢读取频繁的内容;
  • 缓存用户会话信息,能提供给各应用,SOA和微服务共享;
  • 缓存API调用结果或频繁且慢的SQL结果;


    Redis缓存示意

用户会话数据管理

大型网站每天有亿万的用户访问, 这些访问的用户信息和如PV,商品,点击,加载时间和跳转时间等等访问信息都需要第一时间存储下来,存储到多个session里,然后后台的各个应用需要使用它,还可能要提供很多即时的用户交互。之前人们会直接在Tomcat等服务器上直接维护Session,但这样必须要考虑负载均衡的问题,要避免复杂的业务导致服务器宕机。而最重要的是session只能那台服务器使用,无法共享也存在丢失无法恢复的风险。现在需要一个能供所有后台应用或移动应用访问并且高可用高吞吐低延迟的数据存储。
Redis无疑都能做到,Hash的存储方式无疑适合用户ID用户名等数据,各种灵活的数据结构能把不同的数据分门别类地存储好,比如把一次会话的不同操作放入一个List里,访问和更新都很简单。也可以设置数据生存时间,既能控制会话超时也节省资源。


Redis用户会话示例

实时分析

Redis在实时分析计算方面也是异常好用,就如比赛中的裁判和计分员。以最常见的TopN计算为例,可以直接使用Redis的数据结构Sorted Sets 自动保存评论及进行点赞排序,当然它能支持更大的数据和更实时的场景。


Redis模拟计分的存储结构

用户推荐

现在做的智能零售也在尝试应用这个场景,在互联网零售和电商已经比较普及。简单的推荐就是有个平时和我购物习惯类似的人也买了,和我访问类似的人也访问了。利用Redis可以很容易地找出这些商品或文章。数据类型Set就是答案,在很多存储方案里,关联和交集是很耗资源很慢的操作,而在Redis里使用sadd + sinter操作就能从一堆set中找到它们的交集。还可以用sismember指定必需的标签或商品,或用smemers或sscan扩展交集,提供出“相似还**”的功能效果


Redis用于用户推荐存储结构

工作流的消息队列

使用Redis作为消息队列是很常见的用法。许多涉及工作流、工作环的系统都会使用到Redis,使用它的List类型。 比如一个交易订单可以放入队列由人工审核或算法自动审核,超时时自动出列,后续转入发送交易成功或失败的队列。还可以同时做远程监控。在Redis中List是有序的字符串集合,lpush可以从左边加入一个字符串,作为栈的开始。 And RPUSH will add the value to the ‘right’ end
of the list, usually referred to as the end or bottom of the List. RPOP will remove the last element of the list, while LPOP will
remove the first element. RPOPLPUSH, as fun as it sounds, is an efficient way to ‘pop’ an element from the right end of one
List and ‘push’ it to the left end of another List.


Redis用于工作流管理

参考翻译Redis白皮书《Popular Redis Uses for Beginners》

你可能感兴趣的:(Redis受人欢迎的使用场景)