Redis05_应用问题

本文探讨了缓存穿透、缓存击穿和缓存雪崩问题的特点及解决方案,并重点讲解了基于Redis实现的分布式锁。针对分布式锁可能遇到的问题,如锁的故障、过期时间设置、锁的删除等,提出了相应的解决策略,包括设置过期时间、使用原子性操作和lua脚本确保锁的安全性。

缓存穿透问题:

特点: 查询太多新的没有的数据,多次请求mysql导致崩溃
在这里插入图片描述

缓存击穿问题:

特点: 多次请求热点key, 热点key正好过期,这个时候会大量请求直接访问数据库,导致崩溃

在这里插入图片描述

缓存雪崩问题:

特点: 同一时间内,导致大量key过期,同时请求数据库;

在这里插入图片描述

分布式锁问题:

问题描述: 单纯的Java API并不能提供分布式锁的能力,只能实现在同一机器上实现锁

分布式锁主流的实现方案:

  1. 基于数据库实现分布式锁
  2. 基于缓存(Redis等)
  3. 基于Zookeeper

每一种分布式锁解决方案都有各自的优缺点:

  1. 性能:redis最高
  2. 可靠性:zookeeper最高
    这里,我们就基于redis实现分布式锁。

实现:
注意:
问题1: 只设置一个锁,如果出现故障的情况, 会导致全部堵塞

解决 : 设置过期时间

问题2: 设置完锁之后,出现故障, 导致没有设置过期时间?

解决: 使用 set lock “OK” NX EX 30 命令实现 原子性操作
参数解释:
EX : 设置过期时间为秒数
PX: 设置过期时间为毫秒
NX: 当key不存在时,对其操作
XX: 当key存在时,对其操作

问题3: 当去删除锁的时候,过期时间正好到, 会释放掉刚刚抢到锁的机器的锁的问题?

解决: 将lock的值设置 为一个随机生成的uuid,如果uuid与之前相同, 进行删除, 如果不同不进行删除

问题4:
在这里插入图片描述

解决: 添加原子性操作, 使用lua脚本

请根据下述 Prometheus 采集得到的 redis 监控指标,给出 redis 集群建议的监控告警指标,并附上对应的告警表达式 redis_active_defrag_running、redis_allocator_active_bytesredis_allocator_allocated_bytes redis_allocator_frag_bytes redis_allocator_frag_ratio redis_allocator_resident_bytes redis_allocator_rss_bytes redis_allocator_rss_ratio redis_aof_base_size_bytes redis_aof_buffer_length redis_aof_current_rewrite_duration_sec redis_aof_current_size_bytes redis_aof_delayed_fsync redis_aof_enabled redis_aof_last_bgrewrite_status redis_aof_last_cow_size_bytes redis_aof_last_rewrite_duration_sec redis_aof_last_write_status redis_aof_pending_bio_fsync redis_aof_pending_rewrite redis_aof_rewrite_buffer_length redis_aof_rewrite_in_progress redis_aof_rewrite_scheduled redis_blocked_clients redis_client_recent_max_input_buffer_bytes redis_client_recent_max_output_buffer_bytes redis_cluster_connections redis_cluster_current_epoch redis_cluster_enabled redis_cluster_known_nodes redis_cluster_messages_received_total redis_cluster_messages_sent_total redis_cluster_my_epoch redis_cluster_size redis_cluster_slots_assigned redis_cluster_slots_fail redis_cluster_slots_ok redis_cluster_slots_pfail redis_cluster_state redis_cluster_stats_messages_auth_ack_sent redis_cluster_stats_messages_auth_req_received redis_cluster_stats_messages_fail_received redis_cluster_stats_messages_fail_sent redis_cluster_stats_messages_ping_received redis_cluster_stats_messages_ping_sent redis_cluster_stats_messages_pong_received redis_cluster_stats_messages_pong_sent redis_cluster_stats_messages_update_received redis_cluster_stats_messages_update_sent redis_commands_duration_seconds_total redis_commands_processed_total redis_commands_total redis_config_io_threads redis_config_maxclients redis_config_maxmemory redis_connected_clients redis_connected_slave_lag_seconds redis_connected_slave_offset_bytes redis_connected_slaves redis_connections_received_total redis_cpu_sys_children_seconds_total redis_cpu_sys_seconds_total redis_cpu_user_children_seconds_
最新发布
03-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值