• redis面试题收集


    Redis面试题收集

    redis描述

    redis是一个高性能key-value内存数据库,支持数据持久化,数据库主从和集群部署,支持多种数据类型

    string ,hash,list,set ,sortset,hyperLoglog,BloomFilter

    redis速度为何如此之快
    1. redis是基于内存的数据库,整体数据结构类似一个大的hashmap
    2. redis是单线程的不需要来回切换线程执行
    3. redis使用io多路复用技术 可以并发连接, 底层使用epoll非阻塞api
    缓存雪崩和缓存击穿

    大量key同事失效 造成redis阻塞

    查询不存在的key 后端请求全部查询数据库

    redis基本数据类型 优缺点

    String 结构 动态字符串 类型转换 数字转换,embstr(减少一次内存分配释放) redisObject对象分离 raw格式.通过提前分配冗余内存的方式减少内存频繁分配,可以动态扩容

    Hash :hashmap的结构 存储对象使用内存较少 使用场景不多

    list : 双向链表 结构

    set: hashmap

    sortset : 跳跃表

    hyperloglog: 去重统计 通过存储数据基数减少 数据存储空间占用

    blomfilter: 使用hash值 三次hash 相同可能存在 不存在 就是真的不存在

    redis分布式锁

    set key value ex time nx

    // 锁的超时续期, 重试, 和 释放 锁使用lua脚本 比较然后释放

    redlock设计

    redis key 过期策略

    定期清除

    惰性清除

    redisObject

    保存的信息 : 对象类型 格式 引用计数 引用计数为0的对象将会被清除

    Redis 提供 6 种数据淘汰策略:

    volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰

    volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰

    volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰

    allkeys-lru:从数据集(server.db[i].dict)中挑选最近最少使用的数据淘汰

    allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰

    no-enviction(驱逐):禁止驱逐数据

    redis 数据持久化方式

    rdb快照 和aof命令存储

    rdb同步块 ,存在数据丢失

    aof 同步慢 数据不丢失

    高版本采用aof+rdb的方式持久化

    redis主从同步

    主节点做一次bgsave 先同步快照,然后同步aof命令

    redis key查询 命令 keys * 容易发生redis阻塞 使用scan 0 match newes* count 10 命令

    scan命令查询出的数据会有重复 需要客户端去重处理

    redis集群数据同步

    使用hash槽数据分片, 先查询key所在节点信息 使用客户端重定向到正确的节点

    数据rehash的过程也是需要迁移对应的hash槽即可

    redis跳跃表
  • 相关阅读:
    php中__construct()和__initialize()的区别
    js的栈内存和堆内存
    CC攻击原理及防范方法
    html页面调用js文件里的函数报错onclick is not defined处理方法
    yii2深入理解之内核解析
    Scala Data Structure
    Scala Basis
    【MySql】牛客SQL刷题(下)
    【Flume】知识点整理
    【kafka】生产者API
  • 原文地址:https://www.cnblogs.com/cu-later/p/14643354.html
Copyright © 2020-2023  润新知