写点什么

2021 大厂面试题之 redis 篇

作者:小麦
  • 2022 年 1 月 11 日
  • 本文字数:919 字

    阅读完需:约 3 分钟

2021大厂面试题之redis篇

redis 如何实现分布式锁的?

当指定键不存在时,向 Redis 中添加一个键值对。当键不存在时,对键进行设置操作并返回成功,否则返回失败。Redis 客户端保证对统一键名称,多个客户端同时设置其值时,只有一个客户端能够设置成功的原子性。SETNX 的原子特性,和 Redis 的键过期特性,实现了自动过期释放的分布式锁

setnx
if (setnx(key, 1) == 1){    expire(key, 30)    try {        //TODO 业务逻辑    } finally {        del(key)    }}
复制代码


redis 如何实现事务?

通过 WATCH 命令监视某个键,当该键未被其他客户端修改值时,事务成功执行。当事务运行过程中,发现该值被其他客户端更新了值,任务失败,进行重试


Redis 的 WATCH、MULTI 和 EXEC 命令,只会在数据被其他客户端抢先修改的情况下,通知执行这些命令的客户端,让它撤销对数据的修改操作,并不能阻止其他客户端对数据进行修改,所以只能称之为乐观锁。



def acqure_lock_with_watch(conn, lockname, acquire_timeout=10): pipe = conn.pipeline() end = time.time() + acquire_timeout lockname = 'lock:' + lockname
while time.time() < end: try: pipe.watch(lockname) pipe.multi() # 开启事务 # 事务具体内容,对lockname的值进行更新 pipe.execute() return True except redis.exceptions.WatchError: # 事务运行期间,有其他客户端改变了lockname的值,抛出异常,进行重试操作 pass
return False
复制代码

redis 误解锁问题了解过吗?


redis 抢购商品代码实现方式讲讲?


什么是 redis 缓存穿透?


redis 如何防止缓存雪崩?


redis 如何防止缓存击穿?


布隆过滤器实现原理简单讲讲?


redis zset 的实现原理是怎样的?


redis ttl 即缓存过期策略是怎样?


redis 的 zset 结构除了跳表还有?


redis 是单线程还是多线程?


redis 是单线程的为什么却这么快?


redis 多线程版本做了哪些优化?


使用 redis 需要注意的或者 redis 有啥缺点?


redis rdb 具体步骤是怎样的?


redis 主从复制同步流程是怎样的?


redis rdb 具体步骤是怎样的?


redis AOF 写入的流程是怎样?


redis 哨兵和 主从分别有啥优缺点?


redis 突然某个时间段变慢的原因有哪些?


发布于: 刚刚阅读数: 2
用户头像

小麦

关注

还未添加个人签名 2019.08.15 加入

还未添加个人简介

评论

发布
暂无评论
2021大厂面试题之redis篇