redis常见面试题及答案

redis

1.什么是redis,有什么优缺点?

redis是单线程的基于内存存储的非关系型数据库,他是支持高并发的分布式缓存

优点1.读取速度快,2.支持丰富的数据类型3支持事物,4丰富的功能主从复制、集群、数据持久化等功能。

缺点数据库容量有限 受到物理内存的限制,不能用作海量数据的读写。

2.分布式锁 为什么要有分布式锁?

保证一个方法在高并发情况下的同一时间只能被同一个线程执行。

3.分布式事务

单独的隔离操作

事物是一个原子操作

4.过期删除策略

定期,随机,惰性。

redis采用定期删除+惰性删除策略。

淘汰策略或机制

volatile-lru从已设置过期时期间的数据集中挑选最近最少使用的数据淘汰。

volatile-ttl挑选将要过期的数据淘汰

volatile-random任意选择数据淘汰

allkeys-lru从数据集挑选 最常用的 移出最近最少使用的key

allkeys-random任意选择数据淘汰

no-enviction禁止驱逐数据

5.缓存血崩 穿透,击穿及解决

1.缓存失效,在同一段时间缓存过期,数据库宕机,造成系统崩溃。加锁或队列的方式保证。我们可以将缓存的数据设置不同的失效时间,这样就可以避免缓存数据在某个时间段集中失效。例如对于热门的数据(访问频率高的数据)可以缓存的时间长一些,对于冷门的数据可以缓存的时间短一些。

2.用户查询数据,在数据库中没有,在缓存中找不到造成。

布隆过滤器、设置较短的缓存过期时间比如60秒。value为null查的值为null

大并发集中对这一个点进行访问,当这个key在失效的瞬间

3.击穿,将这些热点数据设置永不过期

6.为什么是单线程的

为什么设计成单线程的?

避免了不必要的上下文切换和竞争条件。

单线程为什么这么快

1.纯内存操作,2.单线程操作,避免了频繁的上下文切换3.采用了非阻塞IO多路复用机制。

7.持久化

1.Redis的持久化机制?

Redis 提供两种持久化机制 RDB 和 AOF 机制

用数据集快照的方式记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束 后, 用这个临时文件替换上次持久化的文件, 达到数据恢复

各自的优缺点?

优,方便持久化,启动效率高。缺点: 1、数据安全性低。

优,数据安全,缺:AOF 文件比 RDB 文件大, 且恢复速度慢。

rdb数据快照.aof追加文件

区别

aof文件比rdb大,持久化效率比rdb慢

8.数据类型及应用

string.hash.list.set.zset

验证码,缓存或购物车,点赞或消息队列,抽奖或共同好友,排行榜。

9.哈希槽

redis集群有16384个哈希槽,每个key通过crc16算法得到hash值,然后对16384取模来决定放置哪个槽。

Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,

这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

10.redis为什么需要把所有数据放到内存中

实现最快的对数据读取。存储在硬盘会影响redis性能。

11.缓存雪崩和缓存穿透,击穿

1.缓存雪崩缓存失效,在同一段时间缓存过期,数据库宕机,造成系统崩溃。加锁或队列的方式保证。我们可以将缓存的数据设置不同的失效时间,这样就可以避免缓存数据在某个时间段集中失效。例如对于热门的数据(访问频率高的数据)可以缓存的时间长一些,对于冷门的数据可以缓存的时间短一些。

2.用户查询数据,在数据库中没有,在缓存中找不到造成穿透。

设置较短的缓存过期时间比如60秒。value为null查的值为null

3.大并发集中对这一个点进行访问,当这个key在失效的瞬间击穿,某一时间大量请求并发访问某一个key,而正好这个key并没有在缓存中,从而跑到数据库查询,导致数据库压力过大甚至崩溃的情况。引起的原因一般是热点key过期导致的。

将这些热点数据设置永不过期。

击穿和雪崩的区别

击穿对于特定的热点数据来说,而雪崩是全部数据.

12.Redis的同步机制

第一次同步时,主节点做一次 bgsave, 并同时将后续修改操作记录到内存 buffer, 待完成后将 rdb 文件全量同步到复制 节 点, 复制节点接受完成后将 rdb 镜像加载到内存。加载完成后, 再通知主节点将期 间修改的操作记录同步到复制节点进行重放就完成了同步过程。

希望对大家有帮助,有用的大家可以关注点个赞~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、什么是 Redis? 2、Redis 相比 memcached 有哪些优势? 3、Redis 支持哪几种数据类型? 4、Redis 主要消耗什么物理资源? 5、Redis 的全称是什么? 6、Redis 有哪几种数据淘汰策略? 7、Redis 官方为什么不提供 Windows 版本? 8、一个字符串类型的值能存储最大容量是多少? 9、为什么 Redis 需要把所有数据放到内存中? 10、Redis 集群方案应该怎么做?都有哪些方案? 11、Redis 集群方案什么情况下会导致整个集群不可用? 12、MySQL 里有 2000w 数据,Redis 中只存 20w 的数据, 如何保证 Redis 中的数据都是热点数据? 13、Redis 有哪些适合的场景? 14、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 15、RedisRedisson 有什么关系? 16、Jedis 与 Redisson 对比有什么优缺点? 17、Redis 如何设置密码及验证密码? 18、说说 Redis 哈希槽的概念? 19、Redis 集群的主从复制模型是怎样的? 20、Redis 集群会有写操作丢失吗?为什么? 21、Redis 集群之间是如何复制的? 22、Redis 集群最大节点个数是多少? 23、Redis 集群如何选择数据库? 24、怎么测试 Redis 的连通性? 25、Redis 中的管道有什么用? 26、怎么理解 Redis 事务? 27、Redis 事务相关的命令有哪几个? 28、Redis key 的过期时间和永久有效分别怎么设置? 29、Redis 如何做内存优化? 30、Redis 回收进程如何工作的? 31、Redis 回收使用的是什么算法? 32、Redis 如何做大量数据插入? 33、为什么要做 Redis 分区? 34、你知道有哪些 Redis 分区实现方案? 35、Redis 分区有什么缺点? 36、Redis 持久化数据和缓存怎么做扩容? 37、分布式 Redis 是前期做还是后期规模上来了再做好?为 什么? 38、Twemproxy 是什么? 39、支持一致性哈希的客户端有哪些? 40、Redis 与其他 key-value 存储有什么不同? 41、Redis 的内存占用情况怎么样? 42、都有哪些办法可以降低 Redis 的内存使用情况呢? 43、查看 Redis 使用情况及状态信息用什么命令? 44、Redis 的内存用完了会发生什么? 45、Redis 是单线程的,如何提高多核 CPU 的利用率? 46、一个 Redis 实例最多能存放多少的 keys?List、Set、 Sorted Set 他们最多能存放多少元素? 47、Redis 常见性能问题和解决方案? 48、Redis 提供了哪几种持久化方式? 49、如何选择合适的持久化方式? 50、修改配置不重启 Redis 会实时生效吗?

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值