JAVA面试汇总之redis

一、redis是什么

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

  • BSD协议: 简单来说就是你可以自由修改源代码

二、redis的特点

  • Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启时可以再次加载进行使用
  • Redis不仅仅支持简单的key-value类型数据,同时还提供list、set、zset、hash等数据结构
  • Redis支持数据的备份,集群等高可用功能
  • 速度快、支持丰富的数据类型、支持事务、丰富的特性

三、redis的并发竞争问题

  • 对连接进行池化,同时对客户端读写Redis操作采用内部锁synchronized
  • 利用setnx实现锁

四、redis的分布式锁

主要是使用了redis 的setnx命令,缓存了锁,Redis缓存的key是锁的key,所有的共享, value是锁的到期时间

  • 通过setnx尝试设置某个key的值,成功(当前没有这个锁)则返回,成功获得锁
  • 锁已经存在则获取锁的到期时间,和当前时间比较,超时的话,则设置新的值

五、redis 的持久化实现

  • RDB
    • RDB持久化是指在指定的时间间隔内将内存中的数据集快照写入磁盘,实际操作过程是fork一个子进程,先将数据集写入临时文件,写入成功后,再替换之前的文件,用二进制压缩存储;
  • AOF
    • AOF持久化以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的方式记录,可以打开文件看到详细的操作记录。
    • 默认开启,若命令执行到一半荡机了,不可以重启

六、redis缓存穿透

原因:请求缓存中不存在的数据,导致所有的请求都怼到数据库上,从而数据库连接异常。

解决方案:

  • 采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层数据库的查询压力
  • 如果一个查询返回的数据为空,仍然把这个空结果进行缓存,但它的过期时间会很短,最长不超过五分钟
  • 利用互斥锁,缓存失效的时候,先去获得锁,得到锁了,再去请求数据库。没得到锁,则休眠一段时间重试
  • 用异步更新策略,无论 Key 是否取到值,都直接返回。Value 值中维护一个缓存失效时间,缓存如果过期,异步起一个线程去读数据库,更新缓存。需要做缓存预热操作

七、redis缓存雪崩

原因:当缓存服务器重启或者大量缓存集中在某一个时间段失效,来了一批请求,请求全部到DB,DB瞬时压力过重雪崩。

解决方案:

  • 给缓存的失效时间加上一个随机值,避免集体失效
  • 双缓存,我们有两个缓存,缓存 A 和缓存 B。缓存 A 的失效时间为 20 分钟,缓存 B 不设失效时间。自己做缓存预热操作。然后细分以下几个小点:从缓存 A 读数据库,有则直接返回;A 没有数据,直接从 B 读数据,直接返回,并且异步启动一个更新线程,更新线程同时更新缓存 A 和缓存 B。

八、Redis缓存击穿

原因:缓存在某个时间点过期的时候,恰好在这个时间点对这个Key有大量的并发请求过来,这些请求发现缓存过期一般都会从后端DB加载数据并回设到缓存,这个时候大并发的请求可能会瞬间把后端DB压垮。

解决方案:

  • 使用互斥锁

十三、redis高效原因

  • redis采用单线程
  • redis完全基于内存
  • redis的数据结构简单

九、NoSQL

NoSQL是非关系型的数据库。是Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。它具有非关系型、分布式、不提供ACID的数据库设计模式等特征。

十、NoSQL和SQL的区别

SQLNoSQL
存储使用表存储相关的数据使用类JSON格式来存储
添加数据需要先定义表和字段才能添加数据可以随时随地添加数据
外部数据存储添加外键关联其他表直接把数据添加在原数据里
JOIN查询使用JOIN关联其他表查询未提供
数据耦合性需要满足数据完整性约束允许数据随时改变
事务可通过事务控制数据每个数据都是原子级
查询方式使用sql语句查询使用json数据对象查询

十一、NoSQL四大类别

  • 列式数据
  • 文档数据库
  • 图形数据库
  • 内存键值存储

十二、NoSQL适用场景

  • 数据模型比较简单
  • 需要灵活性更强的IT系统
  • 对数据库性能要求高
  • 不需要高度的数据一致性
  • 对于给定key,比较容易映射复杂值的环境

好啦,redis面试就简单介绍到这里啦,如果有需要的话,需要你自己去深入了解一些其他的原理,面试到这里就差不多可以了。

大部分都是我自己面试整理和百度上其他地方零零碎碎拼上的,如果少什么,或者缺少些什么,你可以跟我留言,我会去校对的。哈哈哈哈哈 又是愉快的一天。

还有,如果你看完了,emmmm,那我又是成功忽悠到人的一天。哈哈哈哈哈哈

如果你想知道一些别的(面试题)可以留言我会提前出一部分出来,当然啦,仅限面试题。 拜拜

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值