首页 > 数据库 >JAVA面试题----Redis

JAVA面试题----Redis

时间:2023-07-16 09:34:55浏览次数:36  
标签:面试题 缓存 redis 数据库 Redis ---- key 数据

Redis

  1. redis快的原因:完全基于内存操作,请求都在内存中所以快;它是单线程,省去了线程切换的时间和锁竞争的开销。采用io多路复用,多路指多个网络,对单个线程进行复用,避免了大量无用的操作。
  2. 为什么使用redis:速度快,支持丰富的数据类型,redis集群不支持事务,内部单节点支持事务,操作都是原子性的,还可以用来缓存,按key设置过期时间,过期后自动删除。
  3. Redis常用的数据结构:String:动态变长字符串,计数功能

    List:前后插入和删除都很快,随即定位慢,用来秒杀场景。

    Hash:相当于hashmap,用于保存结构体信息。

    Set:相当于HashSet,无序集合,不能出现重复数据,用于去重场景。

    Zset:用于热门排序场景。

    Redis过期删除策略:惰性删除:只会在取出key的时候才对数据进行过期检 查,这样对cpu也是很好的。

    定期删除:每隔一段时间抽取一批key执行删除过期的 key操作;redis底层会限制删除操作的时长 和频率,减少对cpu的影响。redis的内存淘汰策略:1,从已设置过期时间的数除。 5挑选移除最近最少使用的key 。6.禁止驱逐数据,内存满了之后再添加数据就会报错。

 

Redis持久化机制RDB和AOF的区别:

RDB:其实就是把数据以快照的形式保据集中挑选将要过期的数据淘汰。2从过期数据集中任意挑选数据进行淘汰。 3.从数据集里面挑选最近最少使用的数据淘汰。4从数据集里任意挑选数据删存到磁盘中。它很适合用于灾难恢复,因为它只有一个文件,并且内容十分紧凑。AOF:通过写操作日志的方式,记录数据。

  RDB:占用存储空间小,存储速度慢,恢复速度快,会丢数据,消耗的资源比较高。

  AOF:占用存储空间大,存储速度快,根据策略决定数据的丢失,消耗的资源比较小。

如何选择RDB与AOF:1 数据不敏感,并且可以从其他部分重新生成补回,那就不适用持久化。2 数据比较重要,不想从其他地方获取,可以承担数分钟的数据丢失,可以使用去RDB。3 使用做内存数据库,RDB与AOF都开启,rdb进行数据备份,aof保证数据不丢失。

  1. 如何保证redis与DB数据一致:1 使用同步双写,更新完数据库就立即同步更新redis。2 使用MQ异步,更新完DB后生产消息到MQ,mq消费者更新数据到redis。
  2. Redis的缓存预热:系统上线后,提前将缓存数据加载到缓存系统。如果不进行预热,系统上线初期,对高并发的流量,都会访问到数据库,会造成数据库的压力。
  3. 什么是缓存降级:在缓存失效或缓存服务器挂掉,不去访问数据库,而是访问默认数据或服务器内存数据。
  4. redis缓存击穿,缓存穿透,雪崩?

穿透:缓存和数据库都没有数据,一直访问使数据库崩掉。解决:加过滤器

击穿:redis没有数据但数据库有数据,大量访问同时请求,数据会崩掉。解决:加分布式锁,一条数据访问数据库。

雪崩:大面积数据失效,或者服务器宕机,请求穿过缓存来访问数据库。解决:缓存备份,设置随机缓存中数据过期时间。

  1. 分布式锁:分布式系统中的锁,解决分布式系统中控制共享资源的访问,于单体应用比,竞争资源的最小粒度从线程变成进程。
  2. Redis的实现分布式锁特点:1在分布式环境下,一个方法只能在同一时间被一个线程执行。2 高可用,高性能获取锁,释放锁。3具备锁失效机制,自动解锁,防止死锁。4具备非阻塞特性,没有获取到锁直接返回获取锁失败。
  3. Redis锁的实现:使用setnx进行加锁,指令返回1,说明加锁成功,当得到锁的线程执行完任务,使用del命令释放锁,要给锁设置超时时间,防止获取到锁的线程在执行过程中挂掉,来不及释放锁。
  4. 延迟双删:在更新数据库时,需要同步redis中缓存的数据。一:先执行请求1update再执行缓存清除,弊端是在更新数据时,请求2读的是旧数据。

二:请求1清除缓存,还没有进行update,请求2进行查询到数据库的旧数据再写入redis。

