Redis 的持久化机制是什么?各自的优缺点?

RDBRedis DataBase)持久化方式: 是指用数据集快照的方式半持久化模式)记录 redis 数据库的所有键值对,在某个时间点将数据写入一个临时文件,持久化结束后,用这个临时文件替换上次持久化的文件,达到数据恢复。

优点:

1、只有一个文件 dump.rdb,方便持久化。

2、容灾性好,一个文件可以保存到安全的磁盘。

3、性能最大化,fork 子进程来完成写操作,让主进程继续处理命令,所以是 IO最大化。使用单独子进程来进行持久化,主进程不会进行任何 IO 操作,保证了 redis的高性能)

4.相对于数据集大时,比 AOF 的启动效率更高。

缺点:

1、数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发生故障,会发生数据丢失。所以这种方式更适合数据要求不严谨的时候)

2、AOFAppend-only file)持久化方式: 是指所有的命令行记录以 redis 命令请求协议的格式完全持久化存储)保存为 aof 文件。

优点:

1、数据安全,aof 持久化可以配置 appendfsync 属性,有 always,每进行一次命令操作就记录到 aof 文件中一次。

2、通过 append 模式写文件,即使中途服务器宕机,可以通过 redis-check-aof工具解决数据一致性问题。

3、AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命令进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))

缺点:

1、AOF 文件比 RDB 文件大,且恢复速度慢。

2、数据集大的时候,比 rdb 启动效率低。

redis 过期键的删除策略?

1、定时删除:在设置键的过期时间的同时,创建一个定时器 timer). 让定时器在键的过期时间来临时,立即执行对键的删除操作。

2、惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过期,如果过期的话,就删除该键;如果没有过期,就返回该键。

3、定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要删除多少过期键,以及要检查多少个数据库,则由算法决定。

Redis 的回收策略(淘汰策略)?

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(驱逐):禁止驱逐数据

使用策略规则:

1、如果数据呈现幂律分布,也就是一部分数据访问频率高,一部分数据访问频率低,则使用 allkeys-lru

2、如果数据呈现平等分布,也就是所有的数据访问频率都相同,则使用
allkeys-random

Redis 的同步机制了解么?

Redis 可以使用主从同步,从从同步。第一次同步时,主节点做一次 bgsave,并同时将后续修改操作记录到内存 buffer,待完成后将 rdb 文件全量同步到复制节点,复制节点接受完成后将 rdb 镜像加载到内存。加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。

是否使用过 Redis 集群,集群的原理是什么?

1、Redis Sentinal 着眼于高可用,在 master 宕机时会自动将 slave 提升为master,继续提供服务。

2、Redis Cluster 着眼于扩展性,在单个 redis 内存不足时,使用 Cluster 进行分片存储。

Redis 如何设置密码及验证密码?

设置密码:config set requirepass 123456

授权密码:auth 123456

Redis 集群之间是如何复制的?

异步复制

Redis 集群最大节点个数是多少?

16384 个。

怎么理解 Redis 事务?

1 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。

2 事务是一个原子操作:事务中的命令要么全部被执行,要么全部都不执行。

Redis 事务相关的命令有哪几个?

MULTI、EXEC、DISCARD、WATCH

Redis 如何做内存优化?

尽可能使用散列表(hashes),散列表(是说散列表里面存储的数少)使用的内存非常小,所以你应该尽可能的将你的数据模型抽象到一个散列表里面。比如你的 web 系统中有一个用户对象,不要为这个用户的名称,姓氏,邮箱,密码设置单独的 key,而是应该把这个用户的所有信息存储到一张散列表里面

MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如
何保证 redis 中的数据都是热点数据?

*Redis 内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。

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

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

ps:此文章会不定时更新,平时总结而发

你可以等自己一万年,但世界不会等你一秒

