0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入探究Redis存储原理

jf_78858299 来源:老李说架构之道 作者:梦海飞翔 2023-02-15 15:52 次阅读

Redis是用C语言开发的一个开源的高性能键值对(key-value)内存数据库。

Redis数据存储原理

** 存储结构如图:**

图片

redisDB、dict、dictht、dictEntry、RedisObject的存储结构关系如图:

图片

占的字节数:

dictEntry :16字节、RedisObject:12字节、sds:8字节 + 字符串长度

我们现在思考,如果一个10字节的key,需要多少存储空间呢?

16+12+8+10+1=47*2(exprires也需要同样的空间所以乘以倍数)

结论:在key设置的时候尽量的少的字节,避免空间的浪费;

内存清理方式:

  • 定期清理

    随机取样的方式,如果清理的比例大于25%,继续。如下图:

图片

  • 惰性删除:被动删除策略,访问时判断;

  • LFU

    volatile-lfu:对有过期时间的key采用LFU淘汰算法
    allkeys-lfu:对全部key采用LFU淘汰算法;

  • LRU

    volatile-lru:从设置了过期时间的数据集中,选择最近最久未使用的数据释放;
    allkeys-lru:从数据集中选择最近最久未使用的数据释放;

Redis数据固化方式

  • RDB快照方式

    手动方式:
    
                  save:阻塞当前Redis服务器,直到RDB过程完成为止;
    
          自动方式:
    
                   bgsave:fork子进程,持久化过程由子进程负责,完成后自动结束;
    
          配置项:save m n,m秒存在n次写入,触发bgsave  ;
    

    优点:

    对Redis性能影响低,二进制压缩文件体积小,数据恢复块;
    

    ** 缺点:**

    有数据丢失可能,备份文件版本兼容问题;
    

    ** 过程如图:**

图片* AOF快照方式

append only file,日志形式记录写入指令,实时持久化;**命令写入过程:**

图片

配置 含义 效率 数据安全
appendfsync=always 每次同步 全最高,最多丢失一个写入的数据
appendfsync=everysec 每秒同步 安全最折中,最多丢失1S的数据
appendfsync=no 关 闭 安全最低,最多上一次保存AOF文件到当前时刻的全部数据
  • AOF文件重写
    • fork子进程不影响父进程处理请求
    • 子进程双写,确保数据不丢失
    • 手动触发:调用bgrewriteaof命令
    • 被动触发:
      • auto-aof-rewrite-min-size
      • auto-aof-rewrite-percentage
      • aof_current_size
      • aof_base_size

过程如图:

图片

Redis重启恢复过程:

图片

注意:重启的过程中需要注意:如果开启RDB模型,未开启AOF模式,而在重启的时候开启AOF模式,这是RDB****的数据就会覆盖掉。

Redis可靠性保障

  • 主从模式
    启动时,全量同步Slave。增量同步,运行ID(Master启动时生成),同步给Slave,通过复制偏移量确定具体同步位置;
    

具体同步过程如下图所示:

图片

  • 哨兵模式
    不断地检查Master和Slave是否运作正常,发现故障通知管理员和客户端,自动主从切换,更新配置信息,客户端应用初始化时连接Sentinel获取节点信息;
    

哨兵模式架构:

图片

  • 集群模式

    无需Sentinel哨兵,支持水平扩容,自动迁移。

图片

缺点:

不支持批量操作,客户端路由,两次交互,存在性能问题,如图:

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7604

    浏览量

    136713
  • 数据存储
    +关注

    关注

    5

    文章

    970

    浏览量

    50900
  • 数据库
    +关注

    关注

    7

    文章

    3795

    浏览量

    64365
