从新认识Redis

Redis支持的数据类型:

 

String、list、hash、setredis

 

单线程的redis为何速度那么快?

  1. 数据是存储在内存中的,内存的访问处理速度自己就是很是优秀的
  2. 底层是采用了NIO的设计方式,依靠多路复用器达到同步非阻塞的好处
  3. Redis是单线程的。。。多线程在切换时是有上下文的切换开销的,这个是有时间性能损耗的

 

Redis的持久化实现

Reids相较于memcached优秀的一点是他能够作磁盘持久化,默认是经过RDB,还有一种方式是AOF算法

 

  1. RDB持久化

经过bgsave命令触发,父进程会执行fork建立子进程,子进程建立一个RDB的二进制文件,而后将此副本文件存储在硬盘中缓存

优势:RDB的数据恢复速度是远高于AOF的多线程

缺点:因为RDB文件的生成是命令触发的,并非实时在持久化的,因此每次去生成这个文件的开销会比较大dom

 

  1. AOF持久化

AOF是实时持久化的,redis每次去执行一个修改数据的命令,都会把修改的命令保存到AOF文件中memcached

优势:实时在作持久化操做的性能

缺点:随着时间的推移,AOF文件会变得愈来愈大,须要按期重写来下降文件体积,并且AOF的加载速度更慢spa

 

 

Redis的选举机制

哨兵提供监控服务,经过心跳机制,ping节点是否在正常状态下,如果发现ping不通,则会主观的认为该节点故障,当半数的哨兵发现都ping不通时,则会认为该节点宕机,从而运用roft算法(选举机制),选出新的节点做为主节点线程

 

 

Redis的缓存更新机制

惰性过时:当访问该key值时,如果已经超过了超时时间,就会清除。如果不访问,即便超时了也不会对其进行处理设计

按期过时:每隔一段时间(Redis默认是100MS)随机抽取一部分key进行检查一次,对已通过期的Key值进行清除处理

 

Redis是同时使用了这两种策略的惰性过时和按期过时,看似按期过时好,可是存在一个问题是,按期过时如果同一时间下去处理大量过时的key值,那他也只会处理这其中的一部分,剩下的交给惰性处理。为的是避免redis处理大量key值时,影响其的性能

 

 

Redis的数据淘汰策略

最经常使用的一种策略allkeys-lru:当内存出现不足以容纳新数据写入时,在键空间中,移除最近最少使用的键值

 

其余策略

  1. noeviction:当目前内存不足以容纳新数据写入时,直接报错
  2. allkeys-random:当目前内存不足以容纳新数据写入时,随机挑选一个key值删除
  3. volatile-lru:当内存不足以容纳新写入数据时,在设置了过时时间的键空间中,移除最近最少使用的key(这个通常不太合适)
  4. volatile-random:当内存不足以容纳新写入数据时,在设置了过时时间的键空间中,随机移除某个key
  5. volatile-ttl:当内存不足以容纳新写入数据时,在设置了过时时间的键空间中,有更早过时时间的key优先移除
相关文章
相关标签/搜索