111.什么是NoSQL
NoSQL,泛指非关系型数据库,NoSQL即Not-Only_SQL,它可以作为关系型数据库的良好补充。NoSQL数据库的产生就是为了解决大规模数据库集合多重数据库种类带来的挑战,尤其是大数据应用的难题。解决高并发的问题。因为像mysql或oracle单机能够承受的并发数最多也就几千
112. Redis
Redis是用C语言开发的一个开源的高性能键值对数据库。它通过提供多种键值数据类型来适用不同场景下的存储需求,目前为止redis常用的键值数据类型有五种:
1.字符串类型 string。
2.散列类型 hash
3.列表类型 list
4.集合类型 set
5.有序集合类型
redis的字符串是二进制安全的(存入什么数据取出的还是什么数据)
113.为什么使用 redis
因为 mysql 数据库单表数据上线为 352W 条大概,如果分布式系统数据海量的话,很容易突破上线,到时即使搭建数据库集群或者主从配置,读写分离,当高并发情况下,还是会发生并发问题,因为 mysql 的 I/O 读写瓶颈问题无法突破,无论是存在表里还是数据库的数据,最终都要写到磁盘里,然后通过数据库客户端读取,这是无法避免的问题。 所以为了解决这问题,只有把数据缓存到内存中,读取速度超快,不存在 IO 瓶颈问题。
114.redis hash(散列类型)存储比关系数据库的好处?
两者都可以存放对象,对于关系型数据来说,存储数据比较严格、有事务控制,安全性更高,
但是关系型数据库在并发压力下性能很低,所以使用redis hash类型可以在一定程序上替代关系型数据库,因为redis单机并发量支持10万+
115. redis的哨兵机制
redis主从之间可以通过哨兵进行检查主节点的状态,如果主节点出现故障,会通过投票的方式自动切换从节点为主
redis cluster集群默认16384个hash槽,集群搭建成功之后,需要给每一个主节点分配hash槽。当外部数据插入的时候,会对key进行crc16然后对16384取模,这样就计算出哪个节点对该数据进行管理。我们在项目当中采用的3主3从的结构,主从之间通过哨兵,出现故障自动切换.
117.在集群中有一台redis服务有问题,整个集群是否可用
那么对于整个redis集群(是否可以继续提供服务)角度来看,有两种情况存在:
如果集群中故障redis服务存再主从服务,那么访问的时候回访问从redis服务,集群正常运行。
redis集群中没有做主从备份,如果其中有一台redis服务故障挂掉,那么很遗憾,整个集群则都不能使用,因为Redis集群的时候每一个Redis节点保存的数据不一样,如果一个节点有问题则整个数据就缺失。
118.你们在项目当中哪些地方用到redis?
1:我们项目当中一些字典表数据,通过redis进行缓存提高查询性能,比如品牌表省市县表等等
2:我们利用redis的过期策略,短信验证码存入redis,两分钟之内有效
3:我们整个项目架构采用redis充当session容器,实现分布式环境下的session共享
4:我们利用redis的list队列,基于push pop的原子性,实现商品抢购秒杀的场景
5:购物车功能使用redis来存储登录用户的购物车信息
119.缓存的穿透和雪崩问题,你们是如何解决的?
穿透 顾名思义,就是大量的请求穿过缓存层,达到数据库,造成数据库压力过大
举例:你登录淘宝之后,订单搜索,你输入一个无效的订单,通过压测工具恶意攻击
解决方案:
1.每次请求时,在redis层,做一个bitMap,先去bitmap中查询一下是否存在该条件,进行过滤
2.每次请求,查询数据库就算不存在,我也将查询条件和null在redis中进行缓存
雪崩是指在某一个时间点,大量的缓存同时失效,请求达到数据库,造成数据库压力过大
解决方案:对大量数据设置过期时间时,哪怕业务需要同时失效,我也不设置同一个时间,
分别对每一组key value 设置失效时间,让每一组key value的失效时间间隔个几毫秒
120.持久化
Redis的高性能是由于其将所有数据都存储在了内存中,为了使Redis在重启之后仍能保证数据不丢失,需要将数据从内存中同步到硬盘中,这一过程就是持久化。
Redis支持两种方式的持久化,一种是RDB方式,一种是AOF方式。可以单独使用其中一种或将二者结合使用。
通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据。这就需要开发者根据具体的应用场合,
通过组合设置自动快照条件的方式来将可能发生的数据损失控制在能够接受的范围。如果数据很重要以至于无法承受任何损失,则可以考虑使用AOF方式进行持久化。
项目当中必须使用rdb,手动开启aof,来保证数据的完整性,先加载rbd 在加载aof
更多面试题,请打开首页,找到java面试分栏进行查看更多内容