当前位置: 首页 > news >正文

【Redis】回顾下Redis基础知识点,还记得哪些?

Redis基础知识点

  • 什么是Redis?
  • Redis的常用数据类型有哪些?
  • Redis与Memcache的区别?
  • Redis的持久化方案由哪些?
  • Redis的集群方式有哪些?

什么是Redis?

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。
Redis 的数据类型都是基于基本数据结构的,比如支持它支持字符串、哈希表、列表、集合、有序集合,位图,hyperloglogs等数据类型 ,同时对程序员透明,无需进行额外的抽象,使用方便。
Redis 运行在内存中但是可以持久化到磁盘,所以在对不同数据集进行高速读写时需要权衡内存,因为数据量不能大于硬件内存。
所以使用Redis读写数据都是非常快的。内置复制、Lua脚本、LRU收回、事务以及不同级别磁盘持久化功能,同时通过Redis Sentinel提供高可用,通过Redis Cluster提供自动分区。

Redis的常用数据类型有哪些?

支持多种类型的数据结构,主要区别是value存储的数据格式不同:

  • string:最基本的数据类型,二进制安全的字符串,最大512M。
  • list:按照添加顺序保持顺序的字符串列表。
  • set:无序的字符串集合,不存在重复的元素。
  • sorted set:已排序的字符串集合。
  • hash:key-value对格式

Redis与Memcache的区别?

RedisMemcache
数据操作方面支持list、set、sorted set、hash 等数据结构只支持简单的key-value存储,不支持枚举,不支持持久化和复制等功能
内存管理方面支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用Memecache把数据全部存在内存之中
线程方面Redis使用单线程的多路 IO 复用模型Memcached是多线程,非阻塞IO复用的网络模型
集群管理方面Redis 目前是原生支持 cluster 模式的Memcached没有原生的集群模式,需要依靠客户端来实现往集群中分片写入数据

Redis的持久化方案由哪些?

Redis持久化方案支持RDB和AOF,下面分别介绍下:
RDB持久化
RDB持久化可以使用save或bgsave,为了不阻塞主进程业务,一般都使用bgsave,流程分为以下几个步骤:

  • Redis 进程会 fork 出一个子进程(与父进程内存数据一致)。
  • 父进程继续处理客户端请求命令
  • 由子进程将内存中的所有数据写入到一个临时的 RDB 文件中。
  • 完成写入操作之后,旧的 RDB 文件会被新的 RDB 文件替换掉。

RDB持久化优点和缺点

优点缺点
RDB持久化文件小,Redis数据恢复时速度快如果业务场景很看重数据的持久性 (durability),那么不应该采用 RDB 持久化。如果 Redis 每 5 分钟执行一次 RDB 持久化,要是 Redis 意外奔溃了,那么最多会丢失 5 分钟的数据
子进程不影响父进程,父进程可以持续处理客户端命令RDB文件压缩会减小文件体积,但会对CPU有额外的消耗
子进程fork时采用copy-on-write方式,大多数情况下,没有太多的内存消耗,效率比较好。如果Redis此时写操作较多,可能导致额外的内存占用,甚至内存溢出

AOF持久化
Redis 执行 AOF持久化时,会将接收到的写命令追加到 AOF 文件的末尾,因此 Redis 只要对 AOF 文件中的命令进行回放,就可以将数据库还原到原先的状态。
Redis 不断将接收到的写命令追加到 AOF 文件中,导致 AOF 文件越来越大。过大的 AOF 文件会消耗磁盘空间,并且导致 Redis 重启时更加缓慢。
为了解决这个问题,在适当情况下,Redis 会对 AOF 文件进行重写,去除文件中冗余的命令,以减小 AOF 文件的体积。在重写 AOF 文件期间, Redis 会启动一个子进程,由子进程负责对 AOF 文件进行重写。
可以通过下面两个配置项,控制 Redis 重写 AOF 文件的频率:

- auto-aof-rewrite-min-size 64mb
- auto-aof-rewrite-percentage 100

这两个配置的作用:当 AOF 文件的体积大于 64MB,并且 AOF 文件的体积比上一次重写之后的体积大了至少一倍,那么 Redis 就会执行 AOF 重写。
AOF持久化优点和缺点

优点缺点
持久化频率高文件体积大
数据可靠性高,没有额外的内存或CPU消耗文件大导致服务恢复时读取文件时间较长,效率略低

Redis的集群方式有哪些?

Redis集群可以分为主从集群分片集群两类。
主从集群一般一主多从,主库用来写数据,从库用来读数据。结合哨兵,可以再主库宕机时从新选主,目的是保证Redis的高可用

分片集群是数据分片,我们会让多个Redis节点组成集群,并将16383个插槽分到不同的节点上。存储数据时利用对key做hash运算,得到插槽值后存储到对应的节点即可。因为存储数据面向的是插槽而非节点本身,因此可以做到集群动态伸缩。目的是让Redis能存储更多数据。

集群分类特点目的
主从集群一主多从,主库用来写数据,从库用来读数据 (哨兵模式)保证Redis的高可用
分片集群就是对数据分片,多个Redis节点组成集群,并将16383个插槽分到不同的节点上。存储数据时利用对key做hash运算,得到插槽值后存储到对应的节点即可让Redis能存储更多数据

相关文章:

  • redis五种数据类型内部构造
  • 基于Vue+Element UI+SSM+SpringCloud的员工管理系统
  • LeetCode刷题---二分查找巩固
  • 简单概述理解vue的MVVM模型
  • 24、Java——银行存款取款系统(对象+集合)
  • Python 集合
  • 【DS】5.二叉树大总结!
  • 攻防世界 web2
  • 机器人运动学标定:基于公垂线模型的指数积标定——减少标定参数,避免过度约束
  • 机器学习模型的集成方法总结:Bagging, Boosting, Stacking, Voting, Blending
  • 全志 Melis-4.0(rt-thread内核) 环境搭建与初步编译介绍
  • JUC 中的线程池入门(其实没有那么难)
  • 派福利!通过 Azure 零成本进入 CUDA 编程
  • 10.6日作业
  • Mybatis,动态代理方式的CRUD
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • 10个最佳ES6特性 ES7与ES8的特性
  • Android系统模拟器绘制实现概述
  • Centos6.8 使用rpm安装mysql5.7
  • Django 博客开发教程 8 - 博客文章详情页
  • Java 23种设计模式 之单例模式 7种实现方式
  • java8-模拟hadoop
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • React+TypeScript入门
  • SpringCloud集成分布式事务LCN (一)
  • tab.js分享及浏览器兼容性问题汇总
  • windows-nginx-https-本地配置
  • 关于springcloud Gateway中的限流
  • 诡异!React stopPropagation失灵
  • 浏览器缓存机制分析
  • 如何设计一个比特币钱包服务
  • 山寨一个 Promise
  • 使用common-codec进行md5加密
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 线性表及其算法(java实现)
  • 正则表达式
  • 正则表达式小结
  • Java性能优化之JVM GC(垃圾回收机制)
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 进程与线程(三)——进程/线程间通信
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • #define
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (11)MATLAB PCA+SVM 人脸识别
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (3)(3.5) 遥测无线电区域条例
  • (C语言)逆序输出字符串
  • (C语言)球球大作战
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库