redis面试题
所属分类 redis
浏览量 1154
数据类型
string 二进制安全的字符串,最大512M
list 字符串列表
set 无序的字符串集合,不重复
sortedset 排序的字符串集合
hash key/value对
单进程单线程
利用队列技术将并发访问变为串行访问,消除了传统数据库并发控制的开销。
多线程处理 锁,线程切换
单线程无法发挥多核CPU性能 , 可以单机多实例
Redis优点
速度快 内存操作
丰富的数据类型
支持事务
支持批量操作 pipeline
丰富的功能 缓存 消息 按key设置过期时间,过期后自动删除
Redis 相对memcached的优点
更丰富的数据类型
支持持久化
支持master/slave
过期时间和永久有效设置
EXPIRE PERSIST
为何要把所有数据放内存
内存快 , 异步持久化
内存便宜
哈希槽
Redis集群有16384个哈希槽
每个key通过CRC16校验后对16384取模来决定放置哪个槽
集群的每个节点负责一部分hash槽
pipeline的作用
批处理 提升性能 降低网络流量
Redis事务
原子操作
单独的隔离操作
事务中的所有命令都会按顺序执行
事务相关的命令
MULTI EXEC DISCARD WATCH
内存回收机制
过期策略 删除过期的key
淘汰策略 内存使用到达maxmemory上限时触发淘汰
三种过期策略
定时过期 每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即清除
惰性过期 访问key时,判断是否过期,过期则清除
定期过期 定期扫描 expires字典中一定数量的key,清除过期的key
Redis同时使用 惰性过期和定期过期 两种过期策略
数据淘汰策略
volatile-lru 从已设置过期的数据集中挑选最近最少使用的淘汰
volatile-ttl 从已设置过期的数据集中挑选将要过期的数据淘汰
volatile-random 从已设置过期的数据集中任意挑选数据淘汰
allkeys-lru 从数据集中挑选最近最少使用的数据淘汰
allkeys-random 从数据集中任意挑选数据淘汰
noenviction 禁止淘汰数据
持久化方式
RDB
AOF(append only file)
RDB文件小 适合全量复制 恢复速度快 对性能的影响相对较小
定期快照持久化 实时性不够 特定格式 兼容性差
AOF 支持秒级持久化、兼容性好,但是文件大,恢复速度慢,对性能影响大
AOF文件重写 节省空间
持久化策略选择
数据量 数据安全要求 预算 主从策略
RDB AOF 或者 同时使用
基于redis的分布式锁
setnx + expire
Redis 做异步队列
list rpush lpop 消费消息
lpop 没有消息时,要适当 sleep一下再试
集群方案
客户端分片 jedis
代理分片 codis Twemproxy
Redis-cluster
redis集群方案
缓存穿透 雪崩 预热 缓存并发
穿透优化 空值缓存 布隆过滤器
雪崩优化
缓存失效后 通过加锁或者队列来控制读数据库写缓存的线程数量
多级缓存 设置不同的过期时间
缓存并发 写入操作队列话 串行执行
有许多配置可以通过 CONFIG SET 修改,无需重启
上一篇
下一篇
zookeeper 与 dubbo
LongAdder和LongAccumulator
mysql面试题
cassandra架构要点
Elasticsearch知识点
kafka面试题