1、Redis使用场景
业务系统上的数据库访问中,读多写少时(若读较少,则不需要使用Redis作为缓存),在高并发系统中,使用NoSQL技术,将热点数据放入内存中,以减轻数据库的压力——提升数据访问速度。
Redis的数据缓存能力解决了访问性能问题和并发问题。 除此之外,Redis实现了分布式锁。
2、为什么实用Redis?Redis的特点?
Redis基于内存,常用作缓存,存储形式是key-value对。
java有Map,不可以吗?
不可以。map实现的是本地缓存,声明周期随jvm的结束而结束;并且在多实例的情况下,每个jvm都需要各自保存一份缓存,缓存不具有一致性。redis实现的是分布式缓存,多个实例可以共享一份缓存数据。Redis可以拿几十个G作缓存。Redis可以持久化缓存数据,重启后可以恢复使用。
Redis可以持久化吗?
可以。可以将缓存数据保存在硬盘里,redis重启后可以重新恢复。
3、为什么用缓存?
数据库的读写需要经过磁盘,速度较慢。有了缓存,直接访问存储在内存中的数据,提高了访问速度,增加了并发性。
4、Redis的对象?
Redis的key一定是字符串。value可以是String、list有序列表、set无序集合、hash、sortset(有序集合)等、
5、Redis默认几个数据库?
16个。 0 - 15.
6、key的过期时间
7、Redis是单线程的,为什么会那么快?
纯内存操作、核心是基于非阻塞的IO多路复用机制、单线程避免了多线程的上下文频繁切换
8、Redis主从复制
若请求过多,一台redis服务器处理不来,则需要主从复制。
好处:从服务器负责读,主服务器负责写,读写分离;高可用,一台从挂了,其他服务器仍可接收读,不影响服务;处理更多的并发
特点;主、从服务器的数据是一致的。
复制功能的具体实现?
分为两步:1、同步。将从服务器的数据库状态更新为主服务器的数据库状态。
2、命令传播。主服务器写了数据,导致主从服务器数据不一致,通过命令传播,将主服务器执行的写命令传给从,让从业也执行。
如果主服务器挂了?
Redis提供了哨兵机制,将从服务器升级为主服务器。
假如旧的服务器又连上?
从新连上的变为从服务器。
9、哨兵机制
用于实现Redis的高可用性。
10、什么是缓存雪崩?
缓存数据在某段时间内同时失效,导致请求直接访问了数据库。
如何解决缓存雪崩?
在缓存的时候给过期时间加上一个随机值,大幅减少缓存在同一时间失效的可能性。
若真的发生了,怎么办?
设置本地缓存 + 限流,保证服务能正常工作。
发生之后,怎么办?
redis重新后,自动从磁盘上加载数据,快速恢复缓存数据。
11、什么是缓存穿透?
请求的数据在缓存中大量不命中,导致请求访问了数据库。
如何解决?
过滤掉不合法的请求参数;当从数据库查询不到时候,将一空对象设置到缓存,并设置一个较短的过期时间;
12、缓存与数据库双写一致