Redis简介

1. 什么是redis?

答:是C语言编写的,支持网络(即需要端口支持),基于内存也可以持久化的key-value数据库。本质是服务器-客户端软件程序。

2. redis和hashmap的区别?

答:redis独立部署,能存放的value类型也比hashmap多。而一个定义好的hashmap只能支持一种value类型。

3. redis支持什么数据类型?

答:string,int,list(元素可重复,可以实现list和stack的功能,可用于关注列表/粉丝列表等场景),set(元素不重复,可以取交集等,可用于共同好友/共同关注等场景),sorted set(带有排序功能,可用于排行榜等场景),hash(约等于hashmap),geo(可用于地理场景的位置),stream(类似mq的应用,可以支持发布订阅)。

4. redis处于保护模式应该如何解决?

答:默认只允许本地的服务器进行访问,修改bind=0.0.0.0(允许公网所有用户访问),但是这样会有安全问题。

5. redis的性能和什么有关?

答:和服务器的CPU性能以及是否使用了pipeline进行批量操作。可以使用官方推荐的方式进行测试。

6. 如何用redis实现订单支付的功能?

答:订单支付涉及到超时的问题,可以在redis中创建一个临时订单,有15分钟的超时时间,如果超时之后未支付redis会发送expired的事件,如果用户在规定时间内支付了,则删除redis中该订单的id,当该订单id在redis中被删除的时候,可以监听redis系统事件del,从而修改数据库的订单。需要通过config进行文件配置。此时请注意redis是可以存放多个不同的数据库,可以通过下标来筛选。

7. redis的stream框架原理是怎么样的?

答:首先如果只是普通的发布定义模式,消费者只能收到启动之后的消息。但是stream则允许存储一些消息,使得消费者可以从offset去读取自己想要的消息,可以通过XDEL来删除处理了的消息。还可以通过consumer group来增强处理消息的能力,此时需要XACK来确认已经处理了消息,如果没有确认,则该消息会被扔回去(pending),需要XCLAIM来重新消费,具体概念和kafka接近。因为可能没有消息,主动读取的时候可能会造成消费者阻塞,阻塞到设定的时间,则返回空。


流程
8. redis的持久化方式有什么?

答:有两种,一种是将当前内存数据做二进制快照,另一种是将执行过的命令存下来回放,两种持久化方式都有策略,根据写入频率来批量操作。


持久化

RDB的优缺点

AOF的优缺点
9. redis如何进行内存管理?

答:内存达到某个阈值的时候,需要采取某个内存策略。内存在某些情况下会压缩存储的信息,因为压缩需要用CPU,所以只有当数量低于某个程度的时候才会进行压缩。大小超出压缩范围,溢出后redis自动将其转换为正常大小。

10. redis如何处理过期数据?
过期数据

在恢复数据的时候过期策略
11. redis的回收策略是什么?
回收策略

LRU算法
LFU算法
12. redis的主从复制策略是什么?
主从复制

配置方式
13. redis的主从复制流程是什么?

答:全量是指将快照发送过来,增量是指将命令发送过来。如果从服务器之前跟的是同一个主服务器,则增量发送命令,如果换了主服务器,则需要全量发送快照。主从复制可以用于数据安全的方面,只允许读从服务器,而不允许修改;同时可以提高服务器的吞吐量;最后还可以通过把持久化功能挪到从服务器,将持久化对主服务器的影响减少。
当主服务器挂了之后,不要设置自动重启,因为主服务器的数据都丢失了,从服务器也会丢失。此时要么需要将从服务器备份的快照主动挪到主服务器,要么设置从服务器为主服务器,将主服务器变为从服务器。


流程

流程2

流程3
注意事项

注意事项2
14. redis上如何监控每个服务器的运行命令?

答:使用monitor就可以监控主从,例如读写分离是否正确。

15. redis的哨兵机制是什么样的?

答:为了实现高可用,能够自动切换主从服务器,redis添加了哨兵机制,类似于zookeeper,一群哨兵去ping主从服务器,当一群(而不仅仅是一个)哨兵都同意主服务器出现问题(因为有可能是哨兵自己的网络问题,而不是主服务器出现问题),则开始切换主从服务器。客户端只有当不知道谁是主服务器的时候才会和哨兵联系,如果和主服务器正常交流的时候是不会经过哨兵的。哨兵通过主服务器,可以知道主服务器上面的配置,就能知道从服务器的地址。


服务器架构

官方说明

服务发现流程

故障转移流程
16. Redis哨兵流程中问题有哪些?
  • 哨兵如何知道redis主从信息


    1
  • 什么是master主观下线(sdown)


    2
  • 什么是master客观下线(odown)


    3
  • 哨兵之间如何通信?


    4
  • 哪个哨兵负责故障转移?
    请查看文档

    5

  • slave的选举机制?


    5
  • 最终主从切换的流程是什么?


    6
