侧边栏壁纸
博主头像
拾荒的小海螺博主等级

只有想不到的,没有做不到的

  • 累计撰写 140 篇文章
  • 累计创建 15 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
OPS

Docker:Redis安装及使用场景

拾荒的小海螺
2024-04-26 / 0 评论 / 0 点赞 / 6 阅读 / 5928 字

1、简述

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

image-tndo.png

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。

0

评论区