目录

1. Redis数据结构

1. 常用数据结构

字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。

2. 高级数据结构

  • HyperLogLog、Geo、Pub/Sub。
  • Redis Module,像BloomFilter,RedisSearch,Redis-ML

2. Redis分布式锁

1. Redis分布式锁原理

先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。

2. 如果在setnx之后执行expire之前进程意外crash或者要重启维护,如何处理?

仅当keyName不存在(NX选项)且过期时间为5秒(ex选项)时,该命令才会设置该值

SET keyName true NX EX 5

3. 假如Redis存储有1亿个key,其中10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?

使用keys指令可以扫出指定模式的key列表。

4. 如果Redis正在给线上的业务提供服务,那使用keys指令会有什么问题?

  1. Redis是单线程的。keys指令会导致线程阻塞一段时间,线上服务会停顿,直到指令执行完毕,服务才能恢复。
  2. 使用scan指令,scan指令可以无阻塞的提取出指定模式的key列表,但是会有一定的重复概率,在客户端去重即可,但是整体所花费的时间会比直接用keys指令长。

3. Redis实现异步队列

1. Redis如何实现队列

一般使用list结构作为队列,rpush生产消息,lpop消费消息。当lpop没有消息的时候,要适当sleep一会再重试。

2. 不用sleep,如何处理没有消息的情况?

可以使用list数据结构的blpop指令,在没有消息的时候,它会阻塞住直到消息到来。

3. Redis队列如何实现生产一次消费多次?

使用pub/sub主题订阅者模式,可以实现1:N的消息队列。

4. pub/sub有什么缺点?

在消费者下线的情况下,生产的消息会丢失,这种情况下可以使用专业的消息队列如rabbitmq等。

5. redis如何实现延时队列?

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

6. 如果有大量的key需要设置同一时间过期,一般需要注意什么?

如果大量的key过期时间设置的过于集中,到过期的那个时间点,redis可能会出现短暂的卡顿现象。一般需要在时间上加一个随机值,使得过期时间分散一些。

4. Redis持久化

1. Redis持久化如何实现?

  1. bgsave做镜像全量持久化,aof做增量持久化。因为bgsave会耗费较长时间,不够实时,在停机的时候会导致大量数据丢失,所以需要aof来配合使用。
  2. 在redis实例重启时,会使用bgsave持久化文件重新构建内存,再使用aof重放近期的操作指令来实现完整恢复重启之前的状态。

2. 如果突然机器掉电会怎样?

  1. 取决于aof日志sync属性的配置
  2. 如果不要求性能,在每条写指令时都sync一下磁盘,就不会丢失数据。
  3. 在高性能的要求下每次都sync是不现实的,一般都使用定时sync,比如1s1次,这个时候最多就会丢失1s的数据。

3. bgsave的原理是什么?

  1. fork和cow。
  2. fork指redis通过创建子进程来进行bgsave操作
  3. cow指的是copy on write,子进程创建后,父子进程共享数据段,父进程继续提供读写服务,写脏的页面数据会逐渐和子进程分离开来。

5. Redis管道

1. Pipeline优点

可以将多次IO往返的时间缩减为一次,前提是pipeline执行的指令之间没有因果相关性。

2. 为什么要用Pipeline

使用redis-benchmark进行压测的时候可以发现影响redis的QPS峰值的一个重要因素是Pipeline批次指令的数目。

6. Redis的同步机制

1. Redis 支持哪些同步机制?

Redis可以使用主从同步,从从同步。

2. Redis主从同步实现

  1. 第一次同步时,主节点做一次bgsave,并同时将后续修改操作记录到内存buffer,待完成后将rdb文件全量同步到复制节点
  2. 复制节点接收完成后将rdb镜像加载到内存
  3. 加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放

7. Redis集群

  1. Redis Sentinal着眼于高可用,在master宕机时会自动将slave提升为master,继续提供服务。
  2. Redis Cluster着眼于扩展性,在单个redis内存不足时,使用Cluster进行分片存储。

8. 参考

https://baijiahao.baidu.com/s?id=1594341157941741587&wfr=spider&for=pc