双删:先进行缓存清除,再执行update,最后延迟N秒,再进行缓存清除(两次缓存删除)。

19.遍历key:1.遍历所有的key,使用keys pattern,一次返回符合的全部数据 。 2.渐进式遍历:使用scan命令,会返回少量数据。

标签:面试题,缓存,redis,数据库,Redis,----,key,数据
From: https://www.cnblogs.com/ybex/p/17557432.html

相关文章

  • 纵横循环序列数-续
    此问题为纵横循环序列数的延续,在第一行输入任意数字,如存在1-40之间的数,则公式返回的结果从中排除。函数公式解决:=SMALL(IF(ISNA(MATCH(SEQUENCE(40),$1:$1,)),SEQUENCE(40),""),MOD(COLUMN(A1)+ROW(A1)-2,41-COUNT(UNIQUE(MATCH($1:$1,SEQUENCE(40)),1)))+1)考虑到公式下......
  • JAVA----线程池
    线程池线程的状态:1新建状态(没启动)2可运行状态(可能在运行,也可能等待cpu时间片)3阻塞(等待获取排他锁,或者等待其他线程唤醒,不醒无法获取时间片)4限期等待(一段时间后被系统自动唤醒)5死亡:可能任务执行结束或产生异常结束。线程池的状态:RUNNING:运行状态,可以接受新任务......
  • SecureCRT 9.4发布啦!看看有哪些新功能吧!
    导读SecureCRT非常适合安全连接到运行Windows、UNIX和VMS的远程系统。SecureCRT支持通过Xmodem、Zmodem、Ymodem、Kermit和SFTP进行安全文件传输。背景SecureCRT是一款高度可定制的终端仿真器,支持Secure Shell (SSH)以及Telnet、Telnet/TLS和串行协议......
  • JAVA面试题----MYSQL
     MYSQL。          mysql使用的引擎是InnoDB,它有四大特性:1插入缓冲2二次写3自适应hash索引(ahi),就不用走B+树了;4预读。使用InnoDB因为它是事务安全的存储引擎,它具备提交,回滚以及崩溃恢复的功能以及保护用户数据。MYSQL的索引分类:1主键索引2,唯一索引3.复合索......
  • 《架构整洁之道》学习笔记 Part 2 编程范式
    计算机编程发展至今,一共只有三个编程范式:结构化编程面向对象编程函数式编程编程范式和软件架构的关系结构化编程是各个模块的算法实现基础多态(面向对象编程)是跨越架构边界的手段函数式编程是规范和限制数据存放位置与访问权限的手段软件架构的三大关注重点:功能性、组......
  • 李书福-未来世界发展的六个洞见
    洞见一:人类和平与世界稳定面临巨大挑战。世界好像一座斜拉桥,各种力量相互作用、相互牵制、相互推拉、相互对立、相互组合,形成了矛盾的整体。大家都在相互寻找战略平衡,共同维护彼此关切,尽力保证世界和平稳定。这种矛盾的平衡构成了人类社会走向更加美好明天的基础,我称之为“斜拉......
  • 装饰器
    闭包函数1.闭:定义在函数内部的函数2.包:内部函数使用了外层函数名称中的名字defouter():#外部函数x=999definner():#内部函数:使用的是外层函数的返回值print('fromouter>>>inner',x)returninner(外层函数的返回值)x=666res=outer()#......
  • 【学习笔记】山东省队第三轮集训
    Day2A.sequence题目描述:题目分析:考虑一个很简单的\(dp\)就是设\(f[i]\)表示考虑了前\(i\)个位置最多可以划分为多少个序列。转移就是可以直接从\(f[i-1]\)继承,或者从\(j\)满足\(\sum_{k=j+1}^{i}c_i=0\),也就是前缀和相等。可以发现的是对于从\(j\)转移这种......
  • 7.9-7.15博客
    本周(7.9-7.15)主要返家并在家进行休息。下周准备开始学习大数据的相关知识。虽然我觉得下周的计划可能完不成,但是计划总是要有的。周日,室友陆续回家,看了一下整个学期的学习总结。写了博客。周一,在宿舍玩了一天。周二,11号准备回家。周三,报考了驾考,再不考好像没时间了。周四,进行......
  • Nginx arm编译安装
    Nginxarm编译安装背景计划编译一套产品.能够比较方便快捷的进行nginx的交付.主要思想是源码编译不仅能够在arm上面运行也可以在x86上面编译考虑性能还有一些扩展性.高效处理.主要涉及的点有:openssl最新的1.1.1的的版本zlib进行压缩,解压缩的处理.pcre正......