当前位置:首页 > 数码 > Redis-键值对存储数据库的深入探索-一文搞懂 (redis的五种数据类型)

Redis-键值对存储数据库的深入探索-一文搞懂 (redis的五种数据类型)

admin7个月前 (05-02)数码82

简介

Redis(REmote DIctionary Server,远程字典服务器)是一个开源的、高性能的键值对(key-value)存储系统,是跨平台的非关系型数据库。它最初是为了解决Merzia公司旗下网站LLOOGG的实时统计需求而开发的,后来由于其出色的性能和广泛的应用,成为了一种流行的NoSQL数据库。 一文搞懂

历史

2008年: LLOOGG网站实时统计系统发布 2009年: Redis 1.0版本发布 2010年: VMware公司赞助Redis开发 2013年: Pivotal成为Redis的主要赞助商

功能

Redis是一个内存中数据存储系统,提供了丰富的功能,包括: 支持多种数据结构: 字符串、散列、列表、集合、有序集合等 高性能: 每秒可读写超过10万个键值 高可用性: 通过Redis哨兵和自动分区实现 持久化机制: 提供RDB和AOF两种持久化方式 发布/订阅功能: 支持实时消息通信

排名和流行度

根据DB-Engines网站,Redis在键值对存储数据库管理系统中排名第一。 根据StackOverflow年度开发人员调查,Redis连续4年获得最受欢迎的键值对存储数据库称号。

应用

Redis因其优秀的功能和性能,广泛应用于以下场景: 缓存和会话管理 消息队列 实时分析 社交媒体平台

编程语言支持

Redis提供了多种编程语言的API,包括: C C++ Go Java JavaScript Perl Python Ruby

特点

Redis具有以下特点,使其成为热门的NoSQL数据库: 丰富的数据结构: 适应不同场景下的存储需求 内存存储与持久化: 提供高性能和数据持久性 高并发性: 支持高并发读写操作 高可用性: 通过主从同步和自动分区实现 可扩展性: 通过分片和集群实现 开源和社区支持: 活跃的社区提供支持和贡献

主从同步

Redis支持主从同步,实现数据的冗余和高可用性。主从同步过程如下: 1. 从节点执行slaveof命令与主节点建立连接 2. 主节点向从节点发送所有数据,进行一次完整备份 3. 主节点持续发送新的数据变动命令给从节点,从节点实时同步

持久化

Redis提供了RDB和AOF两种持久化方式: RDB(Redis数据库): 将Redis数据库中的数据以快照的方式写入磁盘 AOF(追加文件): 将Redis数据库的所有写操作命令追加到一个文件中

总结

Redis是一个强大的键值对存储系统,具有丰富的功能和出色的性能。它广泛应用于各种场景,并得到了众多程序员和IT公司的支持和推广。凭借其开源社区和持续的开发,Redis将继续作为NoSQL数据库领域的领导者。

Redis持久化的几种方式——RDB深入解析

