redis-八股文
Redis 是一款开源的内存数据库,具有高性能、丰富的数据结构、多样的持久化机制和分布式特性,在缓存、消息队列、分布式锁等场景中广泛应用。下面总结 Redis 常见的八股文知识点,包括其核心特性、常见数据结构、持久化、事务、主从复制、集群模式、淘汰策略以及高可用性等。
Redis 核心特性高性能:Redis 的数据都存储在内存中,并采用单线程模型,操作通常只需微秒级的时间。多数据结构支持:提供字符串(String)、列表(List)、集合(Set)、有序集合(Sorted Set)、哈希(Hash)、位图(Bitmap)等多种数据类型,便于实现多种应用场景。持久化支持:支持 RDB 和 AOF 两种持久化方式,确保数据在宕机时不丢失。分布式特性:支持主从复制和 Redis Cluster 模式,可以实现数据分片和高可用。
数据结构和应用场景String:字符串类型,支持存储简单字符串、数字、序列化对象。常用于缓存对象、计数器等。List:双向链表结构,支持从头部和尾部插入数据。适合消息队列、任务列表等场景。Set:无序集合,不允许重复元素,支持交集、并集和差集。适合社交应用中的共同好 ...
redis-geo
Redis 的 Geo 命令来处理地理位置数据。Redis 的 Geo 命令集可以存储地理位置(经纬度)数据,并支持基于地理位置的操作,例如计算两点之间的距离、查找附近的地点等,非常适合用于实现地理位置相关的功能,比如地图定位、附近的商家等。使用场景
查找附近地点:如用户附近的商家、酒店、加油站等。
计算距离:计算两个地点之间的距离。
定位标记:保存多个地点的地理位置和信息。Redis Geo 基本命令和示例以下是 Redis Geo 命令的示例,包括存储地理位置数据、计算距离和查找附近地点等。
添加地理位置数据 - GEOADD使用 GEOADD 命令将地点的经纬度数据添加到 Redis 中。
将多个地点添加到 “places” 键下GEOADD places 116.403963 39.915119 “Tiananmen” # 天安门的经纬度GEOADD places 116.397128 39.916527 “ForbiddenCity” # 故宫的经纬度GEOADD places 116.414117 39.906647 “Wangfujing” # 王府井的经纬 ...
redis-hash
Redis 的 Hash 是一种键值对的集合,非常适合存储对象或结构化数据。每个 Hash 键下可以包含多个字段和值,结构类似于 Python 的字典或 JSON 对象。Hash 非常适合在 Redis 中存储用户信息、配置数据等场景。使用场景和示例以下是几个 Redis Hash 的典型使用场景和示例:
存储用户信息在社交应用中,可以使用 Hash 来存储用户的个人信息,如用户名、邮箱、年龄等。这样可以方便地对某个字段进行更新,而无需重新存储整个对象。示例:存储用户信息
添加用户信息HSET user:1001 username “Alice” email “alice@example.com“ age “30”HSET user:1002 username “Bob” email “bob@example ...
redis-set
在 Redis 中,Set 是一种无序集合数据结构,可以高效地存储唯一的值,并支持交集、并集、差集等操作,非常适合实现共同好友、共同关注等功能。以下是一些关于 Redis Set 的操作和示例:基本命令和用法1.添加元素
SADD将一个或多个元素添加到集合中,如果元素已存在,则会自动忽略。SADD friends:user_a “Alice” “Bob” “Charlie” “David”SADD friends:user_b “Charlie” “David” “Eve” “Frank”2.查看集合中的元素
SMEMBERS返回集合中的所有元素。SMEMBERS friends:user_aSMEMBERS friends:user_b3.求交集
SINTER找出两个集合的交集(共同好友)。SINTER friends:user_a friends:user_b4.求并集
SUNION返回两个集合的并集(所有好友)。SUNION friends:user_a friends:user_b5.求差集
SDIFF返回在第一个集合中有但在其他集合中没有的元素。SDIFF friends: ...
mysql
一、MySQL 的核心架构MySQL 的架构可以分为三层:
连接层:
主要负责与客户端的连接和认证,包括处理权限验证、安全性检查。连接层使用缓存池管理会话和连接。每个连接会话都为用户提供独立的查询环境。服务层:
处理所有逻辑操作,如 SQL 解析、查询优化、缓存、存储过程等。查询解析:接收 SQL 语句并将其转换为执行计划。查询优化:MySQL 使用查询优化器生成优化的执行计划。缓存管理:通过查询缓存提升查询速度。存储引擎 API:服务层通过 API 与底层存储引擎交互。存储引擎层:
MySQL 支持多种存储引擎 (如 InnoDB、MyISAM、Memory、CSV 等),提供不同的数据存储和管理方式。InnoDB 是 MySQL 默认的存储引擎,支持事务、行级锁和外键约束,非常适合高并发和数据一致性要求高的应用。二、MySQL 的存储引擎MySQL 提供多种存储引擎,可以根据需求选择不同的存储引擎。常见的存储引擎有:
InnoDB:
支持 ACID 事务和行级锁。使用多版本并发控制 (MVCC),确保数据的一致性和并发性。使用 UNDO LOG 和 REDO LOG 记录事务操作, ...
mysql事务
支持 ACID 事务和行级锁ACID 事务MySQL 中的事务 (Transaction) 是一组逻辑操作的集合,这些操作要么全都执行成功,要么全都失败回滚,以保证数据库的一致性。ACID 是事务的四大基本特性:
原子性 (Atomicity):事务中的所有操作是一个不可分割的原子单位,要么全部执行成功,要么全部回滚。在 MySQL 中,通过 UNDO LOG 实现回滚机制来支持原子性。
一致性 (Consistency):事务执行的前后,数据库状态必须保持一致,即约束和规则必须得到满足。InnoDB 使用锁机制和外键约束确保一致性。
隔离性 (Isolation):并发事务之间互不干扰,MySQL 提供了不同的隔离级别以控制并发问题,如脏读、不可重复读和幻读。通过行级锁和 MVCC 支持高隔离性。
持久性 (Durability):事务提交后,结果是永久性的,即使系统崩溃或断电,数据也不会丢失。InnoDB 通过 REDO LOG 和事务日志的写盘操作来确保数据持久性。
行级锁MySQL InnoDB 引擎使用行级锁 (Row-level Lock) 而不是表级锁,以提高并发性能 ...
gpu-export-2
M-29 gpu监控:prometheus方案详解gpu监控:prometheus方案详解本文档基于开源项目nvidia_gpu_exporter实现gpu监控参考文档:https://zhuanlan.zhihu.com/p/544321724?utm_id=0
常用监控项统计周期:#按显卡uuid匹配,查询指定周期内所有gpu的平均使用率avg(avg_over_time(nvidia_smi_utilization_gpu_ratio{uuid=~”.*”}[1d:1d]))
#按job任务名匹配,查询指定周期内所有显卡显存的平均使用率avg(avg_over_time(nvidia_smi_memory_used_bytes{job=~”zj_gpu”}[1d:1d])/1024/1024/1024)/32*100
常用监控项统计实时:nvidia_smi_utilization_gpu_ratio: GPU利用率,单位是百分比:avg(nvidia_smi_utilization_gpu_ratio{uuid ...
gpu-export
gpu-exporter+prometheus实现gpu监控
目录
gpu-exporter+prometheus实现gpu监控
一、在gpu服务器上部署nvidia_gpu_exporter
1、获取nvidia_gpu_exporter
2、运行nvidia_gpu_exporter
3、检测监控数据
二、接入prometheus监控
三、常用监控指标
四、metrics接口信息示例
gpu-exporter+prometheus实现gpu监控本文档基于开源项目nvidia_gpu_exporter实现gpu监控一、在gpu服务器上部署nvidia_gpu_exporter1、获取nvidia_gpu_exporterwget https://github.com/utkuozdemir/nvidia_gpu_exporter/releases/download/v1.2.0/nvidia_gpu_exporter_1.2.0_linux_x86_64.tar.gz2、运行nvidia_gpu_exportertar xf nvidia_gpu_exporter_1.2.0_l ...
cpu指标
当 CPU 使用率高时,通常意味着系统的计算资源被大量占用。为了进一步理解 CPU 高使用率的情况,以下是一些关键指标及其解释,这些指标可以通过工具如 top、htop、mpstat 等获得。
CPU 使用率的分类CPU 使用率通常按不同的时间类型进行分类:
us (user CPU usage):用户空间的 CPU 使用时间,表示处理用户进程(非内核进程)的时间。包括运行应用程序、服务等。例如,运行一个 Python 程序时,它使用的 CPU 时间属于用户 CPU 时间。
高 us 时间:意味着用户态的程序占用了大量 CPU 资源,通常是由计算密集型任务引起的,如编译、压缩或运行计算密集型的服务(如数据库、Web 服务等)。
sy (system CPU usage):系统空间的 CPU 使用时间,表示内核态的时间。这部分时间主要用于执行操作系统内核中的代码,处理系统调用、硬件中断等。
高 sy 时间:意味着内核操作占用了大量 CPU,可能与频繁的系统调用、进程调度、I/O 操作或设备驱动程序有关。
ni (nice CPU usage):用于被调整了优先级的进程,通 ...
atop
atop 是一个高级的系统监控工具,类似于 top,但功能更为强大。它不仅能监控 CPU、内存、磁盘、网络等的使用情况,还能保存历史记录以便以后查看。它对性能瓶颈的分析尤其有用。
安装 atop不同的 Linux 发行版有不同的安装方式。在 Ubuntu/Debian 系统上:bash复制代码sudo apt install atop在 CentOS/RedHat 系统上:bash复制代码sudo yum install atop在 Fedora 系统上:bash复制代码sudo dnf install atop在 Arch Linux 系统上:bash复制代码sudo pacman -S atop
启动 atop启动 atop 很简单,只需运行:bash复制代码sudo atopatop 会实时显示系统各项资源的使用情况,并每 10 秒刷新一次(默认刷新间隔)。可以通过命令行参数来定制其行为。
atop 显示的信息顶部的全局信息:
PRC:显示系统上的进程信息,包括每秒创建的进程和上下文切换数量。
CPU:显示 CPU 使用情况。分为用户空间、系统空间、硬件 ...