1、简述
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
2、优点
使用 Redis 具有许多优点,并且适用于多种不同的使用场景。下面列出了 Redis 的主要优点:
- 高性能:
Redis 是基于内存的数据存储系统,因此读写速度非常快,适合需要低延迟和高吞吐量的应用程序。 - 支持丰富的数据结构:
Redis 支持丰富的数据结构,如字符串、哈希表、列表、集合、有序集合等,这使得 Redis 不仅仅是一个简单的键值存储,还可以支持更复杂的数据操作。 - 持久化支持:
Redis 提供了多种持久化方式,如 RDB(快照)和 AOF(日志),可以保证数据不会因应用重启或崩溃而丢失。 - 原子性操作:
Redis 支持原子性操作,可以保证复杂的操作在单个命令中完成,避免了并发问题。 - 多种应用场景:
Redis 可以用作缓存系统、消息队列、计数器、会话存储、实时排行榜等,灵活应用于各种不同的场景。 - 集群支持:
Redis 提供了多种集群实现方式,可以横向扩展,支持高可用和高可扩展性。 - 丰富的功能和工具支持:
Redis 社区提供了丰富的功能和工具支持,如 Redis Sentinel、Redis Cluster、Lua 脚本等,能够满足不同需求的应用场景。
3、安装
在终端中执行以下命令拉取 Redis 官方镜像:
docker pull redis
运行以下命令创建并启动 Redis 容器:
mkdir -p /data/redis/data
docker run -d -it --name redis -p 6379:6379 -v /data/redis/data:/data --restart=always --sysctl net.core.somaxconn=1024 redis:latest --requirepass "123456"
通过 docker exec 进入redis镜像:
docker exec -it redis redis-cli -h 127.0.0.1 -p 6379
Ip地址可以通过以下指令查询
docker inspect redis_s | grep IPAddress
查询结果:
[root@centos conf]# docker inspect redis | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "172.12.0.3",
"IPAddress": "172.12.0.3",
通过config get来获取当前是否有密码:
127.0.0.1:6370> config get requirepass
(error) NOAUTH Authentication required.
如果没有密码通过,config set requirepass 密码
设置一下,设置完成通过auth + 密码 指令进入:
127.0.0.1:6370> auth 123456
4、Redis 备份(热备和冷备)
热备和冷备的概念:
- 热备份:在 Redis 运行时进行备份操作,保证备份数据的实时性和一致性。
- 冷备份:在 Redis 停止运行时进行备份操作,适合对数据一致性要求不高或者用于紧急恢复的情况。
4.1 实现AOF热备份:
使用 Redis 的持久化功能:
Redis 提供了 RDB(快照)和 AOF(追加写入日志)两种持久化方式,可以通过配置定期保存快照或持续记录操作日志来实现热备份。
redis.conf配置设置:
appendonly yes #启动后appendfsync属性开始生效,有三个策略可选
appendfsync everysec #默认
- no:不主动执行fsync,仅仅 redis 负责将数据写入 os cache 就撒手不管了,然后后面 os 自己会时不时有自己的策略将数据刷入磁盘,不可控了。
- always:每次写入一条数据就执行一次 fsync,每次写入一条数据,立即将这个数据对应的写日志 fsync 到磁盘上去,性能非常非常差,吞吐量很低; 确保说 redis 里的数据一条都不丢,那就只能这样了。
- everysec:每隔一秒执行一次 fsync,每秒将 os cache 中的数据 fsync 到磁盘,这个最常用的,生产环境一般都这么配置,性能很高,QPS 还是可以上万的。
4.2 实现RDB冷备份:
直接复制 Redis 的持久化文件:
停止 Redis 服务,然后将 Redis 数据文件复制到备份目录。
redis.conf配置设置:
save 900 1 表示key操作1次低于10次的话, 会在900秒后(15分钟)进行备份更新一次
save 300 10 表示key操作了10次低于10000次的话, 会在300秒后(5分钟)进行备份更新一次
save 60 10000 表示key操作了10000次及以上的话, 会在60秒后(1分钟)进行备份更新一次
save 可以设置多个,就是多个snapshotting检查点,每到一个检查点,就会去check一下,是否有指定的key数量发生了变更,如果有就生成一个新的dump.rdb文件,默认设置3个检查点。
5、集群种类
Redis 支持多种集群实现方式,常见的有以下几种:
- 主从复制(Replication):
在 Redis 中可以设置主从复制,一个 Redis 主节点可以有多个从节点。主节点负责写操作,从节点复制主节点的数据,可以提供读操作和故障转移功能。 - Sentinel 哨兵模式:
Redis Sentinel 是 Redis 官方提供的用于高可用性(High Availability)的解决方案。Sentinel 是一个分布式系统,用于监视 Redis 主从节点的状态,当主节点发生故障时,自动将一个从节点升级为新的主节点。 - Redis Cluster:
Redis Cluster 是 Redis 提供的分布式解决方案,可以将数据分片存储在多个节点上,提供高性能和可伸缩性。Redis Cluster 能够自动进行数据分片、故障恢复和节点管理。 - 第三方集群解决方案:
除了 Redis 官方提供的集群方式外,还有一些第三方的 Redis 集群解决方案,如 Twemproxy、Codis 等,可以通过代理层实现 Redis 的分片和负载均衡。
使用 Docker Compose 配置 Redis 主从复制集群:
version: '3'
services:
redis-master:
image: redis
container_name: redis-master
ports:
- "6379:6379"
redis-slave:
image: redis
container_name: redis-slave
ports:
- "6380:6379"
command: redis-server --slaveof redis-master 6379
6、使用场景:
- 缓存系统:
Redis 最常见的用途之一是作为缓存系统,将热门数据存储在内存中,以提高应用程序的访问速度和性能。 - 会话存储:
将用户会话信息存储在 Redis 中,实现分布式应用程序的会话管理,支持快速访问和扩展。 - 消息队列:
使用 Redis 的列表数据结构实现简单的消息队列,支持生产者-消费者模型,用于异步任务处理、解耦系统组件等。 - 实时排行榜:
使用 Redis 的有序集合(Sorted Set)实现实时排行榜功能,支持快速的排名查询和更新。 - 计数器和统计信息:
使用 Redis 的计数器功能实现统计数据的实时更新和查询,如网站访问量、用户在线人数等。 - 发布/订阅系统:
Redis 提供了发布/订阅(Pub/Sub)功能,用于实现实时消息推送、事件通知等场景。 - 分布式锁:
使用 Redis 的分布式锁功能实现分布式系统的锁定机制,避免并发问题和资源竞争。 - 实时数据分析:
将实时生成的数据存储在 Redis 中,支持快速的数据分析和查询,如实时日志分析、用户行为分析等。
7、结论
通过本篇技术博客,你学习了如何使用 Docker 安装 Redis,并深入了解了 Redis 的备份策略(热备和冷备)以及不同的集群实现方式。Redis 是一个功能强大且灵活的内存数据库,可以用于各种不同的应用场景,希望本文能帮助你更好地理解和应用 Redis。
评论区