Redis 4.x系列(二十一):Redis 数据迁移(单实例/集群间迁移)
可能因某些原因,需要移动或复制存储在 Redis 实例中的数据,就需要进行数据迁移。数据迁移是数据存储系统运维的一项非常重要的工作,更多概念见百度词条数据迁移。
Redis 的数据迁移主要依赖于主从复制和数据持久化功能。
可能因某些原因,需要移动或复制存储在 Redis 实例中的数据,就需要进行数据迁移。数据迁移是数据存储系统运维的一项非常重要的工作,更多概念见百度词条数据迁移。
Redis 的数据迁移主要依赖于主从复制和数据持久化功能。
Redis 服务上线后,日常的运维和管理同样非常重要。Redis 服务自带了使用最广泛的管理工具redis-cli
,在Linux环境下熟练使用该管理工具是非常必要的。
Redis 运维和管理还需要关注数据备份和恢复,数据迁移,对 Redis 实例内存指标的监控等。
Redis 部署个测试或者测开环境是非常简单的,但如果部署生产环境,则需要考虑更多的因素。
Redis 生产环境几乎都是部署在基于 Linux 操作系统的服务器上,需要考虑操作系统级别优化、还有客户端连接参数、Redis 安全、内存策略、日志配置、基准测试等。
这篇文章持续了一个多星期,查了 N 多资料,虽然只是几个优化参数的设置,但有必要深入理解其含义,涉及到对 Linux 底层相关概念的理解,挺费劲的,终于成章。
Redis 可存储数据量受限于内存容量,单实例存储了大量数据(通常 16G 以上)的处理能力就会遇到瓶颈, 在进行持久化或主从复制时, 会越来越多地出现诸如延迟等的问题。针对这种情况,就需要通过部署多节点的 Redis 集群来存储大量的数据,可以将数据集通过分区的方式分布到多个 Redis 主实例中。
Redis 从 3.0 版本开始支持 Redis Cluster(集群),提供了数据在 Redis 节点之间自动分片
在 Windows 上创建的文件,文件名是中文,上传到 Linux 后,中文名显示乱码,中文名的HTML文件无法加载。
原因是 Windows 的文件名中文编码默认是 GBK,而 Linux 默认的文件名编码是 UTF-8, 解决文件名中文乱码,需要进行转码
简单的复制机制并不能保证高可用,若仅仅只配置了master-slave复制,当 master无法提高服务时,整个 Redis 服务就停了,slave 无法接替 master 继续提供服务。
Redis 为实现高可用提供了基于复制机制 的 **Sentinel(哨兵)**模式解决方案。Redis Sentinel Documentation,Redis 的 Sentinel 文档
Redis 是在内存在存储数据,当服务器重启则会丢失内存中的数据。 为保证数据安全, Redis 提供了对数据持久化的支持,数据持久化是防止数据丢失的最好方法。
Redis 共有两个数据持久化方式:RDB
和AOF
。持久化功能有效地避免因进程退出造成数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。
Redis Persistence 官网,Redis persistence demystified(Redis 持久化揭秘),Redis 持久化 –中文译
为解决单个数据库可能存因系统崩溃、设备异常等单点故障导致整个应用系统无法提供服务的问题,数据库系统提供了复制技术来支持多存储服务的数据复制同步。
复制机制是读写分离的基础,也是是集群的基础。 Redis 也支持复制机制,可以将一个 Redis 服务器(master,主实例)中的数据复制到其他 Redis 服务器中(slave, 从实例)。
在 Java 中使用 Redis,基于 Spring Boot 框架。 关于 Spring Boot 集成 Redis,可阅读Spring Boot 2实践系列(十二):Spring Data Redis 集成详解和使用。
本篇主要演示 Spring Boot 提供的 RedisTemplate 对 Redis 功能特性的使用,主要是管道和事务的操作。各种数据类型的操作比较简单。
Redis 提供了丰富的 API 来操作数据,某些业务需求不只一个 API 可实现,但实现同一功能的不同的 API 在性能上是不一样的。
Redis 是内存级别单线程处理请求,对性能非常在乎。正确的使用 API 就显得尤为重要。