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

    文章

    7533

    浏览量

    128814
  • 数据存储
    +关注

    关注

    5

    文章

    897

    浏览量

    50589
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63375
收藏 人收藏

    评论

    相关推荐

    如何使用Rust连接Redis

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

    Python存储数据详解

    在Python开发中,数据存储、读取是必不可少的环节,而且可以采用的存储方式也很多,常用的方法有json文件、csv文件、MySQL数据库、Redis数据库以及Mongdb数据库等。1. json
    发表于 03-29 15:47

    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为什么这么快!深入了解Redis的内存模型!

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

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

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

    探究Redis 性能测试与监控

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

    Redis架构演化之路

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

    深入理解redis分布式锁

    深入理解redis分布式锁 哈喽,大家好,我是指北君。 本篇文件我们来介绍如何Redis实现分布式锁的演进过程,以及为什么不能直接用Setnx实现分布式锁。 1、分布式锁简介 分布式锁是控制分布式
    的头像 发表于 10-08 14:13 576次阅读
    <b class='flag-5'>深入</b>理解<b class='flag-5'>redis</b>分布式锁

    redis的原理和使用场景

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

    redis使用多线程处理操作命令

    Redis 多线程处理操作命令的实现和优势,帮助读者深入了解这一方面的知识。 首先,我们来了解一下 Redis 的基本概念和工作原理。Redis 是一个支持键值对
    的头像 发表于 12-05 10:25 280次阅读