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算法,那么值一定必然相同.(类似我们学的函数)
示意图:
特性:
1.均衡性:出现负载不均,采用虚拟节点的形式实现平衡.
2.单调性:新增和删除是节点中的数据可以实现自动的迁移.
Redis中的节点只能新增,尽量不要删除.
3.分散性:数据应该分散的存放在分布式集群中的各个节点(节点可以自己有备份)不必每个节点都储存所有的数据.
由于分布式的部署;程序不能使用全部的内存空间,原来一个key只有一个位置.但是由于分散性 可能会导致一个key有很多的位置,所以使用内存最好使用全部的内存.
作用:使用分片的作用主要就是实现了内存的扩容.5.redis哨兵机制(实现redis的高可用)
可以映入哨兵机制实现redis服务器的高可用,但是实现的前提是实现数据的主从同步关系.
哨兵的工作原理:
1.当哨兵服务器启动时,首先监控主机的状态,同时获取主句的详细信息
2.哨兵会通过心跳检测机制定期检查主机的状态
3.当主机超过了3次没有响应时则判断主机宕机,开启推选机制
4.哨兵推选一台从机当主机,其他的服务器都当该主机的从机
6.Redis集群
Redis的分片的缺点:不可实现高可用
Redis的哨兵的缺点:不可以扩容并且哨兵自己宕机无法处理
Redis集群的原理:
实现高可用的原理图:
Redis中所有的节点都会保存当前redis集群中全部的主从关系,
当一个节点发生宕机时,其他节点会通过ping-pong机制检查节点是否宕机.当有半数以上的节点认为宕机,则认为主节点宕机,同时由剩下的主节点进入选举机制,实现故障的迁移.
推选机制示意图:
Hash槽储存数据原理:
与分片hash一致性的区别:hash一致性是在Tomcat中就已经算好的
Hash槽算法是在redis中计算的
0~16383,也就是有16384个槽位,将存储的数据中的key进行 CRC16[key]&16383计算放在什么位置.如图:
一个槽位是一个主节点,最多有16384个主节点
一共可以存16384个key吗?错误
一个节点可以存储很多个key