一、简介

1. Redis是完全开源免费的,是一个高性能的key-value类型的内存数据库。

2. 整个数据操作都是在内存中进行,定期通过异步操作把数据库数据flush到硬盘上进行保存。

3. 支持五种数据类型 String、Hash、List、Set、ZSet

  3.1 String是redis最基本数据类型。一个key对应一个value,值最大能存储512MB。

  3.2 Hash是一个键值对的集合,Redis hash是一个String类型的key-value映射表,适合存储对象。

  3.3 Redis列表是简单的字符串列表,List内元素可重复,可以做消息队列或最新消息排行等。

  3.4 Set是Redis字符串类型的无序集合。集合是通过哈希表实现的,因此添加、删除、查询时间复杂度都是O(1)。set中一个key对应多个字符串的value,集合元素不重复。

  3.5 ZSet是Redis字符串类型的有序集合,集合元素不重复。

二、特性

1. 可用于缓存,消息(支持 publish/subscribe 通知),按key设置过期时间,过期后将会自动删除,具体淘汰策略有:

  1.1 volatile-lru:从已经设置过期时间的数据集中,挑选最近最少使用的数据淘汰

  1.2 volatile-ttl:从已经设置过期时间的数据集中,挑选即将要过期的数据淘汰

  1.3 volatile-random:从已经设置过期时间的数据集中,随机挑选数据淘汰

  1.4 allkeys-lru:从所有的数据集中,挑选最近最少使用的数据淘汰

  1.5 allkeys-random:从所有的集合中,随机挑选数据淘汰

  1.6 no-enviction:禁止淘汰数据

具体过期键的策略有:定时删除(缓存过期时间到就删除,创建timer耗CPU),惰性删除(获取的时候检查,不获取一直留在内存,对内存不友好),定期删除(CPU和内存的折中方案)

2. 支持数据持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用

Redis提供了两种持久化的方式,分别是RDB(Redis DataBase)和AOF(Append Only File)

RDB:在不同的时间点,将redis存储的数据生成快照并存储到磁盘等介质上,可以将快照复制到其他服务器从而创建具有相同数据的服务器副本。如果系统发生故障,将会丢失最后一次创建快照之后的数据。如果数据量大,保存快照的时间会很长。

AOF:将redis执行过的所有写指令记录下来,在下次redis重新启动时,只要把这些写指令从前到后再重复执行一遍,就可以实现数据恢复了。将写命令添加到 AOF 文件(append only file)末尾。

RDB、AOF可同时使用,重启Redis优先使用AOF。

区别:RDB 生成快照  AOF 记录指令

3. 复制

Redis为了解决单点数据库问题,会把数据复制多个副本部署到其他节点上,通过复制,实现Redis的高可用性,实现对数据的冗余备份,保证数据和服务的高度可靠性。

4. 哨兵

哨兵是Redis集群架构中非常重要的一个组件,哨兵的出现主要是解决了主从复制出现故障时需要人为干预的问题。

主要功能如下:

(1)集群监控:负责监控Redis master和slave进程是否正常工作

(2)消息通知:如果某个Redis实例有故障,那么哨兵负责发送消息作为报警通知给管理员

(3)故障转移:如果master node挂掉了,会自动转移到slave node上

(4)配置中心:如果故障转移发生了,通知client客户端新的master地址

5. 集群

至少部署两台Redis服务器构成一个小的集群,主要有2个目的:

(1)高可用性:在主机挂掉后,自动故障转移,使前端服务对用户无影响。

(2)读写分离:将主机读压力分流到从机上。

集群可以实现客户端组件的负载均衡,分担请求压力。