点击上方“Java中文社群”,选择“设为星标”终身学习者,以编程为乐!Redis 的读写都是在内存中,所以它的性能较高,但在内存中的数据会随着服务器的重启而丢失,为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化。 Redis 持久化也是 Redis 和 Memcached 的主要区别之一,因为 Memcached 不具备持久化功能。 1.持久化的几种方式Redis 持久化拥有以下三种方式:快照方式(RDB, Redis DataBase)将某一个时刻的内存数据,以二进制的方式写入磁盘;文件追加方式(AOF, Append Only File),记录所有的操作命令,并以文本的形式追加到文件中;混合持久化方式,Redis 4.0 之后新增的方式,混合持久化是结合了 RDB 和 AOF 的优点,在写入的时候,先把当前的数据以 RDB 的形式写入文件的开头,再将后续的操作命令以 AOF 的格式存入文件,这样既能保证 Redis 重启时的速度,又能简单数据丢失的风险。 因为每种持久化方案,都有特定的使用场景,让我们先从 RDB 持久化说起吧。 简介RDB(Redis DataBase)是将某一个时刻的内存快照(Snapshot),以二进制的方式写入磁盘的过程。 3.持久化触发RDB 的持久化触发方式有两类:一类是手动触发,另一类是自动触发。 1)手动触发手动触发持久化的操作有两个:save 和 bgsave ,它们主要区别体现在:是否阻塞 Redis 主线程的执行。 ① save 命令在客户端中执行 save 命令,就会触发 Redis 的持久化,但同时也是使 Redis 处于阻塞状态,直到 RDB 持久化完成,才会响应其他客户端发来的命令,所以在生产环境一定要慎用。 save 命令使用如下:从图片可以看出,当执行完 save 命令之后,持久化文件 的修改时间就变了,这就表示 save 成功的触发了 RDB 持久化。 save 命令执行流程,如下图所示:② bgsave 命令bgsave(background save)既后台保存的意思, 它和 save 命令最大的区别就是 bgsave 会 fork() 一个子进程来执行持久化,整个过程中只有在 fork() 子进程时有短暂的阻塞,当子进程被创建之后,Redis 的主进程就可以响应其他客户端的请求了,相对于整个流程都阻塞的 save 命令来说,显然 bgsave 命令更适合我们使用。 bgsave 命令使用,如下图所示:bgsave 执行流程,如下图所示:2)自动触发说完了 RDB 的手动触发方式,下面来看如何自动触发 RDB 持久化?RDB 自动持久化主要来源于以下几种情况。 ① save m nsave m n 是指在 m 秒内,如果有 n 个键发生改变,则自动触发持久化。 参数 m 和 n 可以在 Redis 的配置文件中找到,例如, save601 则表明在 60 秒内,至少有一个键发生改变,就会触发 RDB 持久化。 自动触发持久化,本质是 Redis 通过判断,如果满足设置的触发条件,自动执行一次 bgsave 命令。 注意:当设置多个 save m n 命令时,满足任意一个条件都会触发持久化。 例如,我们设置了以下两个 save m n 命令:save 60 10save 600 1当 60s 内如果有 10 次 Redis 键值发生改变,就会触发持久化;如果 60s 内 Redis 的键值改变次数少于 10 次,那么 Redis 就会判断 600s 内,Redis 的键值是否至少被修改了一次,如果满足则会触发持久化。 ② flushallflushall 命令用于清空 Redis 数据库,在生产环境下一定慎用,当 Redis 执行了 flushall 命令之后,则会触发自动持久化,把 RDB 文件清空。 执行结果如下图所示:③ 主从同步触发在 Redis 主从复制中,当从节点执行全量复制操作时,主节点会执行 bgsave 命令,并将 RDB 文件发送给从节点,该过程会自动触发 Redis 持久化。 4.配置说明合理的设置 RDB 的配置,可以保障 Redis 高效且稳定的运行,下面一起来看 RDB 的配置项都有哪些?RDB 配置参数可以在 Redis 的配置文件中找见,具体内容如下:# RDB 保存的条件save 9001save save # bgsave 失败之后,是否停止持久化数据到磁盘,yes 表示停止持久化,no 表示忽略错误继续写文件。 stop-writes-on-bgsave-error yes# RDB 文件压缩rdbcompression yes# 写入文件和读取文件时是否开启 RDB 文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。 rdbchecksum yes# RDB 文件名dbfilename # RDB 文件目录dir ./其中比较重要的参数如下列表:① save 参数它是用来配置触发 RDB 持久化条件的参数,满足保存条件时将会把数据持久化到硬盘。 默认配置说明如下:save 900 1:表示 900 秒内如果至少有 1 个 key 值变化,则把数据持久化到硬盘;save 300 10:表示 300 秒内如果至少有 10 个 key 值变化,则把数据持久化到硬盘;save 60 :表示 60 秒内如果至少有 个 key 值变化,则把数据持久化到硬盘。 ② rdbcompression 参数它的默认值是 yes 表示开启 RDB 文件压缩,Redis 会采用 LZF 算法进行压缩。 如果不想消耗 CPU 性能来进行文件压缩的话,可以设置为关闭此功能,这样的缺点是需要更多的磁盘空间来保存文件。 ③ rdbchecksum 参数它的默认值为 yes 表示写入文件和读取文件时是否开启 RDB 文件检查,检查是否有无损坏,如果在启动是检查发现损坏,则停止启动。 5.配置查询Redis 中可以使用命令查询当前配置参数。 查询命令的格式为:configgetxxx ,例如,想要获取 RDB 文件的存储名称设置,可以使用 configgetdbfilename ,执行效果如下图所示:查询 RDB 的文件目录,可使用命令 configgetdir ,执行效果如下图所示:6.配置设置设置 RDB 的配置,可以通过以下两种方式:手动修改 Redis 配置文件;使用命令行设置,例如,使用 configsetdir/usr/data 就是用于修改 RDB 的存储目录。 注意:手动修改 Redis 配置文件的方式是全局生效的,即重启 Redis 服务器设置参数也不会丢失,而使用命令修改的方式,在 Redis 重启之后就会丢失。 但手动修改 Redis 配置文件,想要立即生效需要重启 Redis 服务器,而命令的方式则不需要重启 Redis 服务器。 小贴士:Redis 的配置文件位于 Redis 安装目录的根路径下,默认名称为 。 文件恢复当 Redis 服务器启动时,如果 Redis 根目录存在 RDB 文件 ,Redis 就会自动加载 RDB 文件恢复持久化数据。 如果根目录没有 文件,请先将 文件移动到 Redis 的根目录。 验证 RDB 文件是否被加载Redis 在启动时有日志信息,会显示是否加载了 RDB 文件,我们执行 Redis 启动命令:src/redis-server ,如下图所示:从日志上可以看出, Redis 服务在启动时已经正常加载了 RDB 文件。 小贴士:Redis 服务器在载入 RDB 文件期间,会一直处于阻塞状态,直到载入工作完成为止。 优缺点1)RDB 优点RDB 的内容为二进制的数据,占用内存更小,更紧凑,更适合做为备份文件;RDB 对灾难恢复非常有用,它是一个紧凑的文件,可以更快的传输到远程服务器进行 Redis 服务恢复;RDB 可以更大程度的提高 Redis 的运行速度,因为每次持久化时 Redis 主进程都会 fork() 一个子进程,进行数据持久化到磁盘,Redis 主进程并不会执行磁盘 I/O 等操作;与 AOF 格式的文件相比,RDB 文件可以更快的重启。 2)RDB 缺点因为 RDB 只能保存某个时间间隔的数据,如果中途 Redis 服务被意外终止了,则会丢失一段时间内的 Redis 数据;RDB 需要经常 fork() 才能使用子进程将其持久化在磁盘上。 如果数据集很大,fork() 可能很耗时,并且如果数据集很大且 CPU 性能不佳,则可能导致 Redis 停止为客户端服务几毫秒甚至一秒钟。 9.禁用持久化禁用持久化可以提高 Redis 的执行效率,如果对数据丢失不敏感的情况下,可以在连接客户端的情况下,执行 configsetsave 命令即可禁用 Redis 的持久化,如下图所示:10.小结通过本文我们可以得知,RDB 持久化分为手动触发和自动触发两种方式,它的优点是存储文件小,Redis 启动时恢复数据比较快,缺点是有丢失数据的风险。 RDB 文件的恢复也很简单,只需要把 RDB 文件放到 Redis 的根目录,在 Redis 启动时就会自动加载并恢复数据。 11.思考题如果 Redis 服务器 CPU 占用过高,可能是什么原因导致的?欢迎各位读者在评论区,写下自己的答案。 【END】关注下方二维码,订阅更多精彩内容老王著转发更佳稀罕作者Redis持久化的几种方式——RDB深入解析标签:创建读取文件选择手动err注意验证备份文件编程

