zoukankan      html  css  js  c++  java
  • RedisCluster

    1、建立slot和jedisPool的对应关系

    2、每一个master Node会建立一个jedisPool

    3、扩展和伸缩节点特别容易

    4、hash一致性算法

    5、gossip算法(最终一致性)

    Redis持久化:

      RDB持久化需要fork子进程,先写临时文件,再替换掉源文件(save配置)

      AOF持久化就是redis主进程做的,只是AOF会写入AOF缓冲区,这个操作是非常快的;然后就是每隔1s把AOF缓冲区中的数据刷新到磁盘中去。追加方式

      AOF重写:根据内存数据重新生成AOF文件,需要fork子进程,至少配置5G

      如果两个机制都开启,优先使用AOF

      集群中必须开启RDB

      缓和持久化:

    Redis优点:

      基于内存

      单线程

      IO多路复用

     Redis删除策略:

      被动删除

      定时删除

      定期删除

      主动删除

      淘汰策略

    Redis逐出算法:

      LRU策略:最近最少使用

      TTL策略:最近使用系数最少的

      即将要过期的数据淘汰选择

      随机淘汰策略

    缓冲的三大问题:

    缓冲与数据库的一致性问题:1、双删策略;2、串行化(队列)  3、分布式读写锁

    redis的位运算

    布隆过滤器

    主从复制原理:rbd和aof命令缓冲区

     集群中的master只能存储自己slot的那部分资源,否则的话会抛出maved error的错误,并告诉客户端应该到那个master上去操作

    hash  tag

    三级缓冲:nginx缓冲+redis缓冲+jvm缓冲

    redLock解决了什么问题,相比其它分布式锁的优点

    redis 的MurMurHash算法

    CRC16(KEY)&16383

    ASK错误

    redis的持久化RDB机制:

      1、redis是需要fork出子进程来保存RDB文件的,但是其实这个过程也是会有时间很短的一段阻塞,就是fork期间会进行阻塞,然后这段时间也会应用Linux的写时复制机制进行操作,所以这段时间写请求的话会性能慢一些的。

      2、AOF重写机制是通过遍历读取数据库的健值来实现的,

        注意AOF缓冲区和AOF重写缓冲区的区别

        AOF重写缓冲区可以保证AOF子进程在重写AOF文件期间,主进程不会有任何的阻塞

    3、集群复制部分同步机制实现(复制积压缓冲区的实现)

    redis的数据结构的底层原理实现:

    redis的对象结构:

    redisObject的基础属性是这三个,还有其他的属性:

    (1)、引用计数值

    (2)、lru记录了最后一次被命令访问的时间

    具体的类型如下:

    具体的编码如下:

    具体的类型和编码对应关系如下:

    1、字符串的底层实现原理

    字符串对象的编码可以是int,raw和embstr

    (1)、int编码的字符串对象

    (2)、raw编码的字符串对象

    (3)、embstr编码的字符串对象

    2、列表健的底层实现原理

    列表对象的编码可以是ziplist或者linkedlist

    (1)、ziplist的编码实现:

    具体的压缩列表结构:

    具体的元素结构:

    注意压缩列表的连锁更新

    (2)、linkedlist的编码实现

    具体的链表结构:

    具体的元素的实现:

    3、哈希健的底层原理实现

    哈希对象的编码实现ziplist和hashtable

    (1)、ziplist 的实现

    具体的存储方式:

    (2)、hashtable的编码实现

    具体的对象:

    ①、Murmurhash算法

    ②、使用链式地址法解决hash冲突问题(单向链表,并且使用链表的头插法添加元素)

    ③、rehash:渐进式hash,注意是为了防止在rehash的过程中阻碍正常的服务流程

    渐进式hash的过程以及注意的点(redisidx变量的值的变化)

    4、有续集合健的底层实现原理

    有序集合的编码方式可以是ziplist和skiplist

    (1)、ziplist的编码实现

    具体的元素存储结构:

    (2)、skiplist的编码实现

    具体的元素实现:

    具提的元素结构:

    跳表的结构如下:

    具体的元素结构:

    5、普通集合健的底层实现原理

    集合对象的编码可以是intset或者是hashtable

    (1)、intset编码的实现

    具体的元素结构:

    注意一点就是整数集合健的升级

    (2)、hashtable编码的实现(key为字符串,值为null的结构)

     

    Redis数据库的底层实现

    1、redis删除数据库过期键的策略

    存储有过期时间的Redis数据库:

    主要是分为两种策略:惰性删除策略和定期删除策略

      

      

  • 相关阅读:
    解决配置Windows Update失败问题
    Rabbit MQ 消息确认和持久化机制
    Spring Boot事务管理(上)
    Spring Boot事务管理(中)
    Spring Boot事务管理(下)
    接口和抽象类的区别
    MySQL索引优化
    Spring 注解之@RestController与@Controller的区别
    Spring Boot核心注解@SpringBootApplication
    Java抽象类与接口的区别
  • 原文地址:https://www.cnblogs.com/erdanyang/p/12913937.html
Copyright © 2011-2022 走看看