1.Redis五种基本数据类型,三种特殊数据类型
五种基本数据类型
- string字符串
- list列表
- hash哈希
- set集合
- zset有序集合
三种特殊数据类型
- geospatial 地理位置
- hyperloglog 基数统计
- bitmap 位存储
2.Redis的事务
一次性,顺序性,排他性,但无隔离性,无原子性
3.Redis在项目中做什么工作
排序 统计 积分 点赞 实时热点
4.Redis锁
- 悲观锁:任何时候都会出现问题,每走一步都要加锁 缺点:影响性能
- 乐观锁:任何时候都不会出现问题,不加锁,更新数据时,判断是否有人修改过此数据
- 互斥锁:分布式锁,使用此锁,保证对每个key同时只有一个线程查询后端服务,其他线程没有获得分布式锁权限,则只需等待,将高并发压力转移到分布式锁,对分布式锁性能考验极大
5.Redis的虚拟内存机制是啥呢?
6.Redis主从复制原理
slave启动成功连接master后发送一个sync命令,master接到命令后,启动后台存盘进程,同时收集所有接到的用于修改数据集命令,在后台进程执行完毕后,master将传送整个数据文件到slave,并完成一次完全同步
- 全量复制:slave服务接到数据库文件后,将其存盘并加载到内存中
- 增量复制:master继续将新的所有收集到的修改命令依次传给slave完成同步
7.什么是Redis脑裂
Redis集群脑裂是某个master所在机器突然脱离了正常网络,导致master节点跟slave节点和哨兵集群处于不同的网络分区,哨兵会认为主宕机,开始选举,将其他slave切成主,则此时,集群中出现了俩个主,形成脑裂
8.造成脑裂的原因
- 心跳线链路故障,无法正常通信
- 网卡或驱动损坏,IP配置冲突
- 其他服务配置不当等原因
9.Redis中哨兵的作用
- 监控集群
- 消息通知
- 故障转移
- 配置中心
10.哨兵中的领导选举
故障转移时,需要一个哨兵节点执行这个操作,大家会通过投票选举的方法,选择一个领导者来执行这个操作,一般由第一个发现故障的哨兵节点去执行
11.Redis哨兵集群工作原理
哨兵节点复制监控整个集群的所有节点,若发现主节点客观下线,则通知其他哨兵进行判断,若判断下线,则所有哨兵节点通过选举出一个哨兵节点进行故障转移,把其中一台从节点提升为主节点,其余从节点指定到新主节点上,下线节点恢复后,指向新主节点,并通知客户端新主节点IP地址。
12.Redis中cluster集群简述
cluster集群是一个无中心点结构,每个节点都保存数据和集群状态,也会保存其他节点上的信息,知道其他节点信息,并定时发送心跳信息感知整个集群健康状态
13.cluster工作原理
集群角色有master和slave,集群中的master之间分配槽,slave向指定的master同步数据,备份,其中一个master宕机,则slave会提升为新的主,当一对master和slave同时失效,会导致槽的不完整,集群失效,集群中的每个节点会定期发送心跳检测,最后通过投票过半,标记下线,需要人工处理
14.什么是客观下线,什么是主观下线
-
主观下线:表示sentinel自己对主节点宕机的判定
-
客观下线:表示多个sentinel在交流后一致判定主节点宕机
15.简述Redis
redis服务器程序是一个单进程模型,也就是说在一台服务器上可以开启多个redis进程(多实例),而redis的实际处理速度则完全依靠于主进程的执行速率,若在服务器上只运行一个redis进程,当多个客户端同时访问时,服务器处理能力会一定程度的下降,redis在提高并发处理能力会给cpu很大的处理压力
16.Redis端口号
6379
17.Redis集群key-value存放原理
以cluster集群为例,开始简述:当client向集群中任一节点发送与数据库有关命令时,接受命令的Redis节点会计算出命令属于哪个槽,并检测这个槽是否派给自己,若键在自己槽,则节点直接执行这个命令,若键所在槽无法指派给当前节点,则节点会向客户端返回一个moved错误,并指引客户端转向正确节点执行命令
18.Redis优化
- 设启动文件个数
- tcp连接数
- 巨大化页面缓存关闭
- 开启慢查询
19.Redis需要被屏蔽的命令
- flushall
- flushdb
- key *
20.简述Redis缓存穿透,缓存击穿,缓存雪崩,并提出解决方案
- 缓存穿透:客户端请求数据时,不断的恶意请求一个数据库的缓存中不存在的控制,由于空值默认不会被redis进行缓存,所以每次访问的时候,都会将请求发到后端的数据库,导致数据库压力提升
- 解决方法:通过修改程序,对空值进行缓存
- 缓存击穿:由于某个热点数据的缓存时间到期,导致缓存数据被redis清除,然后有大量的访问请求一起到达了后端的数据库中,从而加大了数据库的访问压力
- 解决方法:增加热点数据的缓存时间,尽量让其在访问高峰时,不会因为到期而删除数据,或者对数据不设置缓存时间,使其永不过期,后续手动删除
- 缓存雪崩:大量的热点数据同时到期或者redis服务直接停止,从而造成大量请求全部来到数据库,从而导致数据库压力倍增
- 解决方法:对全部数据的缓存时间进行随机配置,尽可能避免所有数据会同时到期,对redis进行主从同步及高可用配置,或者采用哨兵集群的方式进行部署,提高redis缓存系统的可用性
21.Redis pub sub
发布和订阅,是一种消息通知模式,发送者pub发送信息,订阅者sub接收信息,Redis数据端可订阅任意数量的频道
22.Redis主从复制作用
- 数据冗余
- 故障恢复
- 负载均衡
- 高可用
23.如何理解AOF RDB
- redis的所有数据都保存在内存中,然后不定期的通过异步方式保存到磁盘上,这称为半持久化模式 RDB
- 可以把每一次数据变化都写入到一个append only file(AOF)里面,这称为全持久化模式
24.持久化的作用
redis在内存中运行,内存特性是保存不了数据,持久化功能会将内存里的数据写入磁盘中,将数据保存在磁盘,下次开机时还可以使用
25. RDB和AOF的区别
- RDB是基于事件触发,恢复快,文件小,但是数据会丢失
- AOF是基于时间触发,文件大,恢复快,占用内存,耗CPU资源,一秒一备,数据不会丢失
在生产过程中,Redis数据丢失,先恢复RDB,再将RDB丢失数据,用AOF补齐
26.Redis读写数据快于MySQL的原因
Redis将数据写入内存,MySQL数据写入磁盘
Redis会周期性的把更新的数据写入磁盘或把修改操作写入追加的记录文件,并在此基础上实现master-slave同步
27.布隆过滤器
一种数据结构,对所有可能查询的参数以hash形式存储在控制层,先进行校验,不符合则丢弃,避免了对底层存储系统的压力
28.Redis单线程原因
不用考虑线程安全问题,会浪费CPU多核资源,可在一个服务器上做Redis多实例
29.Redis事务
- 一组命令的集合,一个事务中所有命令都会被序列化,在事务执行过程中,会按顺序执行
- 所有命令在事务中,并没有被直接执行,只有在发起执行命令后,才会被执行
- 在事务中输入exec,将一次性执行所有命令,事务也将不复存在
- 若事务中有命令错误,则所有命令不执行
- 若事务中有语法错误,则其他命令正常执行,该命令报错
30.Redis监控
使用乐观锁监控,单线程使用,多线程不可使用,若监控时,事务执行失败,则先解锁,在重新监控,获得当前值
我心存梦想,也想要人间值得,祝你也祝我,在这个人人都是孔乙己的世界,,披着脱不下的破洞长衫,都能拥有一份自己所热爱的工作,并在此上前途无限。
有疑问请评论加Q