自己总结的redis面试题(4)

redis面试题

1、Redis中的常用数据类型

Hash ,String ,Set ,List

还有一种Redis中的常用数据类型:

字典、跳跃表、整数集合、链表

字典:是一种用于保存键值对的抽象数据结构

字典中, 一个键(key)可以和一个值(value)进行关联, 并且每个键都是独一无二的, 程序可以在字典中根据键查找与之关联的值, 或者通过键来更新值, 或者根据键来删除整个键值对等,字典在Redis中的应用广泛,比如Redis的数据库就是使用字典作为底层实现的, 对数据库的增删改查操作就是构建在对字典的操作之上的。

字典底层是hash表

2、Redis的常用命令有哪些?

存放键值:set key value

获取键值:get key

设置过期时间:expire key seconds

设置永不过期:persist key

3,Redis是什么?都有哪些使用场景?

Redis是一个单线程的Nospl型数据库(不仅仅是sql)因为可以不用sql来存储数据。

特征: 可扩展,可伸缩。走内存,大数据量下性能高

场景:

(1)为热点数据加速查询(主要场景),如热点商品,热点新闻。

(2)及时信息查询,如排行榜

(3)时效性信息控制,如验证码

(4)分布式数据共享,如分布式说集群中的session分离消息队列???

4、Redis是单线程还是多线程的?为什么?

Redis是单线程的,因为Redis是基于内存操作的。官方给定一个普通的笔记本轻松处理每秒几万条数据。所以单线程足够使用。采用单线程避免了上下文切换,(上下文切换就是线程时间片到了进入阻塞状态,分到时间片后又从阻塞切换到运行状态)和锁的一些问题。

5、Redis持久化有几种方式?如何配置?

Aof(Append Only File 仅附加文件) 和 rdb

RDB:是采用快照技术,记录当前时间下redis数据的二进制状态,定时dump到磁盘上进行持久化。(RDB是redis默认的)

AOF: 以独立日志的方式记录每次写操作(读写,写set操作)

RDB的优缺点:RDB这种持久化方式可以根据自己业务要求来灵活设置快照规则(save 300 10 #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。),而且dump.rdb文件里面是压缩的二进制文件,占内存小,一旦系统出现灾难,我们可以很快恢复。缺点:系统一但在定时持久化之前出现宕机的现象,此前没有来得及写入磁盘的数据就会丢失。(大数据量下的IO性能低)

AOF: AOF很好的解决了数据的持久的实时性问题。可以日志中查看存储的对Redis进行了哪些操作。存储数据快,恢复慢。

服务器的高可用问题:穿透,击穿,雪崩

6、Redis中什么是缓存穿透?如何解决?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oS0ueNO6-1623884947416)(file:///C:\Users\www27\AppData\Local\Temp\ksohtml2464\wps1.jpg)]

Redis的穿透就是用户想要查询一个数据的时候,发现redis中没有,就去数据库中找,数据库中也没有。当用户多的时候,请求都去了数据库,造成数据库压力大,顶不住了。宕机了。

布隆过滤器相当于一个白名单,查布隆过滤器如果没有就返回一个空值。布隆过滤器底层是一个二进制数组,当key过来是,会使用hash算法,算出二进制。

在这里插入图片描述

7、Redis的缓存预热?

服务器启动后,用户访问没有数据,预热就是在服务器启动之前,直接将相关的数据加到redis中,使用脚本加。避免在用户请求的时候,先查询数据库,然后再将数据进行缓存,预热后用户直接查询缓存就行。

8、Redis中的击穿?如何解决?

缓存击穿,是指key非常热点,扛着大并发,大并发集中对这个点进行访问,当key瞬间失效(失效),持续的大并发就会穿透缓存,直接请求数据库。造成数据库压力大,宕机了。

解决,预防监控,及时调整过期时间。

9、Redis中的雪崩?如何解决?

缓存雪崩,是指在某一个时间段,缓存集中过期失效。

比如双十一,零点商品进行抢购,将这些上去放入缓存,过期时间为一小时,一小时后,这些商品就会失效,然后对这批商品的访问又会落到数据库上,造成数据库宕机。

解决:调整过期策略,根据业务数据有效期进行分类错峰(A类70分钟,B类60分钟,C类90分钟)

A类中的小类,采用过期时间使用固定值+随机值的形式,避免集中过期。

超热数据设置成永久有效,后期人工维护就行了。(只能解决40%,具体还得找运维商量)

10、Redis支持的数据类型有哪些?其中一个String类型最多存储多大数据?

Redis常用的数据类型:String,Hash, List(存储有顺序的数据),Set(为了查询方便,底层是一个hashmap 只是feil的位置用来存value,value的位置不存), 其中一个String的value最大可以存储512MB的数据。

Java中String的长度65535,字符串有长度限制,在编译期,要求字符串常量池中的常量不能超过65535,

Integer长度 -128 — 127

11、如何保证Redis缓存数据和数据库数据保持一致?

1. 数据库有数据,缓存没有数据;

2. 数据库有数据,缓存也有数据,数据不相等;

3. 数据库没有数据,缓存有数据。

市面上大多数人使用的策略:

1,读的话:首先尝试从缓存中读取,读取到数据则直接返回;如果读不到数据,就读数据库中的数据,并将数据写到缓存,并返回。

2,写的话:需要更新数据库时,先更新数据库,然后把缓存中对应的数据删除。

12、Redis如何实现分布式锁????
13、redis集群的搭建⽅式?(如哨兵集群模式如何搭建)

集群:将多个主从结构连接在一起。对外呈现单机的服务效果。

集群作用:分散单台服务器的访问压力,实现负载均衡;分散单台服务器的存储压力,实现扩展性;降低单台服务器宕机带来的业务压力。

哨兵:哨兵也是一个redis服务器,通常哨兵是单数的,监控所有redis服务器的运行状态,选择,当master挂掉之后选择一个从节点作为master。

哨兵的搭建:1,首先得有集群,配置一个一拖二的主从结构,2,配置三个哨兵,sentinel.conf 3,启动哨兵,redis-sentinel + 配置文件

3个哨兵之间形成了发布订阅模式

redis的集群解决方案 Redis_Cluster

Redis_Cluster的数据存储设计:将所有的集群存储空间分成16384份,存得时候将key按照一定的算法计算出一个值,然后对16384进行取模操作

Redis_Cluster集群的搭建:

(1)配置服务器(3主3从)

(2)建立服务器间的通信(Meet)

(3)分槽(16384个槽)

(4)搭建主从(master-slave)

14、reids集群备份数据的时候会不会影响对外提供服务,为什么?

不会因为是异步的备份的,RDB的bgsave

15、集群怎么监控?

哨兵

16、怎么把新的redis加⼊到集群中?

Cluster集群的扩容问题,看添加的redis是主节点,还是从节点,

如果是从节点:具体的指令好像是: redis-cli --cluster add-node 新的节点的ip和端口 master的ip和端口号。

如果是主节点,输入添加指令,然后再输入分槽指令。

如果删除主节点,又要进行重新分槽。

Cluster nodes 命令 (查看集群中所有节点)

17、redis集群中插槽有多少个?怎么计算?(哈希槽计算出节点分配)

redis的槽是redis_Cluster集群中的概念,一共有16384个槽,槽就是用来存储数据的。当一个key过来时,使用一种类似于hash的算法算出一个值,然后对16384进行取模。

18、高并发怎么处理,redis 10万级QPS

单机也就几万,实现主从架构,读写分离。 redis_cluster(redis集群)
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值