大量key在同一时间过期,注意什么?

如果过期时间过于集中,会导致Redis可能会出现短暂的卡顿现象。严重的话会出现缓存雪崩,一般需要在时间上加一个随机值,
使用过期时间分散一些。

Redis分布式锁的实现原理

setnx命令设置唯一的key,只有不存在时才返回成功,这就相当于争抢锁。再使用expire给锁加一个过期时间防止锁忘记释放,导致死锁情况。
不过setnx和expire是两个命令,可以使用set命令,将两个操作合成一个原子操作

使用keys扫出指定模式key列表会有什么问题

由于Redis是单线程,keys指令在运行时会导致线程阻塞一段时间,线上服务会停顿
可以使用scan无阻塞地提取,但会有一定的重复概率,需要在客户端做一次去重,所花时间比keys要长。
增量式迭代命令

如何使用Redis做异步队列?

一般使用list结构,rpush生产消息,lpop消费消息。无消息时,适应sleep()重试或使用blpop阻塞直到有消息到来

如何Redis实现延时队列

使用sortedset,拿时间戳作为score,消息内容作为key调用add来生间消息,消费者用zrangebyscore指令获取N次之前的数据轮询进行处理

怎么持久化

RDB:镜像全量持久化
AOF:增量持久化。

Redis雪崩、穿透 击穿

缓存同一时间大面积失效,导致大量的请求直接由db处理。就好像洪水一瞬点冲向小堤坝一样。
穿透是指请求了缓存和数据库中都没有的数据,而用户不断发起请求。一般认为是恶意攻击,永远不要相信用户的输入参数,做好校验。
缓存击穿和雪崩有点像,是指某几个key非常热点,担承了大量的请求,当这几个key在失效的瞬点,持续的大并发就穿破缓存,直接请求数据库,就像在一个完好无损的桶上凿开了一个洞。

策略,

  • 在批量往Redis存数据的时候,把每个Key的失效时间都加个随机值。
  • 如果是集群部署,将热点数据均匀分布在不同的Redis库也能避免。
  • 或者热点数据永不过期,有更新操作就更新缓存就好了。
  • Nginx配置项
  • 布隆过滤器
  • 热点数据永不过期
  • 互斥锁

小总结

  • 事前:Redis高可用,主从+哨兵,Redis Cluster,避免全盘崩溃
  • 事中:本地ehcache缓存+Hystrix限流+降级,避免 MySQL被打死
  • 事后: Redis持久化RDB+AOF,一旦重启,自动从磁盘上加载数据,快速恢复数据。

Redis为啥快

  • 完全基于内存
  • 数据结构简单
  • 采用单线程,避免不必要的上下文切换和竞争条件,
  • 也不存在多进程或者是多线程导致的切换而消耗CPU,不用考虑各种锁的问题。
  • 使用多路I/O复用模型,非阻塞IO
  • 底层通过机制优化

单进程单线程瓶颈怎么解决

单机多核开多个Redis实例,集群、主从同步读写分离

持久化问题

持久化的话是Redis高可用中比较重要的一个环节,因为Redis数据在内存的特性,持久化必须得有,我了解到的持久化是有两种方式的。

  • RDB:RDB 持久化机制,是对 Redis 中的数据执行周期性的持久化。
  • AOF:AOF 机制对每条写入命令作为日志,以 append-only 的模式写入一个日志文件中,因为这个模式是只追加的方式,所以没有任何磁盘寻址的开销,所以很快,有点像Mysql中的binlog。

两种方式都可以把Redis内存中的数据持久化到磁盘上,然后再将这些数据备份到别的地方去,RDB更适合做冷备,AOF更适合做热备,比如我杭州的某电商公司有这两个数据,我备份一份到我杭州的节点,再备份一个到上海的,就算发生无法避免的自然灾害,也不会两个地方都一起挂吧,这灾备也就是异地容灾,地球毁灭他没办法

哨兵?

主要功能:

  • 集群监控:负责监控Redis master 和slave进程是否正常工作
  • 消息通知:如果某个Redis实现有故障,那么哨兵负责发送消息作为报警通知给管理员
  • 故障转换:如果master node挂掉了,会自动转换到slave node上
  • 配置中心:如果故障转移发生了,通知client客户端新的master地址。

主从之间数据怎么同步

启动slave时,会发送一个Pysnc命令给master,如果这个slave第一次连接到master,他会触发一个全量复制。master会避动一个线程,生成RDB快照,
还会把新的写请求都缓存在内存中,RDB文件生成后,master会将这个RDB发送给slave,slave拿到之后第一件事情就是写进本地磁盘,然后加载进内存,然后
master会把内存里面缓存的那些新命名都发给slave.

