6.27_JAVA_Redis(面试)

发布于:2025-06-29 ⋅ 阅读:(19) ⋅ 点赞:(0)

1、大厂(阿里巴巴)中也是一主一从加几个哨兵就足够了

2、Redis一般有哪几种类型数据?

        String:简单数据,比如阅读量+1

        Hash:对象的字段,方便部分修改。

        Lsit:一般消息队列、栈(最新的十条文章)。Redis的List是一个双端链表。

        Set集合:和JAVA的Set是一样的,元素不可重复。用途有两个:一个吃去重防止重复中奖。一个是找交集共同好友。

        ZSet:一般用于排序。比如各大排行榜、延迟任务的执行顺序。

3、双端链表:一个节点:数据+指向前面的指针+指向后面的指针

4、跳表:

         跳表是好几层的链表,用空间换时间从第一次开始从小到大查找如果在此层遇到了比目标数大的就跳到下一层,直到找到或者查找失败。链表的时间复杂度是On,跳表是O logn

5、Redis数据持久化方式:RDB、AOF

        RDB:定期把数据更新到磁盘。优点:因为数据文件比aop小,所以恢复速度快。

        AOF:不是更新数据,它记录的是指令。下次重启Redis时,把执行指令。恢复速度慢,但是没有数据丢失的风险。

一般重要文件用AOF,次要文件用RDB。

6、Redis集群方式:

        主从复制

        哨兵

        集群

7、主从同步:第一次是全量同步,之后都是增量同步

8、你们使用Redis是单点还是集群 ? 哪种集群 ?(说说你们生产环境redis部署情况?)

9、Redis最大用处:把热点数据存在redis,降低服务器压力。因为Redis读写速度快很多。Redis是存在服务端的,而不是客户端。

10、Redis部署:

                一般一主一从+哨兵就行了。但是Redis不能超过10G。如果内存不够,一般在对应服务分配不同的主从Redis就可以了,一般不用集群。

11、集群Redis存储方式:采用了哈希槽存储,

将数据分散到多个节点。

12、Redis集群·脑裂

        脑裂是因为主节点和从节点或者哨兵失去连接,哨兵没有及时感应到主节点存活,从而错误选举新主节点。这样就存在两个master了,像脑裂一样。旧主节点还在写入,因此新节点无法同步数据。但是当网络恢复之后,新主节点会成为真正的主节点,而旧主节点会降级成从节点。。然后再从新的主节点同步数据,但是由于新的主节点啥都没写入,从而造成大量数据丢失。

        脑裂解决方式:配置redis的两个参数。具体的忘记了。

13、什么地方用了redis?

        1、热点文章

        2、例如点赞收藏等实时数据。

14、缓存穿透:

        查询一个数据库不存在的数据,因此没法写入redis,导致每次查都要重新查增大服务器压力。

        解决方案:把返回值为空的数据仍然写入redis,但是保存时间较短。

15、缓存击穿(一个key):当某个key的缓存过期时,有大量该key的请求发送过来。

        解决:1、设置互斥锁(会降低性能)。只让一个请求去查询数据库。从而重新建立缓存。

                 2、设置为永久key。如618的时候。

16、redis·缓存·雪崩(多个key):许多key的缓存过期时间相同。导致同一时间,许多请求同时转发到DB(数据库)。从而导致服务器压力过大瘫痪。

        解决:将不同key的过期时间分散开。如何分散开?在每个key的过期时间上加上随机值(比如1-5分钟随机)。

17、布隆过滤器:用于快速判断一个元素是否存在于集合中。

        特点:1️⃣空间效率极高(时间效率也高)2️⃣可能误判该数字存在,但不可能误判不存在。数组越大误判率越低。3️⃣不能进行删除操作。

18、什么叫双写问题?一个数据同时需要写入DB和Redis。可能造成数据不一样。

        解决方案:同步方案:延迟删除缓存。

        异步方案:1、使用阿里巴巴的canal组件2、使用消息对联,建立中间过程。先把数据传给DB,再把数据从DB给MQ,再让缓存从MQ中获取。

19、

        

        


网站公告

今日签到

点亮在社区的每一天
去签到