Redis的应用场景

文章介绍了Redis在分布式环境中的多种用途,包括使用Redis实现分布式锁以解决资源访问控制问题,通过Redis实现单点登录(SSO)机制,以及利用Redis的incr和decr操作构建计数器。此外,还提到了基于Redis的限流策略,如基于setnx、zset和令牌桶算法的限流方法,以及利用zset数据结构创建实时排行榜。
摘要由CSDN通过智能技术生成

目录

分布式锁

什么是分布式锁,怎么产生的

Redis怎么实现分布式锁


数据共享

通过Redis可以实现分布式系统下的数据共享。

单点登录

什么是单点登录

参考(14条消息) 什么是单点登录?如何实现?_单点登录是什么意思_时清云的博客-CSDN博客

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一

SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

比如:淘宝、天猫都属于阿里旗下,当用户登录淘宝后,再打开天猫,系统便自动帮用户登录了天猫,这种现象就属于单点登录。

Redis怎么实现

Redis可以作为一个分布式的Session存储中心,实现单点登录的功能。具体的实现步骤如下:

  • 用户登录成功后,生成一个唯一的token,并将用户信息和登录状态等信息存储到Redis中,token作为key,用户信息作为value,设置过期时间。
  • 将token保存到Cookie中,或者通过其他方式传递给客户端。
  • 用户携带token去访问其他资源服务器,资源服务器根据token作为key从Redis中查询用户信息和登录状态,如果存在则重新设置过期时间,并放行请求,如果不存在则拒绝请求,并跳转到登录页面。

计数器

可以使用redis中的incr或者decr来实现计数器的功能。

分布式锁

什么是分布式锁,怎么产生的

当我们的项目是单体应用的时候,遇到了多线程的问题,我们可以使用ReentrantLock或者cynchronized这些JDK自带的锁来控制对资源的访问。

但是当我们的项目是分布式系统时,我们的每个服务都是一个独立的JVM,这个时候,JDK自带的锁自能锁当前的服务,对其他的服务并不起作用,这个时候我们就迫切的需要一把锁来进行分布式系统资源访问控制,于是分布式锁就诞生了。

Redis怎么实现分布式锁

setnx可以实现分布式锁,我们请求资源前,先执行setnx语句,之后,其他的线程想要再请求资源时setnx就会返回false,从而达到锁的目的。

限流

参考(14条消息) Redis 实现限流器的三种方法_redis断路限流器配置与使用_XP-Code的博客-CSDN博客

1、基于setnx实现

setnx是不存在了才赋值,分布式锁中就利用了这个功能。那假如我们在使用setnx时给这个key设置一个值并且给他设置过期时间,比如setnx lock 10、expire lock 10。然后我们每次请求的时候都先看看有没有lock,如果没有就新建,如果有就判断它是否大于零,如果大于零九就进行减一操作。这就实现了10秒内最多执行10条线程。

当然这种做法的弊端是很多的,比如当统计1-10秒的时候,无法统计2-11秒之内,如果需要统计N秒内的M个请求,那么我们的Redis中需要保持N个key等等问题。

2、基于zset数据结构

value值保持固定,score存时间戳,当请求进来时进行score排序查询,查询十秒内的数量是否小于10,小于就zadd一个数据,然后执行操作,大于就return false。

3、基于令牌桶

使用Redis的List数据结构。

设置一个定时任务,每秒往List插入一个数据,当请求时,首先先去lpop设置的List,如果能正常得到数据,则证明没有达到最大值,如果得到的为空,则说明请求已经达到最大值。

可以看一下参考中的代码,理解更深,这个只是较浅的理解!

实时排行榜

可以使用zset数据结构来实现

使用score来存储数值,这个时候就可以实现基本的排行榜。、

如果考虑一些时间的因素,这个时候我们可以在存入score的时候加上时间戳,这样就可以满足日常所需。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值