Redis 应用场景

手机验证码场景

redis里面存储过期时间。通过校验redis里面存储的值来校验验证码是否过期或者是否正确。


image.png

校验逻辑


image.png

延伸

邮件的激活也是类似,通过下发一个随机的激活码,但是这个激活码具有时效性。是天然的redis的使用场景

Redis作为缓存数据库

这里涉及到一个问题缓存中的数据如何和DB的数据进行同步呢(MySQL和Redis的双写一致性)

  • 先更新缓存再更新数据库
    如果更新缓存成功但是数据库失败,会造成脏数据,绝对不可取
  • 先更新数据库在更新缓存
    在高并发情况下,线程A更新数据库成功,但是还没有更新缓存。线程B这时候更新数据库,并且更新了缓存。这时候线程A再更新缓存。造成线程B对缓存的更新丢失了
  • 先删除缓存,再更新数据库
    这种避免了缓存更新丢失的情况,但在高并发情况下依然会有不一致情况。


    image.png

可以是使用延迟双删的方式来解决。

public void write(String key,Object data){
        redis.delKey(key);
        db.updateData(data);
        Thread.sleep(1000);
        redis.delKey(key);
}
  • 先更新数据库,再删除缓存


    image.png
public void write(String key,Object data){
    db.updateData(data);
    redis.delKey(key);
    Thread.sleep(1000);
    redis.delKey(key);
}

你可能感兴趣的:(Redis 应用场景)