你是如何看待redis的?

59 阅读2分钟

简介

redis是一种 key->value 的非关系型数据库,内部包含字符串、列表、哈希、有序集合、无序集合,一般应用于缓存配置信息,热点key,排名等。它数据存储在RAM中,IO速度很快。

持久化

redis具有两套持久化机制,分别为RDB和AOF两种。

  • RDB主要是存储数据库快照,每隔一段时间会自动更新快照,或者执行save命令或bgsave命令,save命令是同步更新,也就是说save后其他redis操作会阻塞,bgsave是异步更新

    优点: 恢复数据速度快 缺点: 更新快照有时间间隔,可能会出现未更新就宕机的情况,导致数据丢失 数据量过大的时候快照也会过大

  • AOF主要是数据修改的命令记录,它会随着数据的修改追加记录到AOF的日志当中,当命令日志过大时会自动压缩合并同类修改指令 优点: 实时追加命令,数据不容易丢失 缺点: 因为是命令日志,恢复时逐条执行速度比较慢

集群分布式

redis不仅支持持久化而且还支持哨兵集群和cluster两种集群方式

  • 哨兵集群:它为主从结构,master负责写入,slave负责读取,但是它不支持动态扩容,并且在master宕机时slave不会被选举,而是等待mastere恢复
  • cluster集群:它引进了redisCluster,cluster会划分出不同的slot,因为有多个slot所以可以实现动态扩容,每个slot都有一个master和多个slave,master负责读写操作,slave负责冷备份,当master宕机以后slave会进行选举,选出一个slave作为新的master

淘汰机制

redis也有自己的淘汰算法(4种):

  1. 随机淘汰算法
  2. 过期时间淘汰算法
  3. LRU淘汰算法:会筛选出访问间隔时间最长的key进行淘汰
  4. LFU淘汰算法:它有两套双线链表结构,第一条链表中包含着访问频率,每个元素下还有第二个链表,第二个链表中包含着同频次的key,当redis要进行淘汰的时候会将最末端,也就是间隔时间最长的key进行淘汰