收藏 人收藏

    评论

    相关推荐

    如何使用Rust连接Redis

    Redis是一款快速、开源、键值存储数据库,被广泛应用于缓存、发布/订阅系统、定时任务等场景中。Rust提供了很多Redis的客户端库,本教程将会介绍如何使用Rust连接Redis,以
    的头像 发表于 09-19 16:22 2349次阅读

    Redis Stream应用案例

    ,还有一个很重要的能力是跨平台,甚至是作为一个嵌入式的存储系统跑在基于ARM的平台上,比如作者之前就宣称,Redis成功的跑在了“树莓派”上。试想一下,在IoT时代,会有无数随时随地可以接入互联网
    发表于 06-26 17:15

    深入探究Linux的设备树

    新版本linux设备树讲解!!ppt- 深入探究Linux的设备树_2017.8.14.pdf
    发表于 07-03 08:03

    深入探究Linux的设备树

    新版本linux设备树讲解!!ppt- 深入探究Linux的设备树_2017.8.14.pdf
    发表于 07-09 00:15

    redis概述

    REmote DIctionary Server(Redis)是一个基于key-value键值对的持久化数据库存储系统。redis和大名鼎鼎的Memcached缓存服务软件很像,但是redis
    发表于 07-17 07:38

    如何使得redis中的数据不再有

    ,原因是redis的持久化功能导致的,所谓的持久化就是redis在系统关闭的时候把数据存储到硬盘中,在下一次启动的时候,在从硬盘恢复到redis中,
    发表于 11-05 08:50

    电子狗工作原理深入探究

    电子狗工作原理深入探究,感兴趣的小伙伴们可以看看。
    发表于 07-28 09:32 17次下载

    简要分析Redis的特性

    的、键值存储数据库。它也被称为作为键值存储的字典服务器,这些键值不仅可以是字符串,还可以是hashes(哈希类型)、sets(集合)、lists(列表) 和sorted sets(有序集合)。 Redis
    发表于 10-11 15:21 0次下载
    简要分析<b class='flag-5'>Redis</b>的特性

    通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍

    本文将从Redis的基本特性入手,通过讲述Redis的数据结构和主要命令对Redis的基本能力进行直观介绍。之后在性能调优等方面进行更深入的介绍和指导。
    的头像 发表于 01-25 15:41 3962次阅读

    Redis为什么这么快!深入了解Redis的内存模型!

    Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。
    的头像 发表于 05-02 16:57 4402次阅读
    <b class='flag-5'>Redis</b>为什么这么快!<b class='flag-5'>深入</b>了解<b class='flag-5'>Redis</b>的内存模型!

    Redis混合存储产品与架构介绍

    摘要: 简介 Redis混合存储实例是阿里云自主研发的完全兼容Redis协议和特性的混合存储产品。通过将部分冷数据存储到磁盘,在保证绝大部分
    发表于 08-30 16:09 188次阅读

    关于redis中数据存储的机制解析

    不同于memcached等完全基于内存的缓存中间件,Redis同时还提供了持久化功能,这也是为什么Redis不仅可以用来做数据缓存还可以用来做数据存储,服务器节点宕机之后可以通过事先持久化的数据还原数据到某个时间点的状态。
    发表于 09-02 10:46 1124次阅读
    关于<b class='flag-5'>redis</b>中数据<b class='flag-5'>存储</b>的机制解析

    探究Redis 性能测试与监控

    很多人在安装部署好Redis后,就没有对Rredis的配置和部署等有效性和高可用性进行性能测试,最终导致上线出现缓存穿透、雪崩等现象,导致性能还是有问题,其实做为技术运维人员在部署好Redis后可以
    的头像 发表于 10-12 09:19 1435次阅读
    <b class='flag-5'>探究</b><b class='flag-5'>Redis</b> 性能测试与监控

    Redis架构演化之路

    这个架构非常简单,你的业务应用可以把 Redis 当做缓存来使用,从 MySQL 中查询数据,然后写入到 Redis 中,之后业务应用再从 Redis 中读取这些数据,由于 Redis
    的头像 发表于 08-03 16:54 609次阅读
    <b class='flag-5'>Redis</b>架构演化之路

    redis的原理和使用场景

    、消息队列、实时分析、排行榜和计数器等场景。本文将详细介绍Redis的原理和使用场景。 一、Redis的原理 Redis的原理主要包括以下几个方面: 内存数据库:Redis是一种内存数
    的头像 发表于 12-04 16:29 594次阅读