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跳跃表
原文地址:https://www.cnblogs.com/cu-later/p/14643354.html