怎么实现redis的数据库的缓存(redis实现缓存的流程)

大致为两种措施:

一、脚本同步:

1、自己写脚本将数据库数据写入到redis/memcached。

2、这就涉及到实时数据变更的问题(mysqlrowbinlog的实时分析),binlog增量订阅Alibaba的canal,以及缓存层数据丢失/失效后的数据同步恢复问题。

二、业务层实现:

1、先读取nosql缓存层,没有数据再读取mysql层,并写入数据到nosql。

2、nosql层做好多节点分布式(一致性hash),以及节点失效后替代方案(多层hash寻找相邻替代节点),和数据震荡恢复了。

redis实现数据库缓存的分析:

对于变化频率非常快的数据来说,如果还选择传统的静态缓存方式(Memocached、FileSystem等)展示数据,可能在缓存的存取上会有很大的开销,并不能很好的满足需要,而Redis这样基于内存的NoSQL数据库,就非常适合担任实时数据的容器。

但是往往又有数据可靠性的需求,采用MySQL作为数据存储,不会因为内存问题而引起数据丢失,同时也可以利用关系数据库的特性实现很多功能。所以就会很自然的想到是否可以采用MySQL作为数据存储引擎,Redis则作为Cache。

MySQL到Redis数据复制方案,无论MySQL还是Redis,自身都带有数据同步的机制,比较常用的MySQL的Master/Slave模式,就是由Slave端分析Master的binlog来实现的,这样的数据复制其实还是一个异步过程,只不过当服务器都在同一内网时,异步的延迟几乎可以忽略。那么理论上也可用同样方式,分析MySQL的binlog文件并将数据插入Redis。

