每日一档之单机Redis

101 阅读3分钟

模型

epoll同步非阻塞模型,通过mmap系统调用,让内核和用户空间共享一块空间,减少fd拷贝(减少系统调用)

优点

  • 计算向数据移动
  • 有面向用户的API
  • 二进制安全,字节流
  • 工作单线程,IO多线程

数据类型

  • string

    • 字符串
    • 数值
      • CRUD
      • 抢购/秒杀/详情页
      规避并发下,对数据库事物操作
      
    • bitmap
      • 统计用户登录天数,且窗口随机
      setbit li 1 1 //li在第2天登录
      
      bitcount li start end //进行统计
      
      • 做活动送礼物,要备多少礼物,活跃用户统计
      **电商知识点* 
      僵尸用户
      冷热用户/忠诚用户
      ***
      
      setbit 日期k1 用户编号1  1
      setbit 日期k2 用户编号2  1
      
      bitop key值d or k1 k2
      bitcount d 0 -1
      
  • list

    • 链表(想到)
      • 单向
      • 双向
      • 有环
      • 无环
    • 栈 同向命令
    lpush lpop
    
    • 队列 反向命令
    lpush rpop
    
    • 数组
    索引操作
    
    
    • 阻塞的单播队列 FIFO
    blpop
    
  • hash

    • 使用场景
      • 详情页缓存
  • set

    • 特点
      • 无序
      • 去重
    • 场景
      • 集合操作,做交并差集
      • 随机事件
      抽奖
      
      SRANDMEMBER key count
          count 负数 会出现重复
                正数 
                0
      
      SPOP
      
  • sorted set

    • 物理内存左小右大,不随命令而发生变化
    • 集合操作
    • 怎么实现排序,CRUD速度
      • skip list 跳跃表(数据结构是分层的,随机造层)

使用

  • 网址
http://redis.cn/
  • 事务

  • 布隆过滤器

    • 为了解决内存穿透
    • 原理
      • 需要用到bitmap
      • 把有的元数据通过映射函数放到bitmap中
      • 当有人查询时先去bitmap进行查找
      • 大概率解决内存穿透
    • 安装
      • 需要安装组件库
  • 作为缓存使用

    • 缓存数据不是全量的,可以丢失,保存的是热数据
    • 注意事项
      • key的有效期
      • 内存有限
    • 缓存问题
      • 缓存穿透
      现在的缓存中没有,会穿透直接去冷库查询
      
      布隆过滤器
      
      • 缓存击穿
      • 缓存雪崩
    • 存储持久化,恢复
      • 补充知识
      管道会触发子进程
      linux中父子进程中的数据不会相互影响
      
      • 快照/副本 RDB
      * 时点性,全量的备份
      fork()子进程[系统调用] + COW[copy on write(写时复制-->机制)]
      
      * 实现方式:
      一:命令方式
      1. save --> 前台阻塞(关机维护的时候用save)
      2. bgsave --> 后台运行,异步非阻塞,fork创建子进程(正常运行的时候)
      
      二:配置文件给出bgsave的规则
      1.用的save的标识,触发bgsava实现
      
      * 弊端:
      不支持日期拉链,只会有一个dump.rdb
      丢数据相对多一些,时点和时点之间的数据容易丢失
       
      * 优点
      恢复速度快
      
      
      • 日志 AOF
      * 写操作,记录在文件中
      1. 丢数据少
      2. redis中RDB和AOF可以同时开启,但如果开启了AOF,只会用AOF恢复
          2.1 在4.0后,AOF中包含了RDB全量,增加记录新的写操作
      
      * 弊端
      体量无限变大,恢复慢
      
      1.解决AOF过大方法
          1.1, 4.0之前重写,删除抵消的命令,合并重复的命令
          1.2, **重写**,将老的数据RDB到AOF文件中,将增量的以指令方式append到AOF中
              
      
    • 解决缓存掉电易失
      • 单机
      • 主从复制
  • 原点,redis是内存数据库

    • 写操作触发IO(3个级别)
      • NO
      • always
      • everysec 每秒