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

Redis详解

Redis详解

  • Redis
    • 一、基本信息
      • 基本特性
      • 数据结构详解
      • 特殊数据结构
      • 应用场景
      • 优缺点
    • 二、基础命令
      • String(字符串)
      • Hash(哈希)
      • List(列表)
      • Set(集合)
      • Sorted Set(有序集合)
    • 三、Redis为什么这么快?
    • 四、Redis的持久化机制
      • RDB持久化
      • AOF持久化
      • 混合持久化(Redis 4.0及以上版本)
    • 五、过期策略与内存淘汰策略
    • 六、Redis事务机制
    • 七、什么是缓存击穿、缓存穿透、缓存雪崩?
    • 八、缓存与数据库一致性问题
      • 产生原因
      • 方案
    • 九、集群
      • 主从复制模式(Master-Slave)
      • 哨兵模式(Sentinel)
      • Cluster模式

Redis

一、基本信息

基本特性

  1. 高性能:Redis的读写性能非常优异,其读的速度能达到110000次/s,写的速度是81000次/s。这得益于其基于内存的操作和单线程的读写模块。
  2. 多种数据结构支持:Redis支持丰富的数据类型,包括字符串(String)、列表(List)、哈希(Hash)、集合(Set)和有序集合(Sorted Set,简称zset)等。这些数据类型都支持多种操作,且这些操作都是原子性的。
  3. 数据持久化:Redis支持数据持久化,可以将内存中的数据保存到磁盘中,以便在服务器重启后能够恢复数据。Redis提供了两种持久化方式:RDB(快照)和AOF(追加文件)。
  4. 主从复制与集群:Redis支持主从复制,可以实现读写分离和数据的备份。此外,Redis还支持集群模式,可以实现数据的分布式存储和负载均衡。

数据结构详解

  1. 字符串(String):字符串是Redis中最基本的数据类型,可以存储任何形式的数据,如整数、浮点数、字符串等。字符串类型支持多种操作,如获取、设置、增加、减少、拼接和位运算等。
  2. 列表(List):列表是一个有序的字符串列表,可以在列表的两端进行插入和删除操作。列表类型适合用于存储一些按照顺序排列的数据,如任务队列、消息队列等。
  3. 哈希(Hash):哈希是一个键值对集合,可以存储多个字段和值。哈希类型适合用于存储一些具有结构化的数据,如用户信息、文章信息等。
  4. 集合(Set):集合是一个无序的字符串集合,支持求交集、并集和差集等操作。集合类型适合用于存储一些不需要按照顺序排列的数据,如用户关注列表、用户点赞列表等。
  5. 有序集合(Sorted Set,zset):有序集合是一个有序的字符串集合,每个成员都有一个分数,支持分数排序和范围查找等操作。有序集合类型适合用于存储一些按照权重或者评分进行排序的数据,如排行榜、热门文章等。

特殊数据结构

  1. 地理空间(Geospatial):地理空间用于存储地理位置信息和执行地理位置相关的操作。允许在Redis中存储地理位置坐标,并提供了一组强大的命令来执行距离计算、位置查询等操作。通过有序集合(Sorted Set)来实现
  2. HyperLogLogs(超级日志日志):用于估计数据集合中的唯一元素数量,尤其是当元素数量非常大时。能够以固定的空间复杂度来实现近似计数,而不需要为每个唯一元素存储一个计数器。
  3. 位图(Bitmaps):用于存储位的集合,每个位代表一个状态或标记。在Redis中,位图被实现为字符串类型,但它们可以以位为单位进行操作。

应用场景

  1. 缓存:Redis可以缓存数据的计算结果、页面内容、数据库查询结果等,通过提高数据访问速度和响应速度,提升系统性能和用户体验。
  2. 消息队列:Redis支持列表数据类型,可以将消息存储在列表中,并且支持阻塞式操作,可以实现消息队列的等待和通知机制。
  3. 分布式锁:Redis可以作为一种分布式锁的存储层,通过缓存锁信息和锁状态,实现分布式锁和并发控制。
  4. 计数器:Redis支持原子操作,可以实现计数器的自增和自减,支持高并发的计数操作。
  5. 数据库:Redis还可以作为一种轻量级的数据库使用,支持持久化和数据备份,可以用于存储少量的数据和应用场景。

