Redis相关知识

本文介绍了Redis,一个高性能的内存数据库,其支持丰富的数据结构、高持久化策略、分布式架构、事务处理以及多种缓存淘汰选项。重点讲解了Sentinel在实现Redis高可用性方面的角色和配置。
摘要由CSDN通过智能技术生成

Redis是一个开源的内存数据库,用于存储键值对。它支持多种数据结构,如字符串、哈希、列表、集合等。

Redis优势

  • 高性能:基于内存操作,读写速度快。
  • 数据结构丰富:支持多种数据结构,适用于不同场景。
  • 持久化:支持RDB快照和AOF日志两种持久化方式。
  • 支持事务:通过MULTI和EXEC命令实现事务操作。
  • 分布式:支持主从复制和Sentinel高可用。

Redis数据结构

  • 字符串(String)
  • 哈希(Hash)
  • 列表(List)
  • 集合(Set)
  • 有序集合(Sorted Set)

Redis持久化

Redis的持久化指的是将内存中的数据写入磁盘,以防止数据在服务器重启时丢失。主要有两种方式:RDB快照和AOF日志

  • RDB是定期将内存中的数据生成快照并写入磁盘,适用于备份和恢复。
  • AOF则是将每次写操作都追加到日志文件中,适用于实时的持久化。

Redis的数据过期策略

Redis使用两种过期策略:定时删除和惰性删除

  • 定时删除是指在设置键的过期时间时同时创建一个定时器,过期时删除键。
  • 惰性删除是在访问键时检查过期时间,过期时删除键。

Redis实现分布式

Redis实现分布式主要通过主从复制和Sentinel高可用机制。主从复制是指一个主节点可以有多个从节点,数据同步从主节点到从节点。Sentinel是用于监控和自动故障恢复的系统。

Redis事务

Redis事务是一组命令的集合,可以一次性、顺序地执行,保证原子性。通过MULTI和EXEC命令来开启和执行事务。

Redis的缓存淘汰策略

  • LRU(Least Recently Used):
    描述: 选择最近最少使用的数据进行淘汰。
    配置参数: maxmemory-policy 设置为 “volatile-lru” 或 “allkeys-lru”。
  • LFU(Least Frequently Used):
    描述: 选择最不经常使用的数据进行淘汰。
    配置参数: maxmemory-policy 设置为 “volatile-lfu” 或 “allkeys-lfu”。
  • TTL(Time To Live):
    描述: 选择具有最早过期时间的数据进行淘汰。
    配置参数: maxmemory-policy 设置为 “volatile-ttl”。
  • Random(随机选择):
    描述: 随机选择要淘汰的数据。
    配置参数: maxmemory-policy 设置为 “volatile-random”。
  • NoEviction(不淘汰):
    描述: 不执行淘汰操作,而是返回错误,告知写操作无法完成。
    配置参数: maxmemory-policy 设置为 “noeviction”。

Redis-sentinel

redis-sentinel 是 Redis 的一个组件,Redis 是一个开源的内存数据结构存储,用作数据库、缓存和消息代理。Redis Sentinel 的设计目的是为了提供 Redis 的高可用性。它监视 Redis 主节点及其副本,并在主节点失效时执行自动故障切换。

Redis Sentinel 的主要特性包括:

  • 监控: Sentinel 监视 Redis 实例,检查其健康状况和可用性。
  • 通知: 如果主或副本被认为不可用,Sentinel 可以通知管理员或其他系统。
  • 自动故障切换: 当主节点不可达时,Sentinel 可以将其中一个副本晋升为新的主节点,确保持续的服务。
  • 配置提供者: Sentinel 作为客户端的配置提供者,引导它们连接到当前的主节点。
  • 基于仲裁的决策: Sentinel 使用基于仲裁的方法进行决策,以避免出现分裂脑的情况。

使用 Redis Sentinel 提高了 Redis 部署的整体可靠性和可用性,使其适用于关键任务的应用程序。它特别适用于需要高可用性和容错性的场景,需要将停机时间最小化的情况。

Redis-sentinel配置

  1. 创建sentinel.conf文件
    配置指定监视的 Redis 实例、通知设置、故障切换策略
port 26379
sentinel monitor mymaster 127.0.0.1 6379 2
# 指定了需要多少失效时间,一个master才会被这个sentinel主观地认为是不可用的。单位是毫秒,默认为30秒
sentinel down-after-milliseconds mymaster 5000
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态
sentinel parallel-syncs mymaster 1
# 同一个sentinel对同一个master两次failover之间的间隔时间
#当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#当想要取消一个正在进行的failover所需要的时间。  
#当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了。
sentinel failover-timeout mymaster 10000

sentinel monitor mymaster 127.0.0.1 6379 2
sentinel monitor <master-group-name> <ip> <port> <quorum>
quorum(仲裁数):表示几个sentinel同意(投票)才能做出对 Redis 主节点状态的决策,确保可靠性和稳定性的关键。

这个例子中,配置了 Sentinel 监控名为 mymaster 的 Redis 主节点,当主节点在 5 秒内不可达时认为它失效,进行故障切换。

  1. 启动Sentinel进程
redis-sentinel /path/to/sentinel.conf

Sentinel 会根据配置文件中的信息开始监控和管理 Redis 实例。

  1. 检查sentinel进程
redis-cli -p 26379
sentinel master mymaster

这将连接到 Sentinel 进程的端口(默认为 26379)并检查名为 mymaster 的 Redis 主节点的信息。

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值