redis基础知识

缓存基本问题

缓存穿透:缓存和数据库都没有数据,导致数据库进行大量的查询操作。
解决方案:用户鉴权,查询条件校验。在数据库没有查询到值的时候,缓存一个null值。
缓存击穿:缓存中没有数据,数据中有数据,缓存key过期,在高并发的情况下,对数据库的压力过大。
解决方案:设置热点数据永不过期。加互斥锁(获取锁成功,数据库查询数据,更新缓存,不成功暂停一段时间再去缓存中获取数据)。
缓存雪崩:大量的key过期,而且查询量巨大,在一瞬间数据库的压力过大。
解决方案:缓存数据的过期时间设置随机,防止同一时间大量数据过期,将热点key分布在不同的缓存数据库中,设置热点数据永不过期。

redis做分布式锁

主要通过setnx命令实现。
setnx lock abc:在lock不存在的情况下将lock设置为abc。返回1。
setnx lock cba:覆盖lock的值返回0,覆盖失败。
del lock:删除lock的值
加锁:setnx key abc 如果key不存在设置value成功(加锁),如果已经存在设置失败。
解锁:del命令,通过键值释放锁。
注意:在加锁的时候设置一个有效时间,防止因客户端崩溃,而导致的锁无法释放。
set lock iop ex 20 nx相当与setnx和设置时间的操作。
问题:
1.锁的失效时间设置为多长。
通过watchDog机制实现锁的续期,当加锁后,开启守护线程,默认有效期为30s,每隔10s就会给锁续期30s,如果宕机了自然在有效期之后解锁。
2.可重入锁(在获取锁之后,可以再次获取锁不会出现死锁)
通过hset命令设置可重入锁的次数。
3.加锁失败,一值轮询耗费性能。
通过发布订阅机制 ,当加锁失败后订阅释放的消息,自身阻塞,当持有锁的客户端释放锁的时候,发布锁的释放的消息,其他阻塞的用户再次轮询,尝试加锁。

redis的持久化机制

RDB:保持某个时间点的全量数据,容易丢失部分数据。
AOF:通过append命令记录每一次的操作状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值