一、redis持久化
1.1、RDB(redis DataBase):将redis某一时刻的数据持久化到磁盘中,是一种快照式的持久化方法。
1.2、redis在进行持久化过程中,会将数据写入到一个临时文件中,持久化结束后,再将临时文件替代上次持久化好的文件。
1.3、对于RDB方式,redis会单独创建一个fork子进程来进行持久化,而主进程不会进行IO操作,保证redis的高性能。
1.4、如果需要大规模数据恢复,在不在一数据完整性的情况下,RDB比AOF高效。
1.5、缺点,持久化过程中redis宕机,会导致上一次到这一次之间的数据丢失。
2.1、AOF(append of file),只允许追加,不允许改写的文件。
2.2、AOF是将执行过的指令记录下来,在数据恢复时将指令从前到后在执行一遍。
2.3、备份文件大,数据恢复较慢。
二、雪崩、缓存击穿、缓存穿透
1.1、缓存雪崩:大量请求无法命中redis中的数据,只能直接访问数据库。
1.2、出现原因:大量缓存数据同时过期导致请求无法命中。redis宕机,导致请求直接访问数据库。
1.3、处理方式:针对大批量过期时间的,在原始的过期时间上加一个随机过期时间,避免数据在同一时间内过期。针对redis宕机,可以搭建redis主从服务器,并配置哨兵服务,主节点宕机后,可以切换到从节点。
2.1、缓存击穿:缓存击穿与缓存雪崩类似,缓存雪崩时大批量数据过期,缓存击穿是热点数据过期,所有针对热点数据的请求,都需要到数据库处理。
2.2、处理方式:
3.1、缓存穿透:数据在redis和数据库中都没有,请求在redis请求无果后会请求数据库,redis相当于没作用。
3.2、处理方式:设置空值或缺省值,存入redis,注意需要清楚或更redis里数据,当新数据产生时。
三、数据类型
string:字符串
hash:哈希表
list:列表
set:数组
zset:有序数组
四、分布式锁
分布式锁具备条件:
互斥性:同一时刻,只有一个客户端持有锁。
锁超时释放:持有锁超时时可以释放,防止死锁。
可重入性:一个线程获得锁后,可以请求加锁,
高可用、高性能:加锁和解锁开销要尽可能低,同时保证高可用。
安全性:锁只能被持有该锁的线程释放。
容错性:在持有锁的服务崩坏后,锁仍可以释放,避免死锁。