Redis简介&高频面试点

Redis是我们最常用的中间件,也是高频面试点,接下来为大家简单介绍一下Redis的一些基本概念和高频面试点。

1.redis的基础知识:

redis默认有16个数据库,可以在redis.conf配置文件中更改datebases 16

它默认使用的是第0个数据库,可以使用select命令切换。

2. redis的基本命令:

dbsize:查看数据库大小

keys*: 查看数据库中所有的key

flushdb:清空当前数据库

flushall:清空所有数据库

exists key: 判断key是否存在

expire key time: 设置过期时间

3.redis是单线程还是多线程,它为什么快呢?

redis是单线程的,在redis1.6的版本中新添加了多线程的功能来提高了I/O读写性能。(多路复用NIO模型)

官方表示:Redis是基于内存操作,cpu不是Redis的性能瓶颈,Redis的性能瓶颈是根据机器的内存和网络带宽来决定的。那么上面提到它是单线程的,为什么它还是这么快呢?

这里有几个误区:1.高性能的服务器一定是多线程的 2.多线程的效率一定比单线程效率高

那么因为如果使用多线程,那么就会涉及到线程的上下文切换,是会消耗性能的,而单线程不涉及到线程的切换,而且它是基于内存的,并且使用多路复用NIO来提高I/O的读写性能,还有专门的结构设计:key:value结构,所以Redis是非常快的!!!

4.Redis的五大基本类型:String list set zset hash.

String: 存储非String类型时,需要序列化

list:可用于栈,队列,阻塞队列, 实现队列的方法: lpush, rpop(先进先出)

set: 无序且不可重复

zset: 有序且不可重复, 可以用来做排行榜

hash: 一般用来存储对象

5.Redis是存在内存中的,我们如何保证数据不丢失呢?

1.AOF,默认是不开启的,持久化的是我们操作redis的命令,它不安全,并且恢复数据比较慢,刚开始时占用空间比RDB大(稍后会介绍RDB)。但是随着持久化的数据量越多,RDB的占用空间会超过AOF.

AOF配置: AOF有三种模式,第一种:appendfsync always, 每次修改都会同步,消耗性能。

第二种:appendfsync everysec, 每秒钟同步一次, 有可能会丢失这1S中的数据。

第三种:appendfsync no, 操作系统自己同步数据,性能是最高的。

2.RDB,数据快照的方式持久化数据,在规定的时间内,执行了多少次操作,就会持久化到文件,RDB数据是进行加密的,同步数据性能没有AOF高,在刚开始持久化的时候占用空间比AOF小,但是随着持久化数据的数量越来越多,它的体积比AOF大,但是RDB恢复数据的速度比AOF快。它的缺点就是,隔一定的时间才会同步数据,所以有可能会造成数据丢失。

通常情况下,我们会将RDB和AOF结合起来使用!如果你的Redis只做缓存的话,那么是不需要对它进行持久化的。

6. Redis的六大淘汰策略:

1.volatile-lru: 已设置过期时间的挑选最少使用的淘汰

2.volatile-ttl: 已设置过期时间的快过期的淘汰

3.volatile-random:已设置过期时间的随即淘汰

4.allkeys-lru: 从所有数据中挑选最少使用的淘汰

5.allkeys-random:从所有数据集中随即淘汰

6.no-enviction: 不使用淘汰策略

7.如果用Redis做缓存,那么会有缓存击穿,缓存穿透,缓存雪崩这些场景,我们的应对策略又是什么呢?

缓存穿透:就是Redis中没有,数据库中有,此时高并发进来操作数据库,我们的数据库可能会崩掉,此时我们应该加个互斥锁,单线程操作数据库,这样就可以防止高并发让数据库崩掉

缓存穿透:Redis中没有,数据库中也没有,此时高并发进来也会请求数据库,那么我们就应该用到布隆过滤器校验请求的参数,如果没有直接返回。

缓存雪崩:Redis中大量key在同一时间失效,导致高并发请求数据库。这种场景我们就要对key设置不同的过期时间,来防止它在同一时间大量key失效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值