1 Star 1 Fork 0

浪迹 / MySQL

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
redis.md 7.25 KB
一键复制 编辑 原始数据 按行查看 历史
浪迹 提交于 2021-04-08 17:48 . 重命名 redis.txt 为 redis.md

1-10 可能会遇到的面试题 1.什么是 Redis? redis是非关系数据库,是已键值对的形式存储数据的,分布式缓存的之间件。 提供海量数据的存储访问,数据缓存在内存中读取更快。 2.Redis 的数据类型? String , list ,hash ,set ,zset 3.使用 Redis 有哪些好处? 高性能读取(每秒读取是可以达到10万每秒的),高可用(redis可以搭建集群),存数据,做缓存(发送了宕机,重启数据还是会存在的)。 丰富的数据结构(String , list ,hash ,set ,zset) 持久化 主从同步,故障转移 内存数据库 4.Redis 相比 Memcached 有哪些优势? redis 丰富的数据结构(String , list ,hash ,set ,zset),支持持久化 5.Memcached 与 Redis 的区别都有哪些? Memcached redis key-value 只支持String 丰富的数据结构(String , list ,hash ,set ,zset) 内存使用率也是比较高的 持久化 多核处理,多核线程 主从同步,故障转移 内存数据库 6.Redis 是单进程单线程的吗?为何它那么快那么高效? 1.完全基于内存的 2.采用单线程,避免不必要的上下文切换可竞争条件 3.数据简单,数据操作也相对简单 4.使用多路I/O复用模型,非阻塞IO

7.一个字符串类型的值能存储最大容量是多少? 512M

8.Redis 的持久化机制是什么?各自的优缺点? redis 持久化分别为 RDB 和AOF 什么是RDB:每个一段时间,把内存中的数据写入到磁盘中的零时文件中,作为快照,当恢复数据时把零时文件读取到内存中。 RDB 优点 每隔一段时间都会进行数据备份,全量备份。 备灾简单,支持远程传输 子进程进行数据备份的时候,主进程不会有任何的i/O操作,已保证备份数据的完整性。 相对与AOF来说,文件数据越大,恢复的数据快。 缺点 发生故障时,有可能会丢失最后一次备份的数据造成数据不完整。 子进程消耗的cpu跟主进程一模一样的,这样会造成cpu负担 由于定时备量是重量级操作,所以对实时备份就无法处理了

AOF的特点 1.以日志的形式来记录用户写的操作。读操作不会记录,因为只有写的操作才会被存储。 2.文件以追加的形式,而不是以修改的形式。 3.redis的aof恢复其实就是把追加的文件从开发到结尾读取执行写操作。

AOF的优劣势 优势 1.AOF更加耐用,可以以秒级单位备份,如果发生故障也只会丢失最后一秒的数据,大大增加了数据的可靠性和完整性。所以AOP可以进行秒级备份,使用fsync操作。 2.以log日志的形式追加,如果磁盘满了,会执行redis-check-aof工具。 3.当数据太大的时候redis可以在后台自动重写aof,当redis继续把日志追加到老的文件中去时,重写也是非常安全的,不会影响客服端的读写操作。 4.AOF日志包含了所以的写操作,会更加便于redis的恢复。 劣势 1.相同的数据,同一份数据,AOF会比RDB大。 2.针对不同的同步机制,AOF会比RDB慢,因为APF每秒都在做写的备份。每秒备份fsync没毛病,但如果客服端的每秒写入就做一次备份fsync的话,那么redis的性能就会下降。 3.AOF发生过bug,就是数据恢复的时候数据不完整,这样显得AOF会比较脆弱,容易出现bug,因为AOF没有RDB那么简单,但是为了防止bug的产生,AOF不会根据旧的指令去重构,而是根据当时缓存中存在的数据指令去重构,这样就更加可靠。

9.Redis 常见性能问题和解决方案有哪些?

10.Redis 过期键的删除策略? 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键 定期删除: 每隔一段时间,程序就对数据库进行一次检查,删除里面的过期键。至于要删除多个过期键,以及要检查多少个数据库,则由算法决定

11.Redis 的回收策略(淘汰策略)?

12.为什么Redis 需要把所有数据放到内存中?

13.Redis 的同步机制了解么?

14.Pipeline 有什么好处,为什么要用 Pipeline?

15.是否使用过 Redis 集群,集群的原理是什么?

16.Redis 集群方案什么情况下会导致整个集群不可用?

17.Redis 支持的 Java 客户端都有哪些?官方推荐用哪个?

18.Jedis 与 Redisson 对比有什么优缺点?

19.Redis 如何设置密码及验证密码?

20.说说 Redis 哈希槽的概念?

21.Redis 集群的主从复制模型是怎样的?

22.Redis 集群会有写操作丢失吗?为什么?

23.Redis 集群之间是如何复制的?

24.Redis 集群最大节点个数是多少?

25.Redis 集群如何选择数据库?

26.怎么测试 Redis 的连通性?

27.怎么理解 Redis 事务?

28.Redis 事务相关的命令有哪几个?

29.Redis key 的过期时间和永久有效分别怎么设置?

30.Redis 如何做内存优化?

31.Redis 回收进程如何工作的?

32.都有哪些办法可以降低 Redis 的内存使用情况呢?

33.Redis 的内存用完了会发生什么?

34.一个 Redis 实例最多能存放多少的 keys?List、Set、Sorted Set他们最多能存放多少元素?

35.MySQL 里有 2000w 数据,Redis 中只存 20w 的数据,如何保证Redis 中的数据都是热点数据?

36.Redis 最适合的场景是什么?

37.假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以某个固定的已知的前缀开头的,如果将它们全部找出来? 使用 keys 指令可以扫出指定模式的 key 列表。 页对方接着追问:如果这个 redis 正在给线上的业务提供服务,那使用 keys 指令会 有什么问题?

这个时候你要回答 redis 关键的一个特性:redis 的单线程的。keys 指令会导致线 程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。这个时 候可以使用 scan 指令,scan 指令可以无阻塞的提取出指定模式的 key 列表,但 是会有一定的重复概率,在客户端做一次去重就可以了,但是整体所花费的时间

38.如果有大量的 key 需要设置同一时间过期,一般需要注意什么? 防止redis的雪崩。

39.使用过 Redis 做异步队列么,你是怎么用的?

40.使用过 Redis 分布式锁么,它是什么回事?

redis 分布式锁的实现原理 1.获取锁的redis命令 Set resource_name my_random_value NX PX 30000

resource_name:资源名称,可根据不同的业务区分不同的锁

my_random_value:随机值,每个线程的随机值都不相同,用于释放锁时的校验

NX: key不存在是设置成功,key存在则设置不成功

PX:自动失效时间,出现异常情况,锁可以过期失效

41.如何预防缓存穿透与雪崩?

SQL
1
https://gitee.com/langren19/my-sql.git
git@gitee.com:langren19/my-sql.git
langren19
my-sql
MySQL
master

搜索帮助