因此这里选择了一种开发成本更加低廉的方式,借用已经比较成熟的MySQLUDF,将MySQL数据首先放入Gearman中,然后通过一个自己编写的PHPGearmanWorker,将数据同步到Redis。比分析binlog的方式增加了不少流程,但是实现成本更低,更容易操作。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Redis

“Redis-键值对存储数据库的深入探索-一文搞懂 (redis的五种数据类型)” 的相关文章

一站式-满足您的所有-解决方案-需求-Redis-Redis (一站式满足您的资金需求让您用款无忧)

一站式-满足您的所有-解决方案-需求-Redis-Redis (一站式满足您的资金需求让您用款无忧)

Introduction Redis is an efficient in-memory database designed to store data invarious formats, s...

大厂Redis重试战略剖析-深化摸索行业通常 (大厂redis面试题)

大厂Redis重试战略剖析-深化摸索行业通常 (大厂redis面试题)

受网络和运转环境影响,运行程序或许遇到临时性缺点,如刹时网络颤抖、服务临时无法用、服务忙碌造成超时等。 智能重试机制可大幅防止此类缺点,保证操作成功口头。 1引发临时性缺点的要素...

安装并配置-Kubernetes-集群 (安装并配置mysql的实验总结)

安装并配置-Kubernetes-集群 (安装并配置mysql的实验总结)

日常开发中,基于自然支持散布式锁,大家在线上散布式名目中都经常使用过Redis锁。本文重要针对日常开发中加锁环节中某些意外场景启动解说与剖析。本文解说示例代码都在名目目录下 RedisLo...

Redis中分布式锁的防死锁机制 (redis中文网)

Redis中分布式锁的防死锁机制 (redis中文网)

分布式锁在分布式系统中是一种常见的需求。它用于防止对共享资源的并发访问,确保数据一致性和可靠性。在 Redis 中实现分布式锁可以通过使用 SETNX(SET if Not eXists)命令来尝...

排查与处置指南-Redis大Key危害 (排查与处置指的是什么)

排查与处置指南-Redis大Key危害 (排查与处置指的是什么)

这是一位同窗往年秋招参与得物一面遇到的疑问,完整面经如下: 这个疑问在面试中还是比拟容易遇到的,尤其是在调查性能优化相关常识点的时刻。 通常状况下,问了bigkey(大Key)还会继续...

Redis-使用哈希槽而非一致性哈希的原因 (redis淘汰策略有哪些)

Redis-使用哈希槽而非一致性哈希的原因 (redis淘汰策略有哪些)

引言 在分布式系统中,数据分片和负载均衡是至关重要的。哈希槽和一致性哈希两种方法都可以实现这些目标,但它们各有优缺点。本文将讨论为什么在某些情况下使用哈希槽而不是一致性哈希。 哈希槽 哈希...

引发业界震荡-Redis叛逃开源-得罪了 (引发业界震荡的因素)

引发业界震荡-Redis叛逃开源-得罪了 (引发业界震荡的因素)

Redis 许可变更:开源界的巨石 导言 近来,内存数据库供应商 Redis 宣布了一项重大变更,该变更将在开源界掀起轩然大波。Redis 将转向双许可模式,并采用更严格的许可条款。此举引起了社区...

上古程序猿推戴经常使用Redis的执著理由 (上古教程)

上古程序猿推戴经常使用Redis的执著理由 (上古教程)

最近,在知乎上看到这样一个疑问: 有些上古程序猿不时保持推戴经常使用怎样办? 终究用不用Redis?为什么用?怎样用?让咱们看看网友怎样说…… @灵剑...