### 内存淘汰
redis内存不足时,有两种处理方式:
(1)启用虚拟内存:将vm-enabled设置为yes
(2)启用内存淘汰:将maxmemory设置为一个大于0的整数
redis的使用内存大于最大分配可用内存时,开始进行淘汰,memcache只有LRU算法,redis有
1 随机淘汰:从数据库随机删除一个key
2 LRU算法:删除一个最近最少访问的key
3 TTL淘汰:删除最快过期的key
### 对象引用计数器
为了防止一个客户端调用get的同时,另一个client调用del删除key而导致的内存端错误,redis使用了内存引用计数器:给对象添加一个引用计数器,有新的引用时,计数+1 ,引用失效,计数器-1 ,引用计数为0时,redis把key删除,对象初始化时,引用计数为1 get时,引用+1 del时,引用-1
eg:实例化refcount=1
get refcount=2
del refcount=1
get结束 refcount=1,此时可以被删除
### 自动关闭超时连接
server.idletime是设置的timeout的时间,timeout=0时,自动关闭不会触发
当连接建立,却不做任何操作时,超过timeout会自动断开连接,当使用连接池时,不用配置timeout的时间,否则连接池里的连接会因超时而断开
### redis清除过期数据
redis为每个存储的数据设置一个过期时间,超过这个时间,redis把过期数据删除,redis删除数据分两个阶段
(1)在定时器serverCron中进行,每隔100ms执行一次
activeExpireCycle随机获取一些key,如果当前时间>数据设置的过期时间,删除key,如果这些key有25%的数据过期,清理过程会继续进行,以释放更多的内存
(2)在用户get时,如果key的expiretime<time(),删除数据