Java面试题之Redis的大坑相关推荐

  1. java面试题:Redis常见面试题(实际面试有被问到)

    目录 1.Redis和Memcached相比,有哪些优势? 2.Redis为什么要把数据放到内存中? 3.Redis 为何这么快? 4.为何使用单线程? 5.缓存三大问题以及解决方案? 缓存穿透:查询 ...

  2. java面试题之-Redis篇(持续更新)

    文章目录 Redis基础 01.Redis里有哪些数据类型? 02.Redis为什么能够快速执行? 03.那Redis怎样防止异常数据不丢失的(Redis的如何持久化)? 04.缓存穿透.缓存击穿.缓 ...

  3. 复习Java第二个项目仿QQ聊天系统 01(界面部分) Java面试题Redis的过期策略和内存淘汰策略生活【记录一个咸鱼大学生三个月的奋进生活】023

    记录一个咸鱼大学生三个月的奋进生活023 复习Java(仿QQ聊天系统01界面部分) 设置背景(ImgPanel)类 登录界面(LoginFrame)类 注册界面(RegisterFrame)类 好友 ...

  4. 1000道最新高频Java面试题,覆盖25个技术栈(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构!

    每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求.像阿里.腾讯.美团.字节跳动.京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻 ...

  5. 1000道最新大厂高频Java面试题,覆盖25个技术栈(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构

    每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求.像阿里.腾讯.美团.字节跳动.京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻 ...

  6. 最新1000道高频Java面试题,包含25个技术栈等面试攻略(多线程、JVM、高并发、spring、微服务、kafka,redis、分布式)从底层原理到架构

    每个技术人都有个大厂梦,我觉得这很正常,并不是饭后的谈资而是每个技术人的追求.像阿里.腾讯.美团.字节跳动.京东等等的技术氛围与技术规范度还是要明显优于一些创业型公司/小公司,如果说能够在这样的公司锻 ...

  7. 阿里JAVA面试题剖析:一般实现分布式锁都有哪些方式?使用 Redis 如何设计分布式锁?...

    面试原题 一般实现分布式锁都有哪些方式?使用 redis 如何设计分布式锁?使用 zk 来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高? 面试官心理分析 其实一般问问题,都是这么问的,先 ...

  8. BAT 大厂Java 面试题集锦之核心篇附参考答案

    核心篇 数据结构与算法 网路:TCP/IP, HTTP 操作系统, 文件, shell, CPU, IO, epoll, 非阻塞IO, 进程/线程/协程,锁 HashMap, ConcurrentHa ...

  9. java 实体类包含list 怎么取值_2019 最新 500 道 Java 面试题

    2015 年,因为工作岗位的变动,开始负责给集团招聘一些技术人员,出于对公司的负责,也为了更好的胜任技术经理的职位,在面试的这件事上,我做了大量的"功课",首先我研究了几乎所有大厂 ...

最新文章

  1. python动态数组的最大值_python实现动态数组的示例代码
  2. 无人驾驶推进时间表及五大技术领域关键节点
  3. ipv4 帧中继配置(GNS3)
  4. 没有mssqlserver的协议_LoadRunner是什么 LoadRunner协议选择原则介绍【图文】
  5. DNS中实现父子域,以及授权和转发
  6. sql中“delete from 表名”表示_SQL查询语句知识点总结
  7. Eclipse 答疑:如何使用 Eclipse 进行断点(Breakpoints)调试?
  8. Java 算法 寂寞的数
  9. mysql 复制功能_从MySQL复制功能中得到的一举三得实惠分析
  10. ndarray是什么_python数据分析用什么软件?
  11. c语言第一次作业程序题pta,c语言第一次作业程序题pta
  12. package的创建安装和使用
  13. 今天开始学习ADO.NET中的Connection对象(一)--SqlConnection对象连接SQL Server
  14. Linux正确查看内存占用
  15. netbeans-xdebug 断点调试php
  16. matlab·计算机视觉·工具箱
  17. leetcode 171. Excel Sheet Column Number
  18. qca956x flash usb
  19. 如何在浏览器中下载网站的https证书
  20. python绘制基因结构图_手把手教你从头绘制基因簇结构图

热门文章

  1. iOS图片压缩成指定大小
  2. red5源码分析---12
  3. red5 FAQ - 刚接触red5的可以看看
  4. 13C同位素脉冲标记法浅析(实验解析)
  5. split()函数的使用方法
  6. 计算机无法打开eventlog,电脑系统日志不能查看怎么办
  7. CentOS 7 使用RPM一键离线安装 GCC+tcpdump 环境
  8. VMware vSphere(三)update management
  9. 3. MySQL之PyMySQL的安装使用
  10. oracle sql 动态参数,sql – 具有动态参数的Oracle Lag函数