redis面试2405
心得
- 总以为部署个项目,操作一遍就能越来越好,就可以天下无敌了。
- 那知道付出了那么多,花费了那么多时间才明白,一切都是狗屎,付出的青春和热血,除了碌碌无为,一无所获。
- 学习的第一步是从理论上理解原理,理解了之后才是用操作来辅助理解的。操作是没有意义的,因为没有办法考核。
- 真正有意义的是对理论的理解,这个也是考核的重点,是面试的难点。
- 只有先理论上通过面试,才可以入职。
- 入职后就会有个适应期,这个试用期才会用到你的操作技能。
- 一个好的文章是结合实践和应用长时间的打磨产生的,不是挤出个周六日的时间2天就能写好的。
优秀博客
- Redis之分布式锁
这个锁是,互斥锁,同一个标识的锁,只有一个线程能获得锁,上锁后,其他线程无法获得锁
可以通过判断锁是否上锁,如果上锁可以去执行其他操作,而不执行锁住的代码
- java synchronized详解
阻塞锁,锁会阻塞线程的执行,使多个线程出在等待状态
好像无发判断当前锁是否被占用
- 使用Redisson作为分布式锁
- SpringBoot Redisson 集成详解
Redis·106道必会面试题
- Redis·106 道面试题
- 面试题 3 . 简述Redis的数据类型?
- 面试题 6 . Redis是单进程单线程的?
- 面试题 8 . 阐述Redis 的持久化机制?各自的优缺点?
- 面试题 9 . Redis过期键的删除策略?
- 面试题 15 . Redis的key的命名规范 ?
- 面试题 29 . 简述Redis最适合的场景?
- 面试题 30 . 简述 Redis 提供 6 种数据淘汰策略?
- 面试题 38 . 阐述缓存穿透?怎么解决?
- 面试题 39 . 保证Redis 缓存和数据库数据的一致性?
- 面试题 41 . 如果有大量的key需要设置同一时间过期,如何处理?
- 面试题 46 . 简述什么是热key吗?热key问题怎么解决?
- 面试题 50 . 简述缓存雪崩?如何避免?
用redis做什么工作
这个考察的目的是redis的应用场景,都有哪些在项目中的应用。 缓 锁 制 算
1 作为数据缓存,避免大量的基本数据直接中数据库中获取。
2 复杂计算得出的数据,暂存在redis缓存中,提高应用的性能,节省资源。
3 redis数据结构的运作,比如zset做一个当天接口调用的排行,在比如用redis做一个接口调用计数器,达到阈值的时候,既是启动限流和降级并预警。
4 做主库,对当天的热点数据或频繁读写的数据,通过异步机制放到数据库中存储,保留一段时间。
5 其他还有做分布式锁,做发布订阅机制,以及数据结构求交集和并集的一些运算等等。
分布式锁的应用
zk和redis都使用过,但更推荐使用zk,因为他是高一致性,更可靠。接下来说说原理。
- zk实现
实现的原理就是zk的临时顺序节点,watch机制来实现的,有多个微服务或线程的情况下,只有一个去zk上创建锁,其他服务无法创建成功。
- redis实现
它是利用lua脚本和消费订阅机制来实现的,redis锁的特点是高可用性,所以一旦redis中的数据出现了不一致,可能会出现多个客户端同时加到锁的情况。如果用redis加锁需要设置锁的标识,设置锁的超时时间,以及在fanally中去解锁,避免死锁的出现。
redis常用的使用场景有那些
一个会话缓存,实现统一认证,
常用的数据缓存,
利用它list的数据结构做一个简单的消息队列,
set数据结构因为可以去重,可以做一个uv的统计,或者存储用户的id。也可以做集合的一些操作,比如求共同认识的人。
利用redis的有序set的数据结构可以做一个排行榜或计数器
利用redis实现一个发布订阅的功能。
利用redis的hash存储一些结构花的数据,比如用户的昵称 年龄等等一个用户信息的对象数据。
利用redis实现分布式锁
redis实现计数器
利用redis的自增命令设置一个key保存计数器的值
使用redis的分布式锁,保证分布式情况下,只有一个线程修改这个计数器
利用redis的持久化,把这个值放到磁盘上,保证意外情况不会受到影响。