1. Redis
1.1 Redis介绍
Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
1.2 Redis性能
读:11.2万/秒
写:8.6万/秒
平均: 10万/秒 吞吐量
2. Redis分片机制
2.1 Redis分片介绍
Redis分片实现了redis内存的扩容,使用多个redis节点,共同为用户提供服务,内存空间翻倍。用户使用时当做一个整体,并且内存保存的数据不一。
2.2 Hash一致性算法
2.2.1 Hash一致性说明
所有节点都是通过ip地址加算法计算获取的。
2.2.2 Hash一致性特性
● 均衡性 均衡性要求节点中的数据尽可能的平均。
● 单调性 当节点新增时,能够实现数据的自动的迁移。
● 分散性 由于分布式原因,导致系统不能获取全部的内存空间,导致一个key有多个位置。
● 负载 由于分布式原因,系统不能获取全部的内存地址,导致同一个位置保存多个数据。
3. Redis持久化策略
3.1 持久化策略说明
Redis中的数据都在内存中,如果断电宕机则内存数据丢失。所以数据会持久化保存,不允许丢失。
3.2 持久化策略模式
3.2.1 RDB模式
RDB模式是Redis中默认的持久化策略。保存的是redis的内存快照,占用的资源少,持久化效率高。
RDB特点:
● RDB模式能够定期持久化,但是有丢失数据的风险
● RDB模式做内存的快照, 效率高
● 占用磁盘空间较小
3.2.2 AOF模式
AOF模式可以实现数据的实时持久化,记录的是用户的操作过程,但是持久化文件会比较大,效率低。
RDB特点:
● AOF模式可以实现数据的实时持久化
● 记录的是用户的操作过程
● 持久化文件会比较大
● 持久化效率低
● AOF模式默认是关闭的
● AOF模式持久化是异步的
3.3 Redis缓存策略说明
- 如果有并发查询时.如果缓存服务器宕机/缓存失效,则查询数据库,可能导致数据库宕机, 俗称缓存雪崩。
- 如果用户高并发查询一个不存在的数据时,后台数据库有宕机的风险,俗称缓存穿透 。
- 如果高并发条件下,当某一个热点的key超时或者失效时,数据库有宕机的风险,俗称缓存击穿。
4. Redis内存机制
4.1 说明
Redis中的数据都保存内存中,内存中的数据如果一味的新增,不删除则内存数据很快存满,导致新的数据保存错误。
4.2 内存策略
4.2.1 LRU算法
内存管理的一种页面置换算法,,选择最近最久未使用的页面予以淘汰,该算法给每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最少使用的页面予以淘汰。
4.2.1 LFU算法
LFU(least frequently used (LFU) page-replacement algorithm)。即最不经常使用页置换算法,要求在页置换时置换引用计数最小的页,因为经常使用的页应该有一个较大的引用次数。但是有些页在开始时使用次数很多,但以后就不再使用,这类页将会长时间留在内存中,因此可以将引用计数寄存器定时右移一位,形成指数衰减的平均使用次数。根据数据使用的次数多少删除数据。
4.3 内存优化策略
- volatile-lru
设定超时时间的数据采用LRU算法删除数据. - allkeys-lru
所有的数据采用LRU算法删除数据 - volatile-lfu
设定了超时时间的数据采用LFU删除数据 - allkeys-lfu
所有的数据采用LFU算法删除数据 - volatile-random
设定了超时时间的随机删除 - allkeys-random
所有key随机删除 - volatile-ttl
设定了超时时间的数据排序,将马上要超时的数据提前删除 - Noeviction
不删除数据,如果内存数据存满则报错返回. 该策略是默认策略
5. Redis主从同步
5.1 说明
利用技术手段实现了当服务器宕机,自动的实现故障的迁移。Redis的最终形态必须实现高可用,实现高可用的前提必须满足主从同步。当发生故障,由于从机与主机的数据是相同的,所以可以非常灵活实现数据的故障迁移。
5.2 Redis哨兵
5.2.1 Redis哨兵作用
Redis哨兵主要实现了redis节点的高可用。
5.2.2 实现步骤
- redis哨兵会监听redis主节点,检查主节点是否存活,获取连接主节点的从机IP和端口。
- 利用ping-pong检测机制检查主节点是否存活,当哨兵连续3次检测都没有数据返回,则表明主节点宕机。
- 哨兵根据从主节点获取的从节点信息,进行推选。从中挑选一台新的从节点当做现在的主节点。将新的主从关系写入其他节点的redis.conf文件中。
- 当服务器重启后,能够了解当前主从关系,实现redis高可用。