重新认识Redis

原创
2019/04/15 19:46
阅读数 47

Redis支持的数据类型:

 

String、list、hash、set

 

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

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

 

Redis的持久化实现

Reids相较于memcached优秀的一点是他可以做磁盘持久化,默认是通过RDB,还有一种方式是AOF

 

  1. RDB持久化

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

优点:RDB的数据恢复速度是远高于AOF的

缺点:由于RDB文件的生成是命令触发的,并不是实时在持久化的,所以每次去生成这个文件的开销会比较大

 

  1. AOF持久化

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

优点:实时在做持久化操作的

缺点:随着时间的推移,AOF文件会变得越来越大,需要定期重写来降低文件体积,而且AOF的加载速度更慢

 

 

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优先移除

 

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部