Redis 5.0.8+常见面试题(单线程还是多线程、先更新缓存还是数据库、雪崩穿透击穿解决办法...)

本文深入探讨Redis的单线程模型设计原因,解析其默认数据库、数据类型及启动流程。同时,涵盖Redis的原子性、乐观锁/悲观锁概念,讨论持久化机制的优缺点。针对缓存问题,文章阐述了缓存穿透、击穿、雪崩现象及其解决方案,并提出Redis在高并发场景下的处理策略和常见性能优化建议。最后,讨论了Redis的键值大小限制、过期策略及内存淘汰机制,以及更新缓存与数据库的策略选择。
摘要由CSDN通过智能技术生成

Redis 6.0 保姆级教程(含微服务案例与完整面试题):https://www.yuque.com/yuxuandmbjz/redis

  1. Redis是单线程还是多线程 ?为什么这么设计 ?
	Redis一开始是纯单线程模型,在4.0之后引入了多线程,具体实现是通过多线程方式在后台删除对象、通过 Redis 模块实现的阻塞命令等。在6.0之后又在网络 IO 处理方面上也引入了多线程。
	一开始使用单线程的原因是 Redis 是基于内存而且使用多路复用技术,单线程速度很快,又保证了多线程的特点。因为没有必要使用多线程。后面引入多线程的原因是读写网络的read/write系统调用在Redis执行期间占用了大部分CPU时间,如果把网络读写做成多线程的方式对性能会有很大提升,所以变成了多线程。
	之前用单线程是因为基于内存速度快,而且多路复用有多路复用的作用,现在引入多线程是出于性能上的考虑,对于一些大键值对的删除操作,通过多线程非阻塞地释放内存空间也能减少对 Redis 主线程阻塞的时间,提高执行的效率。
	单线程指的是工作线程 多线程说的是IO。
  1. 默认是数据库是什么 ? 有几个数据库 ?有什么数据类型 ?怎么启动 ?
默认是0号数据库,一共有16个数据库。

数据类型包括:
    String
    List 
    Set  (查看双方共同的信息,比如共同关注的人)
    Hash (储存经常变动的用户信息)
    Zset (数据排序)
    
加分的数据类型:
	Geospatial    (附近的人,二者的距离)
	Hyperloglog   (统计排除重复的总数)
	Bitmap        (储存0/1,打卡统计)
	
启动:
	redis-server redis.conf
进入客户端:
	redis-cli -p 端口(默认6379)
  1. 介绍一下Redis( 顺带提一下Redis有没有原子性 )?
	Redis的数据类型包括StringListSetHashZsetGeospatialHyperloglogBitmap
	Redis单条命令保证原子性,事务不保证原子性,Redis事务的本质是一组命令的集合。没有隔离级别的概念,所有的命令在事务中并没有被直接执行,只有发起执行命令(Exec)的时候才会执行。
	开启事务:multi
	执行事务:exec
	在事务中编译时异常(命令错误),事务报错无法执行;在事务中语句异常
  1. Redis有没有乐观锁/悲观锁 ?怎么解决乐观锁的冲突 ?
	乐观锁:很乐观,认为什么时候都不会出问题,所以不会上锁! 更新数据的时候去判断一下,在此期间是否有人修改过这个数据,更新的时候比较 version来判断。
	悲观锁:很悲观,认为什么时候都会出问题,无论做什么都会加锁,性能低下。
	在值上加上watch开启乐观锁,先unwatch然后重新watch解决锁
  1. 说一下Redis持久化 ,优缺点分别是什么 ?
	Redis持久化包括RDB和AOF,RDB是 Redis database的缩写,它会在指定的时间间隔内将内存中的数据集快照写入磁盘,它恢复时是将快照文件直接读到内存里。如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,选择RDB。
 	RDB的触发机制是 满足配置文件的save的规则、执行 flushall、flushdb 命令、退出redis。
 优点:
 	1、适合大规模的数据恢复! 
	2、对数据的完整性要不高!
 缺点:
 	1、需要一定的时间间隔进程操作!如果redis意外宕机了,这个最后一次修改数据就没有的了!
 	2、fork进程的时候,会占用一定的内容空间。
 	3.如果没有满足save保存规则,数据就不会被保存,该情况下会造成数据丢失问题。

 	AOF是以日志的形式来记录每个写操作,将Redis执行过的所有指令记录下来(读操作不记录),只许追加文件
但不可以
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值