Redis冠军宝座

1.概念:

Redis是一个完全开源免费内存中的数据结构存储系统,可以用作高性能的键值数据库,缓存和消息中间件,它支持多种类型的数据结构,如字符串,(hash)散列表(存对象),列表(也就是消息中间件),集合,有序集合等.

2.持久化策略

Redis的数据运行在内存中,如果服务器宕机,内存依然存在是因为Redis自身有持久化的机制
1.RDB模式
特点说明:是redis默认的持久化策略,可以实现定期的持久化文件(问题可能会造成数据的丢失,RDB模式记录数据的时候记录的是内存数据的快照,每次只保留最新的快照,持久化文件相对较小,恢复速度较快!)
2.AOF模式
特点说明:AOF是关闭的,使用时需要手动开启.
AOF是可以实现redis的持久化,可以保证数据的不丢失.
AOF持久化时记录的用户的操作过程,并且将每个过程都追加到持久化文件中,所以AOF的持久化的文件比较大,实现数据的恢复相对较慢.
如果AOF和RDB同时出现时,以AOF为主.
持久化文件实际的使用场景:使用redis集群时,redis的主机使用RDB模式(效率较高)redis的从机使用AOF模式(数据较全)

3.Redis内存的策略

(8种)

  • LRU:
    1.allkeys-lru 所有的数据采用lru算法
    2.Volatile-lru 设置超时时间的使用lru算法

  • LFU:(redis5.0后 针对使用次数删除,如果出现之前次数很多,现在不使用的现象次数右移)
    1.allkeys-lfu
    2.Volatile-lfu

  • Random:
    1.allkeys-random
    2.Volatile-random

  • TTL:超时时间(删除设置超时时间)
    Volatile-ttl

  • Noeviction 默认使用策略不删除数据,如果内存溢出,报错提示

4.Redis分片机制

  • 单台的redis存在的问题:
    1.如果单台的redis宕机整体无法运行
    2. 业务需要大量的内存时无法实现数据的存储

  • Redis分片机制的说明:
    由于单台redis不能实现业务的需求,不能保存海量数据,
    使用多台的redis共同保存数据,并且每台redis的内存数据是不同的!

  • 使用的算法:
    Hash一致性算法
    概念:对相同的数据进行hash算法,那么值一定必然相同.(类似我们学的函数)
    示意图:Redis冠军宝座_第1张图片
    特性:
    1.均衡性:出现负载不均,采用虚拟节点的形式实现平衡.
    2.单调性:新增和删除是节点中的数据可以实现自动的迁移.
    Redis中的节点只能新增,尽量不要删除.
    3.分散性:数据应该分散的存放在分布式集群中的各个节点(节点可以自己有备份)不必每个节点都储存所有的数据.
    由于分布式的部署;程序不能使用全部的内存空间,原来一个key只有一个位置.但是由于分散性 可能会导致一个key有很多的位置,所以使用内存最好使用全部的内存.
    作用:使用分片的作用主要就是实现了内存的扩容.

    5.redis哨兵机制(实现redis的高可用)

    可以映入哨兵机制实现redis服务器的高可用,但是实现的前提是实现数据的主从同步关系.
    哨兵的工作原理:
    Redis冠军宝座_第2张图片
    1.当哨兵服务器启动时,首先监控主机的状态,同时获取主句的详细信息
    2.哨兵会通过心跳检测机制定期检查主机的状态
    3.当主机超过了3次没有响应时则判断主机宕机,开启推选机制
    4.哨兵推选一台从机当主机,其他的服务器都当该主机的从机

6.Redis集群

Redis的分片的缺点:不可实现高可用
Redis的哨兵的缺点:不可以扩容并且哨兵自己宕机无法处理
Redis集群的原理:
实现高可用的原理图:
Redis冠军宝座_第3张图片
Redis中所有的节点都会保存当前redis集群中全部的主从关系,
当一个节点发生宕机时,其他节点会通过ping-pong机制检查节点是否宕机.当有半数以上的节点认为宕机,则认为主节点宕机,同时由剩下的主节点进入选举机制,实现故障的迁移.
推选机制示意图:
Redis冠军宝座_第4张图片
Hash槽储存数据原理:
与分片hash一致性的区别:hash一致性是在Tomcat中就已经算好的
Hash槽算法是在redis中计算的
0~16383,也就是有16384个槽位,将存储的数据中的key进行 CRC16[key]&16383计算放在什么位置.如图:
Redis冠军宝座_第5张图片
一个槽位是一个主节点,最多有16384个主节点
一共可以存16384个key吗?错误
一个节点可以存储很多个key

你可能感兴趣的:(java,后端)