Redis 典型应用场景

Redis 典型应用场景

       Redis的应用场景非常丰富,可以从以下角度去理解和挖掘Redis的应用:

  1. Redis 产品形态内分布式存数据库:缓存,分布式应用包括:分布式ID, 分布式Session是Redis的基本应用场景。
  2. 丰富的数据类型所支持应用场景:Redis支持字符串、支持字符串、Hash、列表、Set、SortedSet类型及其相关命令。因此基于这些类型所建立的算法及应用Redis都能高效支持,如双向列表可以应用于消息队列、有序集合可以应用于排行、int类型可以提供计数器等功能。
  3. 特定命令带来的业务支持: 如发布/订阅命令,过期命令应用于时效性应用,如订单占用等待支付,等。

下面我们从以上三个方法分别介绍一些Redis的典型应用场景。

缓存、分布式、数据库等基础功能

缓存/分布式缓存

应用需要分布式缓存(相对于本地换粗而言)时,可以使用Redis作为分布是缓存,使用字符串作为KEY,存储内容选用适当的序列化(JdkSerializationRedisSerializer, JacksonJsonRedisSerializer) 存储对象类型。 或则作为Spring cache等缓存抽象的缓存底层实现提供缓存能力。

分布式数据共享

       Redis是一个单独运行的中间件,作为一个分布式服务提供分布式应用数据共享,任何需要在分布式环境中共享的数据都可以通过Redis实现,如消息通知应用:将通知保存到Redis,其他应用读取。如Session共享:

       <dependency>

             <groupId>org.springframework.session</groupId>

             <artifactId>spring-session-data-redis</artifactId>

</dependency>

缓存数据库

       Redis作为可以应用数据库提供业务数据管理功能,再根据同步策略同步底层的关系型数据库中。

       缓存更新策略:

  1. 先删缓存,再更新数据库
  2. 旁路缓存(Cache Aside) 先更新数据库,再删缓存
  3. 先更新数据库,再更新缓存
  4. 读/写直通(Read/Write Through):更新数据库(Repository)的操作由缓存代理, 应用无需关心。
  5. 写回(Write Back)。在更新数据的时候,只更新缓存,不更新数据库,而我们的缓存会异步地批量更新数据库

数据类型应用

       Redis提供丰富的数据类型及相关命令,带来了丰富的应用场景。

字符串类型

SETEX/PSETEX: key过期设置命令。可以应用在具有时效性数据应用场景, 如订单超时支付取消,

INCR/INCRBY: 对key存储的数据进行递增加一或指定数据。 可以作为计数器或分布式ID生成器。

DECR/DECRBY:对key存储的数据进行递减一或指定数据。可以应用于限流、阈值等应用。

SETNX:在健key不存在时,将键key的值设置为value,返回1,如果key已经存在不进行任何操作,返回0. 结合key过期时间设置命令,实现分布式锁:当返回1则表示已经获取锁,返回0代表锁已经被其他应用占有,需等待重试获取锁。

哈希类型

HSETNX,HINCRYBY,提供类似于SETNX, INCRYBY的功能。 分布式Hash可以作为应用程序HashTable本地应用的分布式版本。Hash表通常用于高性能的查找,Redis的key的管理也是使用Hash表的数据结构实现。

双向链表

双向列表的灵活读取方式可以应用于

  1. 先进先出:排队场景、
  2. 后进先出的栈结构:如浏览历史回到上一步、获取最新发布内容等时间轴场景。

列表本身的基础应用,如消息队列、任务队列等都可以通过Redis是达到分布式应用的目的, 如任务队列, 可以作为任务调动使用,A应用发布任务到任务队列, 工作应用使用阻塞或非阻塞的POP命令获取任务进行消息的消费或任务处理,另外RPOPLPUSH相关命令在获取队列的元素的同时原子性的将元素转移到目标队列(待确认队列), 可以实现消息消费的确认或任务执行的确认和重试。如任务正常执行,则从待确认队列中移除, 超时未确认的任务则重新挪回任务队列重新执行。

集合和排序结合

      

SPOP: 返回集合中的随机元素,提供随机性应用, 如抽奖等

SADD/SREM/SISMEMBER: 集合元素的增加、删除以及判断是否成员,可以应用于快速确认元素关系的场景,如点赞、签到、打卡、资源tag、倒排索引等。

SINTERSTORE/SUNION:集合交集/并集。如区域是否重叠、关注是否相关等应用。

有序集合: 如ZINCRBY等命令,通过维护有序结合可以实现如排行榜、优先队列(消息队列、任务队列)等应用。

特定命令

位图运算

BIGCOUNT/BIGSET/GETBIT: 针对key进行位运算,以及获取位中为1的数量。 BITMAP数据的应用,特定bit位的值代表不同含义,如统计某人的每月每天登陆情况,布隆过滤器等应用。

大数据量统计HyperLogLog

HyperLogLog,是一种概率性的统计算法,每个 HyperLogLog 对象最大占用空间为 12KB,应对巨量数据的统计,存在一定的误差。如网站用户总人数统计(当用户量超大时使用传统的SET会带来内存问题)。

PFADD/PFCOUNT/PFMERGE,分别用于添加、计数与合并。

地理应用

       Redis提供一下地理位置操作命令支持地理应用。

       GEOADD/ GEOPOS: 添加和获取位置经纬度。

       GEODIST: 计算两个位置之间的距离。

       GEORADIUS/ GEORADIUSBYMEMBER:以给定的经纬度为中心,返回键包含的位置元素当中,与中心的距离不超过给定的最大距离的所有位置元素。

      

发布订阅

Redis提供发布/订阅应用支持。

PUBLISH/SUBSCRIBE/UNSUBSCRIBE: 发布、订阅、取消订阅通道信息

PSUBSCRIBE/PUNSUBSCRIBE: 按模式订阅和取消订阅通道

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值