一文详解如何使用Redis实战

学了redis不会实战?看这篇就够了

适用人群:熟悉redis的指令,但不了解使用场景的人群。

本文会详细描述各个场景的伪代码和对应的redis指令,至于为什么只是伪代码是因为每个语言操作redis的方式不一致,但是思想是一致的,只需要根据这个思想去找对应的api即可。

String 命令实战

String的命令主要是有三大运用场景:分别是分布式锁的运用,限流操作和业务缓存。

1.业务缓存

场景复现:某个活动即将在 11月11日开展。预期数据库的访问压力陡增。

解决方案:利用Redis,提前将要被多次访问的数据放入redis,做到“缓存预热”。让用户进入我们活动页面的时候,先去搜索缓存,不直接访问数据库,做到释放数据库的压力。

对应redis中的指令

set data "data"
​
get data
复制代码

伪代码

void cacheData(){
    //1.从数据库中获取热点数据
    
    //2.将此类数据序列化
    
    //3.将 (data-data的id) 作为key,序列化的data作为value,利用string的set方法,存入redis。将活动的持续时间作为TTL
    
}
​
void getData(id){
    //1.将data和id拼接作为key,根据key聪redis中根据string的get指令,进行查询。
    //2.1查询到,直接返回
    //2.2没有查询到,根据id去数据库中查找,如果有,就直接返回,并存入redis中。
}
复制代码

2.分布式锁

场景复现:多个服务去抢夺资源,有并发,线程安全问题。

解决方案:利用redis的set ... nx命令,实现分布式锁的效果。

为什么它叫分布式锁呢?其实是因为多个服务都可以连接到一个redis中,相当于,水库里的水很多,但是总要从一个管道里流出一样,这个管道就相当于控制,同一时间内,只有一部分水可以流出。

对应redis中的指令

set key value NX
复制代码

当目标key不存在的时候,才允许写入这个key,如果key已经存在,这个key就写不进去

伪代码

void tryLock(id){
    //1.不断抢锁直到抢到
    while(true){
        //1.1.把 (update+传入的id)作为key,当前线程的名称作为value,使用nx指令,设置5s的过期时间(避免因为系统原因未能释放,则导致锁无法释放,这是兜底措施)
        //1.2.1.如果1.1步骤失败,说明抢锁失败,进入下一次循环,继续抢锁。
        //1.2.2.如果成功,就break,结束循环    
    }
    //2.执行业务逻辑
    //3.删除 (update+传入的id)的key的值,相当于释放锁。
}
复制代码

3.限流

场景复现:高并发场景下,抢购,秒杀等,流量峰值很高,但是后端业务的资源很有限

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值