zoukankan      html  css  js  c++  java
  • redis 学习

    资料链接:

    1、《Redis设计与实现》http://redisbook.com/

    2、《Redis设计与实现解读版》https://www.cnblogs.com/monxue/p/3961380.html

    3、《Redis源码中文注释版(v3.0)》https://github.com/huangz1990/redis-3.0-annotated

    4、《吃透了这些Redis知识点,面试官一定觉得你很NB(干货 | 建议珍藏)》https://www.cnblogs.com/lixinjie/p/a-key-point-of-redis-in-interview.html

     5、《Redis服务器原理》https://blog.csdn.net/linkedin_38454662/article/details/76152219

    redis中几个知识点和设计思想:

    1、redis使用的数据结构(5种):字符串、哈希表、列表、集合、有序集

         “没有完美的数据结构设计,只有适合的使用场景”---在每种数据类型下面,redis在实际使用的时候都会因地制宜,不同场景下采用不同的具体实现

       (比如:有序集中分为ziplist、skiplist&dict两种实现;Hash的内部结构包含ziplist和hash两种)

    Redis对象底层数据结构共八种:
         编码常量 编码所对应的底层数据结构 
         REDIS_ENCODING_INT(long 类型的整数)
         REDIS_ENCODING_EMBSTR embstr (编码的简单动态字符串) 
         REDIS_ENCODING_RAW (简单动态字符串) 
         REDIS_ENCODING_HT (字典) 
         REDIS_ENCODING_LINKEDLIST (双端链表) 
         REDIS_ENCODING_ZIPLIST (压缩列表) 
         REDIS_ENCODING_INTSET (整数集合) 
         REDIS_ENCODING_SKIPLIST (跳跃表和字典)

     2、redis持久化的两种方式:rdb和aof

           rdb:每次全量保存数据库快照到dump.rdb文件中。优点是全量数据,恢复速度快;缺点是较耗费资源;

           aof:redis会将每一个收到的写命令都通过write函数追加到文件中(默认是 appendonly.aof)。优点是持久性强、可追加以及易parse;缺点是文件较大些;

     3、柔性数组

         在sds的结构实现中,采用了柔性数组。

     4、IO多路复用的选择

      因为 select 函数是作为 POSIX 标准中的系统调用,在不同版本的操作系统上都会实现,所以将其作为保底方案:

      Redis 会优先选择时间复杂度为 的 I/O 多路复用函数作为底层实现,包括 Solaries 10 中的 evport、Linux 中的 epoll 和 macOS/FreeBSD 中的 kqueue,上述的这些函数都使用了内核内部的结构,并且能够服务几十万的文件描述符。但是如果当前编译环境没有上述函数,就会选择 select 作为备选方案,由于其在使用时会扫描全部监听的描述符,所以其时间复杂度较差 ,并且只能同时服务 1024 个文件描述符,所以一般并不会以 select 作为第一方案使用。

           例如,redis在linux系统环境下编译时,通过gcc预置的宏定义(__linux__)来定义HAVE_EPOLL,从而控制aeProccessEvents方法中的aeApiPoll采用EPOLL模型实现。

     

  • 相关阅读:
    数据分析 ---上篇
    爬虫 ---模拟登录
    Spider -- 获取图片并处理中文乱码
    爬虫篇 ---增量式爬虫
    Django中间件深入理解
    认识casbin
    关于nginx开机自己启动配置
    更改redhat yum源
    sqlalchemy监听事件
    Linux命令 history
  • 原文地址:https://www.cnblogs.com/soqu36/p/10818078.html
Copyright © 2011-2022 走看看