1. 什么是redis持久化?Redis有哪几种持久化方式?优缺点是什么?
持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
Redis提供了两种持久化方式RDB(默认)和AOF
RDB:
rdb是Redis DataBaes缩写
功能核心函数是rdbSave(生成RDB文件)和rdbLoad(从文件加载内存)两个函数
AOF
服务器执行定时任务或者函数时调用flushAppenOnlyFile函数都会被调用,这个函数执行以下两个aof写入保存:
WRITE:根据条件,将aof_buf中的缓存写入到AOF文件
SAVE:根据条件,调用fsync或fdatasync函数,将AOF文件保存到磁盘中。
内容是redis通讯协议(RESP)格式的命令文本存储
比较:
1、aof文件比rdb更新频率高,优先使用aof还原数据。
2、aof比rdb更安全也更大
3、rdb性能比aof好
4、如果两个都配了优先加载AOF
2. 什么是缓存穿透?如何避免?什么是缓存雪崩?如何避免?
缓存穿透
一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统(DB)查找,一些恶意的请求会故意 查询不存在的key,请求量很大,就会对后端系统造成很大的压力,这就叫缓存穿透
如何避免?
1.对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存
2.对一定不存在的key进行过滤,可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤
缓存雪崩
当缓存服务器重启或者大量缓存集中在某一个时间段失效。这样在失效的时候,会给后端系统带来很大压力,导致系统崩溃
如何避免?
1.在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量,比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
2.做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期。
3.不同的key,设置不同的过期时间,让缓存失效的时间尽量均匀。
3. Redis和Memcached的区别和比较
1.Redis不仅支持简单的k/v类型的数据,同事还提供list,set,zset,hash等数据结构的存储,memcached支持简单的数据类型:String
2.Redis支持数据的备份,即master-slave模式的数据备份。(Redis 的复制(replication)功能允许用户根据一个 Redis 服务器来创建任意多个该服务器的复制品,其中被复制的服务器为主服务器(master),而通过复制创建出来的服务器复制品则为从服务器(slave)。 只要主从服务器之间的网络连接正常,主从服务器两者会具有相同的数据,主服务器就会一直将发生在自己身上的数据更新同步 给从服务器,从而一直保证主从服务器的数据相同。)
3.Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候再次加载进行使用,而memcached
全部存在内存中
4.Redis的速度要比memcached快很多
5.memcached是多线程,非阻塞IO复用的网络模型;Redis是单线程的IO复用模型
4.redis的6种淘汰策略
1.volatile-lru:从已设置过期时间的数据集中挑选最近最少使用的数据淘汰
2.volatile-ttl:从已设置过期时间的数据集中挑选将要过期的数据淘汰
3.volatile-random:从已设置过期时间的数据集中任意选择数据淘汰
4.allkeys-lru:从数据集中挑选最近最少使用的数据淘汰(推荐)
5.allkeys-random从数据集中任意选择数据淘汰
6.no-eviction:禁止淘汰数据,写入新数据报错。