Redis考察点解析的更多相关文章

  1. [转帖]Redis性能解析--Redis为什么那么快?

    Redis性能解析--Redis为什么那么快? https://www.cnblogs.com/xlecho/p/11832118.html echo编辑整理,欢迎转载,转载请声明文章来源.欢迎添加e ...

  2. 【Redis】解析Redis和Java传递数据

    在Java中使用Redis之前需要导入 jedis.jar 包,由于Redis是基于key-value进行数据存储,java中的数据存储到Redis中有许多方式,这里笔者介绍采用JSON字符串和对象序 ...

  3. Redis 数据结构解析和命令指南

    命令參考文档:redis commands - 你或许已经知道Redis并非简单的key-value存储.实际上他是一个数据结构server.支持不同类型的值. 也就是说.你不必只把字符串当作键所指向 ...

  4. 实现 Redis 协议解析器

    本文是 <用 Golang 实现一个 Redis>系列文章第二篇,本文将分别介绍Redis 通信协议 以及 协议解析器 的实现,若您对协议有所了解可以直接阅读协议解析器部分. Redis ...

  5. Redis全面解析

    1.什么是Redis? Redis是BSD协议,是一个高性能的key-value非关系型数据库. 2.redis单线程问题 所谓的单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一 ...

  6. redis配置文件解析

    Redis是一个简单高效的内存KV数据库,基本上下载源码make install,编译完成,然后进入src目录运行redis-server即可运行.就是因为这么简单往往有朋友直接运行,将没有密码的re ...

  7. Redis源代码分析(一)--Redis结构解析

    从今天起,本人将会展开对Redis源代码的学习,Redis的代码规模比較小,很适合学习,是一份很不错的学习资料,数了一下大概100个文件左右的样子,用的是C语言写的.希望终于能把他啃完吧,C语言好久不 ...

  8. Redis源代码解析:13Redis中的事件驱动机制

    Redis中.处理网络IO时,採用的是事件驱动机制.但它没有使用libevent或者libev这种库,而是自己实现了一个很easy明了的事件驱动库ae_event,主要代码只400行左右. 没有选择l ...

  9. redis代码解析-事务

    redis 的事务相关的几个命令分别为 watch multi exec. watch 可以监控一个变量在事务开始执行之前是否有被修改.使用方式为: WATCH key [key ...] 在redi ...

随机推荐

  1. IT行业中文资源网址集绵

    1. IT网址:https://github.com/ityouknow/awesome-list 2.后端架构师网址:https://github.com/xingshaocheng/archite ...

  2. Number Sequence(周期是336!!不是48!!)

    1005 Number Sequence 时间限制: 1 Sec  内存限制: 60 MB 题目描述 A number sequence is defined as follows: f(1) = 1 ...

  3. 如何使用 Lucene 做网站高亮搜索功能?

    现在基本上所有网站都支持搜索功能,现在搜索的工具有很多,比如Solr.Elasticsearch,它们都是基于 Lucene 实现的,各有各的使用场景.Lucene 比较灵活,中小型项目中使用的比较多 ...

  4. sort实现ip排序

    说明: 工具:sort linux自带        ”-t” : 表示以那个字符做分割        “-k” :和-t结合使用,表示取那一段为关键字进行排序,后面跟数据,1…n,表示取第几段,也可 ...

  5. windows server 简化设置

    win2012任务管理器显示磁盘管理员运行命令提示符,diskperf -y 不要开机密码 运行 netplwiz 勾去掉 运行 gpedit.msc 计算机设置-Windows设置 -安全设置-帐户 ...

  6. P4147 玉蟾宫 二维DP 悬线法

    题目背景 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成N*M个格子,每个格子里写着'R'或者'F ...

  7. mysql命令之工作小结

    1.登客户端 mysql   -u userName  -p password   -h  ip    注:u 用户名   p 密码   h  ip地址 2.修改密码 UPDATE   mysql.u ...

  8. Ubuntu在终端执行命令时出现的错误

    1.在安装jdk时无意间结束了安装进程,然后就提示这个错误 E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无法锁定管理目录(/var/lib/d ...

  9. Docker操作笔记(三)数据管理

    数据管理 一.数据卷 数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性: 数据卷 可以在容器之间共享和重用 对 数据卷 的修改会立马生效 对 数据卷 的更新,不会 ...

  10. ajax 三种数据格式

    1.JSON(格式要正确,可以引jar包操作) servlet代码 package com.hsp.action; import java.io.IOException; import java.io ...