过期策略

  • 定期删除,默认100ms就随机抽一些设置了过期时间的Key,检查是否过期,删除。
  • 惰性删除,查询时时再检测是否过期,过期就删除还不给你返回
  • 内存淘汰机制
    对于定期没删除又没查询的,近似LRU算法思路

数据一致性问题

Redis常见面试问题及答案的更多相关文章

  1. Hibernate的10个常见面试问题及答案

    在Java J2EE方面进行面试时,常被问起的Hibernate面试问题,大多都是针对基于Web的企业级应用开发者的角色的.Hibernate框架在Java界的成功和高度的可接受性使得它成为了Java ...

  2. 漫画 | Redis常见面试问题(一)

    最近,阿音在为接下来的一场面试做准备,其中的内容包括redis,而且redis是重点内容. Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数 ...

  3. 漫画 | Redis常见面试问题(二)

    上期,小知和阿音在进行面试问答,可是呢,还没问完小知就表示累了想休息一会,然后就休息去了,但是,以为这样就完了吗? 当然不是,还得继续啊,嘿嘿嘿 注:对于第一种,需要应用程序自己处理资源的同步,可以使 ...

  4. Redis的那些最常见面试问题

    随笔:经过长达一周的奔波和面试,电话面试,回首今天终于成功的入职了,总共面试了大概10家公司,包括阿里,京东,IBM等等,京东技术过了,学历因为非统招就被pass了,阿里面了2次电话面试就没下文了,估 ...

  5. (转)Redis的那些最常见面试问题

    背景:最近在准备面试相关的题目,发现redis基本一片空白,有必要好好总结下. 转自:https://www.cnblogs.com/Survivalist/p/8119891.html 1.什么是r ...

  6. Redis的那些最常见面试问题(转)

    Redis的那些最常见面试问题         1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型 ...

  7. Java 最常见 200+ 面试题答案全解析-面试必备

    本文分为十九个模块,分别是: Java 基础.容器.多线程.反射.对象拷贝.Java Web .异常.网络.设计模式.Spring/Spring MVC.Spring Boot/Spring Clou ...

  8. 【转】面试还搞不懂redis,快看看这40道Redis面试题(含答案和思维导图)

    ———————————————— 版权声明:本文为CSDN博主「程序员追风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog. ...

  9. Redis的最常见面试问题

    Redis的那些最常见面试问题[转] 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据 ...

随机推荐

  1. JS中FireFox新开窗口预览打印处理的方式

    仅提供思路,勿喷如下↓ /** * 打印方法 * @param dom 要被打印的dom元素 * @param parentClassName 该组件的页面根组件class名 * @param pag ...

  2. react正常显示html代码、dangerousSetInnerHTML 笔记

    const html =`<h1>今天天色很好</h1>` <div dangerouslySetInnerHTML={{__html:html}}></di ...

  3. make j* make j4 make j8 区别

    转载: make -j4是什么意思看书上说1) make(1)只衍生一个作业//作业是什么意思?make(1) 是不是就是make的意思?2) 在双处理器上make -j4,难道是让每个处理器跑两个作 ...

  4. PTA(Basic Level)1087.有多少不同的值

    当自然数 n 依次取 1.2.3.--.N 时,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少个不同的值?(注:⌊x⌋ 为取整函数,表示不超过 x 的最大自然数,即 x 的整数部分.) 输入格式: ...

  5. 什么是分布式关系型数据库服务 DRDS

    DRDS 产品简介 DRDS 是一款基于 MySQL 存储.采用分库分表技术进行水平扩展的分布式 OLTP 数据库服务产品,支持 RDS for MySQL 以及 POLARDB for MySQL, ...

  6. IDEA 修改JavaWeb的访问路径

    问题描述        对于我这个刚刚使用IDEA不久的新手来说,能够正常运行就不错了,不过到了后面,可能会觉得IDEA给你分配的默认访问路径很不顺手,比如访问的时候需要通过: http://loca ...

  7. 从入门到自闭之Python软件命名规范

    软件命名规范:分文件存储 当代码存放在一个py文件中时会存在一下缺点: 不便于管理 可读性差 加载速度慢 是Django的雏形 程序员预定俗称的一些东西 启动文件:也叫启动接口,通常文件夹名字使用bi ...

  8. 使用Python基于百度等OCR API的文字识别

    百度OCR Baidu OCR API:一定额度免费,目前是每日500次 Python SDK文档:https://cloud.baidu.com/doc/OCR/OCR-Python-SDK.htm ...

  9. Java NIO浅析 转至 美团技术团队

    出处: Java NIO浅析 NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服 ...

  10. MySQL性能优化(三):索引

    原文:MySQL性能优化(三):索引 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbi ...