JAVA面试常见问题之Redis篇

Redis为单线程

1、Redis 有哪些数据类型

  • String
  • 哈希
  • list
  • set
  • 有序set

2、Redis 内部结构

参考:https://www.cnblogs.com/chenpingzhao/archive/2017/06/10/6965164.html

3、Redis 使用场景

缓存,会话缓存,时效性,访问频率,计数器,社交列表,记录用户判定信息,交集、并集和差集,热门列表与排行榜,最新动态等。

4、Redis 持久化机制

  • 快照(snapshotting):将整个Redis内存中的所有的数据遍历一遍存储到一个扩展名为rdb的数据文件中。
  • AOF(Append onlyfile):在使用aof时,redis会将每一个收到的写命令都通过write函数追加到文件中,当redis重启时会通过重新执行文件中保存的写命令来在内存中重建整个数据库的内容。

更详细的说明参考:https://blog.csdn.net/u013905744/article/details/52787413

5、Redis 为什么是单线程

Redis操作的对象是内存中的数据结构。如果在多线程中操作,那就需要为这些对象加锁。最终来说,多线程性能有提高,但是每个线程的效率严重下降了。而且程序的逻辑严重复杂化。Redis的数据结构并不全是简单的Key-Value,还有列表,hash,map等等复杂的结构,这些结构有可能会进行很细粒度的操作,比如在很长的列表后面添加一个元素,在hash当中添加或者删除一个对象,等等。这些操作还可以合成MULTI/EXEC的组。这样一个操作中可能就需要加非常多的锁,导致的结果是同步开销大大增加。这还带来一个恶果就是吞吐量虽然增大,但是响应延迟可能会增加。
6、缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级

  • 缓存雪崩:由于原有缓存失效,新缓存未到期间所有原本应该访问缓存的请求都去查询数据库了,而对数据库CPU和内存造成巨大压力,严重的会造成数据库宕机。从而形成一系列连锁反应,造成整个系统崩溃。
  • 缓存穿透:是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的  bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。
  • 缓存预热:系统上线后,将相关的缓存数据直接加载到缓存系统。这样就可以避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题!用户直接查询事先被预热的缓存数据!
  • 缓存更新:除了redis自带的6种策略,可以根据业务需求自定义清除缓存。
  • 缓存降级:当访问量剧增、服务出现问题(如响应时间慢或不响应)或非核心服务影响到核心流程的性能时,仍然需要保证服务还是可用的,即使是有损服务。系统可以根据一些关键数据进行自动降级,也可以配置开关实现人工降级。

详解参考:https://blog.csdn.net/xlgen157387/article/details/79530877

7、使用缓存的合理性问题

  1. 热点数据,缓存才有价值。
  2. 频繁修改的数据,看情况考虑使用缓存。
  3. 数据的不一致
  4. 缓存更新机制
  5. 缓存可用性
  6. 缓存服务降级
  7. 缓存预热
  8. 缓存穿透

详细解析参考:https://blog.csdn.net/diyhzp/article/details/54892358

8、Redis常见的回收策略

  1. volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。
  2. volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰。
  3. volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。
  4. allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰。
  5. allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰。
  6. no-enviction(驱逐):禁止驱逐数据

原文地址:https://www.cnblogs.com/lu51211314/p/10287437.html

时间: 2024-10-05 04:43:52

JAVA面试常见问题之Redis篇的相关文章

《【面试突击】— Redis篇》-- Redis哨兵原理及持久化机制

能坚持别人不能坚持的,才能拥有别人未曾拥有的.关注编程大道公众号,让我们一同坚持心中所想,一起成长!! <[面试突击]— Redis篇>-- Redis哨兵原理及持久化机制 在这个系列里,我会整理一些面试题与大家分享,帮助年后和我一样想要在金三银四准备跳槽的同学.我们一起巩固.突击面试官常问的一些面试题,加油!! <[面试突击]— Redis篇>--Redis数据类型?适用于哪些场景? <[面试突击]— Redis篇>--Redis的线程模型了解吗?为啥单线程效率还这么

Java面试知识点之虚拟机篇(一)

前言:Java虚拟机的重要性不言而喻,不管是在实际工作中,还是面试中. 1.JVM架构 要点: 主要了解Java虚拟机运行时数据区:程序计数器.Java虚拟机栈.本地方法栈.Java堆和方法区. 参考: https://blog.csdn.net/seu_calvin/article/details/51404589 2.新生代.老年代 在JVM中,堆是被JVM所管理的最大一块内存空间,主要用于存放各种类的实例对象. 堆一般分为:新生代.老年代. 新生代:主要是用来存放新生的对象.一般占据堆的1

Java面试常见问题

第一:GC是什么? 为什么要有GC?  答:GC 即垃圾回收(Gabage Collection) 在C++ .C中内存的管理是最为繁琐的事情不回收内存和错误的回收内存造成系统崩溃和内存泄露 GC会自动监测对象的作用域来判断这个对象是否超过作用域如果超过则自动的回收内存 java中没有提供显示的对已经分配内存进行回收的方法 第二:垃圾回收的优点和原理.并考虑2种回收机制.  答:GC对分配的对象进行自动的监测记录对象的作用域是否可以达到 在java中对象就不存在‘作用域’ 而是引用的这个对象的变

Java面试常见问题汇总

1 String,StringBuffer与StringBuilder的区别?? String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 S

Java面试知识点之数据库篇(一)

前言:数据库的相关知识,在面试中也经常出现,笔者认为非常有必要对此类知识进行相关总结. 1.索引 索引是对数据库表中一列或多列的值进行排序的结构,是帮助数据库高效获取数据的数据结构. 通俗理解:索引就是加快检索表中数据的方法.数据库的索引类似于书籍的索引.在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息:在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库,从而提高查询速度. 索引的优点: 1)通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.2)可

Java面试常见问题总结

一.创建对象的4中方法: 1.new 关键字直接创建 example:Student s=new Student(): 2.class的反射调用(使用class的newInstanse方法可以调用无参构造器创建对象) Example:class.forName(); 3.使用clone()来创建 Example: try{ Student stu3 = (Student) stu1.clone(); System.out.println(stu3); } catch (CloneNotSuppo

Java面试常见问题集锦

一.Java初级 说出八种基本数据类型和三种引用数据类型 简述自动装箱和自动拆箱 ==和equals的区别 简介重载和重写,并说出它们的应用场景 面向对象的三大特征 单例模式的两种形式 有几种权限修饰符,并分别说出它们的作用范围 被static修饰的成员与普通成员有什么区别 抽象方法与接口的区别,抽象类必须要有抽象方法吗 抽象类能被final修饰吗 被final修饰的成员有什么特点 String.StringBuild.StringBuffer有什么区别 数组中可以存放什么类型的数据,知道几种给

java 面试 -- 4

Java面试知识点总结 本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺(阅读本文需要有一定的Java基础:若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大).本文的问题列表来自于http://www.nowcoder.com/discuss/3043,在此感谢原作者的无私分享:) 1. Java中的原始数据类型都有哪些,它们的大小及对应

Java面试-吊打面试官系列 Redis基础

你知道的越多,你不知道的越多 点赞再看,养成习惯 前言 Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行360°的刁难.作为一个在互联网公司面一次拿一次offer的面霸(请允许我使用一下夸张的修辞手法),打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚,在一个寂寞难耐的夜晚,我痛定思痛,决定开始写吊打面试官系列,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,吊打一同面试的同僚