面试场景题

优化

SQL优化,JVM、DB,Tomcat参数调优>硬件性能优化(内存升级、CPU核心数增加、机械硬盘->固态硬盘等等)>业务逻辑优化/缓存 > 读写分离、集群等>分库分表

动态缓存热点数据

zset:通过数据最新访问时间来做排名,并过滤掉不常访问的数据,只留下经常访问的数据

怎么实现延迟队列 / 订单超时取消?

Redis 可以使用有序集合(ZSet),Score 属性可以用来存储延迟执行的时间
使用 zadd score1 value1 命令就可以一直往内存中生产消息。再利用 zrangebysocre 查询符合条件的所有待处理的任务, 通过循环执行队列任务即可

Redis分布式锁

误删别人的锁?

将锁变量的值设置为客户端的唯一标识(比如线程id)

超时释放了怎么办?

我们可以基于续约的方式设置超时时间:先给锁设置一个超时时间,然后启动一个守护线程,让守护线程在一段时间后,重新设置这个锁的超时时间。实现方式就是:写一个守护线程,然后去判断锁的情况,当锁快失效的时候,再次进行续约加锁,当主线程执行完成后,销毁续约锁即可,不过这种方式实现起来相对复杂

主从模式下锁重复获取

如果在 Redis 主节点获取到锁后,在没有同步到其他节点时,Redis 主节点宕机了,此时新的 Redis 主节点依然可以获取锁,所以多个应用服务就可以同时获取到锁。

分布式锁算法 Redlock(红锁):它是基于多个 Redis 节点 的分布式锁,让客户端和多个独立的 Redis 节点依次请求申请加锁,如果客户端能够和 半数以上 的节点成功地完成加锁操作,那么我们就认为,客户端成功地获得分布式锁,否则加锁失败。即使有节点发生了故障,锁变量仍然是存在的,客户端还是可以完成锁操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值