Redis相关知识

面试经常问到有关Redis的相关知识,这里我做了一些相关知识的整理来加深自己的印象

1. redis 的概念和相关使用场景

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 使用场景:
1.数据高并发的读写
2.海量数据的读写
3.对扩展性要求高的数据

2. redis 的功能

1.数据缓存功能
2.分布式锁的功能
3.支持数据持久化
4.支持事务
5.支持消息队列z

3. redis 和 memecache 的区别(这个面试经常被问到)

1.memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型
2.redis的速度比memcached快很多
3.redis可以持久化其数据

5. redis 单线程的原因(这个也经常会问)

因为Redis是基于内存的,所以CPU不会是Redis的瓶颈,但是内存会是,而且多线程的实现比较麻烦,直接使用单线程更省事一点。

4. redis 支持的数据类型

string(字符串)、list(列表)、hash(哈希)、set(集合)、zset(有序集合)

6. redis 持久化的方式

Redis 的持久化有两种方式,或者说有两种策略:
1.RDB(Redis Database):指定的时间间隔能对你的数据进行快照存储。
2.AOF(Append Only File):每一个收到的写命令都通过write函数追加到文件中。默认情况下AOF处于关闭状态。

7. jedis 是什么

Jedis是Redis的Java实现的客户端,其API提供了比较全面的Redis命令的支持

8. redis 会遇到的问题及结局方案

1.缓存雪崩
  • 发生场景 : 当Redis服务器重启或者大量缓存在同一时期失效时,此时大量的流量会全部冲击到数据库上面,数据库有可能会因为承受不住而宕机

  • 解决方案 :

均匀分布 : 我们应该在设置失效时间时应该尽量均匀的分布,比如失效时间是当前时间加上一个时间段的随机值

熔断机制 : 类似于SpringCloud的熔断器,我们可以设定阈值或监控服务,如果达到熔断阈值(QPS,服务无法响应,服务超时)时,则直接返回,不再调用目标服务,并且还需要一个检测机制,如果目标服务已经可以正常使用,则重置阈值,恢复使用

隔离机制 : 类似于Docker一样,当一个服务器上某一个tomcat出了问题后不会影响到其它的tomcat,这里我们可以使用线程池来达到隔离的目的,当线程池执行拒绝策略后则直接返回,不再向线程池中增加任务

限流机制 : 其实限流就是熔断机制的一个版本,设置阈值(QPS),达到阈值之后直接返回
双缓存机制 : 将数据存储到缓存中时存储俩份,一份的有效期是正常的,一份的有效期长一点.不建议用这个方案,因为比较消耗内存资源,毕竟Redis是直接存储到内存中的

1.缓存穿透
  • 发生场景 :
    此时要查询的数据不存在,缓存无法命中所以需要查询完数据库,但是数据是不存在的,此时数据库肯定会返回空,也就无法将该数据写入到缓存中,那么每次对该数据的查询都会去查询一次数据库
  • 解决方案 :

布隆过滤 : 我们可以预先将数据库里面所有的key全部存到一个大的map里面,然后在过滤器中过滤掉那些不存在的key.但是需要考虑数据库的key是会更新的,此时需要考虑数据库 --> map的更新频率问题
缓存空值 : 哪怕这条数据不存在但是我们任然将其存储到缓存中去,设置一个较短的过期时间即可,并且可以做日志记录,寻找问题原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值