优缺点

优点:

  • 读写性能优异。
  • 支持多种数据结构。
  • 支持数据持久化。
  • 支持主从复制和集群模式。

缺点:

  • 数据库容量受到物理内存的限制,不能用作海量数据的高性能读写。
  • 不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败。
  • 主机宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题。
  • 较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。

二、基础命令

String(字符串)

  1. 基本命令:

    • SET key value:设置键值对。
    • GET key:获取key对应的值。
    • APPEND key value:将value追加到key对应的值的末尾。
    • STRLEN key:返回key对应的值的长度。
  2. 自增/自减命令:

    • INCR key:将key对应的值自增1。
    • DECR key:将key对应的值自减1。
    • INCRBY key increment:将key对应的值增加increment。
    • DECRBY key decrement:将key对应的值减少decrement。
  3. 其他命令:

    • SETEX key seconds value:设置带有过期时间的键值对,单位为秒。
    • GETSET key value:获取key对应的值,并将key设为新的值value。
    • MSET key1 value1 key2 value2 …:设置多个键值对。
    • MGET key1 key2 …:获取多个key对应的值。
    • SETNX key value:当key不存在时,设置键值对。
    • MSETNX key1 value1 key2 value2 …:当所有给定的key都不存在时,设置多个键值对。
    • GETRANGE key start end:获取key对应的值的指定范围的子字符串。
    • SETRANGE key offset value:将key对应的值在指定偏移量offset处开始替换为value。
    • SETBIT key offset value:将key对应的值的指定偏移量offset处的位设置为value。

Hash(哈希)

  1. 基本命令:

    • HSET key field value:将哈希表key中的域field的值设置为value。
    • HGET key field:返回哈希表key中给定域field的值。
    • HMSET key field1 value1 field2 value2 …:将哈希表key中的多个域field的值设置为多个value。
    • HMGET key field1 field2 …:返回哈希表key中,一个或多个

相关文章:

  • 为AI聊天工具添加一个知识系统 之122 详细设计之63 实体范畴论和神经元元模型:命名法函子
  • MySQL 入门“鸡”础
  • 如何查看PostgreSQL的版本
  • Java常见设计模式(中):结构型模式
  • 375_C++_cloud手机推送,添加人脸告警信息到任务队列中,UploadAlarmPush是典型的工厂模式应用,为什么使用工厂模式完成这部分代码
  • Python入门12:面向对象的三大特征与高级特性详解
  • 视频字幕识别和翻译
  • Python爬虫系列教程之第十六篇:代理IP池构建与管理策略
  • Dify安装教程:Linux系统本地化安装部署Dify详细教程
  • 深度剖析数据中台架构图,铸造数字文明的基石
  • SQL进阶实战技巧:汽车转向次数分析 | 真实场景案例
  • 基于Matlab实现汽车远近光灯识别的详细步骤及代码示例
  • Jmeter的自动化测试实施方案
  • 蓝桥杯备考:贪心算法之矩阵消除游戏
  • 工程实践中常见的几种设计模式解析及 C++ 实现
  • AI工具集合
  • redis检测大key
  • 谈谈 ES 6.8 到 7.10 的功能变迁(2)- 字段类型篇
  • QSNCTF-WEB做题记录(2)
  • [021-22].Redis的线程模型原理分析
  • 证监会:2024年依法从严查办证券期货违法案件739件,作出处罚决定592件、同比增10%
  • 知名猎头公司创始人兼首席执行官庄华因突发疾病逝世,享年62岁
  • 河南省委常委会会议:坚持以案为鉴,深刻汲取教训
  • 最新研究:新型合成小分子可“精准杀伤”癌细胞
  • 孙卫东会见巴基斯坦驻华大使:支持巴印两国实现全面持久停火
  • 习近平同巴西总统卢拉共同会见记者