17. 哨兵应该如何配置?

答:不推荐只部署两个哨兵,因为出现问题的时候无法判断客观下线。所以官方推荐第二个图。但是即使是第二个图,也是会出现问题的。当出现网络分区(即网络不能连接的时候),例如master和两个从服务器失去联系,此时master还能正常运作,两个从服务器发现不能连接主服务器,此时两个从服务器就会开始选举,导致有两个master在运行。

所谓的强一致和非强一致(即最终一致),强一致代表时时刻刻都一样,非强一致代表在网络分区结束之后,数据会进行合并,在最后选择版本号较高的数据,使得所有主从服务器数据一致。


配置
18. 为什么需要分片存储?

答:分配存储先用哈希获取分片所在的位置,然后进行存储,redis会把服务器分成16383个槽,将不同的槽分配到不同的服务器,槽只是用于映射,不用存存储数据。客户端只需要连接到其中一个服务器即可,第一次如果连接错了,服务器会返回正确的分片服务器地址给客户端让客户端重新连接。也可以让客户端存储哈希分片的算法,让客户端自己计算和缓存。假如增加了服务器,服务器返回位置错误,则客户端需要更新自己的缓存信息,获取新的服务器算法。
集群模式下,读写分离默认是不行的,需要手动设置。集群模式推荐集群机器大小不超过1000个,因为机器之间会有通讯和交流,需要消耗带宽。
读写分离的时候,会出现主从数据不一致的状况。


分片存储

官方文档
集群方案

集群关注的问题

集群关注的问题

集群关注的问题

集群关注的问题
20. redis集群模式是否可以替代哨兵?

答:是。因为实现了自动高可用。

21. 为什么nosql不能完全代替sql?

答:因为在网络分区的时间内可能会数据不一致,丢失写操作。提高了性能,但是不能维持一致性。

22. redis集群开源方案还有什么?

答:除了官方的集群方案,还可以豌豆荚开源的codis,twitter开发的twemproxy,但是两者都处于不活跃的状态。

23. redis如何做监控?
  • 用monitor监控,只是用来debug,因为开启的话会降低性能。
  • 可以用info命令来查看信息。
  • redis live可以用来图形化监控,建议和redis服务器分开部署,因为redis live需要存储监控的数据,一般是存储在redis上面,所以在redis live上面需要额外多开一个redis服务。


    info
24. redis集群的重定向是根据什么来执行的?

答:moved重定向和ask重定向对比, 两者都是客户端单重定向

  • moved:槽已经确定转移
  • ask:槽还在迁移中
24. HyperLogLogs是什么?

答:请看

25. redis常见的五种基本数据类型是什么?
  • String
  • List
  • Hash
  • set
  • zset
26. 如何查看redis是否在正常运行?

答:用ping这个命令即可,不是CMD里面的ping,是redis cli自带的ping

27. AOF是Redis的一种持久化方式,并且可以人为的改动持久化之后的数据
28. 考虑采用两级缓存架构的原因可能有哪些?
  • 减少网络消耗
  • 提高数据访问速度
29. redis的集群数量最多为多少个?

答:16384个。

30. redis中stream和pub/sub的区别是什么?
  • 与redis的pub/sub不同,pub/sub多个客户端是收到相同的数据,而stream的多个客户端是竞争关系,每个客户端收到的数据是不相同的

  • pub/sub中一旦触发数据获取,不会记录下上一次拿的位置,意味着客户端无法重复去拿以前的数据,而blpop方式一旦pop,数据就会永久的删除,也无法重复去拿以前的数据。而Stream会永久的存放数据,并且客户端会保留上一次拿的id,甚至通过修改id可以拿回以前的数据。和kafka的机制类似。

  • Stream提供了消费者组(kafka也有),不同组接收到的数据完全一样(前提是条件一样),但是组内的消费者则是竞争关系(还是和kafka一样)。

31. redis的什么机制或者数据结构可以在一定场景代替mq?
  • stream
  • pub/sub
  • List
32. ) RedisCluster集群扩容增加节点之后,Redis不会自动分配slot槽给新节点。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 最近,我从Redis入手,对分布式缓存进行了学习探究。为了记录我的学习成果,我将会写一系列博客来介绍Redi...
    Javar阅读 1,841评论 0 1
  • 一、Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value...
    神奇作手阅读 3,379评论 0 1
  • redis简介 redis(REmote DIctionary Server)是一个由Salvatore Sanf...
    不拘绳墨阅读 1,625评论 0 0
  • 一、Redis安装 1:去官网下载最新的版本:http://redis.io/download 2:解压后,进入解...
    fisherhuang阅读 2,498评论 0 1
  • “嘟——”在终场哨响的那一刻,首钢球迷们落下了遗憾的眼泪,马布里的职业生涯也终止了。我们仅一分之差输...
    Helen_e8ea阅读 4,554评论 2 3

友情链接更多精彩内容