redis为什么快?
1.基于内存的,不用磁盘io,所以快
2.io多路复用,一个线程监控多个socket连接
3.单线程,减少上下文线程切换(6.1之后处理和客户端的连接是多线程,但是处理命令是单线程)
因为内存资源都是很宝贵的(一个电脑硬盘可能几百个g,内存只有几个g),redis是怎么做的?
引出两个概念
1.过期删除
redis的key都是有过期时间,但是有海量的数据,要怎么删除?考虑性能问题
redis是用随机的部分抽查+惰性删除(查出来发现过期了,再删除,返回一个空值)
2.内存淘汰
内存满了怎么办?
LRU最近最少使用,也是redis默认的内存淘汰策略
redis的持久化策略
因为是基于内存的,那重启会不会丢失?肯定会,redis有两个持久化策略
1.AOF---增量备份
只记录最新数据的变更(操作日志)记录redis命令
2.RDB-----全量备份
复制粘贴,物理日志,全量记录
海量数据的时候怎么备份?
1.全量备份(不行,效率不高)
2.只备份最新的数据变化(不行,记不全)
redis采用两者相结合的方式去持久化的
redis如果进行主从复制的?
先同步RDB再同步AOF
AOF记录文件太大了怎么办?
AOF重写(可以配置的),减少很多命令重复的,减少内存占用
Redis的数据结构?
string list set zset hash
首先要确定的是,redis其实就是基于内存的hashmap,key是string value是上面所说的数据结构