Redis
什么是Redis?
Redis 是用 C 语言开发的一个开源的高性能键值对(key-value)数据库。它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止 Redis 支持的键值数据类型如下:
1.字符串类型(Stirng)
String是redis最基本的类型。你可以理解成为与Memcached一模一样的类型,一个key对应一个value。string类型是二进制安全的。意思是redis的string可以包含任何数据。比如ipg图片或者序列化的对象。string类型是Redis最基本的数据类型,sting类型的值最大能存储521MB。
2.散列类型(Hash->哈希)
Redis hash是一个键值(key=>value)对集合。
Redis hash是一个sting类型的field和value的映射表,hash特别适合用于存储对象。
每个 hash 可以存储 232 -1 键值对(40多亿)。
3.列表类型(List)
Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。
列表最多可存储 232 - 1 元素 (4294967295, 每个列表可存储40多亿)。
4.集合类型(Set)
Redis的Set是sting类型的无序集合。
集合是通过哈希表实现的,所以添加、删除、查找的复杂都是0(1)。
添加一个 string 元素到 key 对应的 set 集合中,成功返回1,如果元素已经在集合中返回 0,如果 key 对应的 set 不存在则返回错误。
5.有序集合类型(zset)
Redis zset 和 set 一样也是string类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。
zset的成员是唯一的,但分数(score)却可以重复。
添加元素到集合,元素在集合中存在则更新对应score。
Redis的应用场景
缓存(数据查询、短连接、新闻内容、商品内容等等)
分布式集群架构中的 session 分离
聊天室的在线好友列表
任务队列(秒杀、抢购、12306 等等)
应用排行榜
网站访问统计
数据过期处理(可以精确到毫秒)
Redis HA 方案
HA(High Available,高可用性群集)机集群系统简称,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执 行业务的称为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。
Redis 一般以主/从方式部署(这里讨论的应用从实例主要用于备份,主实例提供读写)该方式要实现 HA 主要有如下几种方案:
主从及哨兵架构 redis cluster集群
Redis一致性哈希算法
将用户和redis节点的hash值对应到一个32位的环形数据结构上,环形结构首尾封闭,用户通过hash算法来定位在环形结构上,redis节点也通过hash算法来定位到环形结构上,此时的命中问题就变成了,用户节点通过顺时针旋转,在旋转的过程中若碰到redis节点,就在该节点上读取数据,若此时在环形结构上增加新的redis节点,由于是顺时针寻找对应的redis节点,所以用户此时的redis命中率还是很高的,不会因为增加了一台redis节点就导致大量的用户命中失败的情况出现。
Redis集群一致性Hash