当前位置: 首页 > news >正文

Redis 完整指南:命令与原理详解

目录

    • 1. Redis 概述
      • 什么是 Redis
      • Redis 应用场景
    • 2. 安装与启动
      • Redis 安装步骤
        • 源代码安装
        • 使用包管理器安装(以 Ubuntu 为例)
      • 编译与启动命令
      • 编客户端连接
    • 3. Redis 存储结构
      • KV 存储结构
      • 数据结构类型
        • String(字符串)
        • List(列表)
        • Hash(哈希)
        • Set(集合)
        • Zset(有序集合)
    • 4. 基础命令
      • String 相关命令
      • List 相关命令
      • Hash 相关命令
      • Set 相关命令
      • Zset 相关命令
    • 5. Redis 高级应用
      • 分布式锁
      • 位运算
      • 累加器
      • 阻塞队列与异步消息队列
      • 分布式定时器
    • 6. Redis 使用场景
      • 朋友圈点赞与评论
      • 购物车实现
      • 抽奖应用
      • 时间窗口限流
      • 百度热榜与延时队列
      • 参考

在现代应用开发中,Redis 作为一个高性能的键值存储数据库,凭借其卓越的性能和丰富的数据结构,广泛应用于缓存、消息队列、实时分析等多个领域。

1. Redis 概述

什么是 Redis

Redis(Remote Dictionary Server)是一个开源的、高性能的键值对(Key-Value)存储数据库,广泛用于数据库、缓存和消息代理。由 Salvatore Sanfilippo 于 2009 年创建,Redis 具备以下显著特点:

  • 内存存储:所有数据存储在内存中,提供极高的读写速度。
  • 多种数据结构:支持字符串、列表、哈希、集合、有序集合等多种数据类型,满足不同的应用需求。
  • 持久化:提供 RDB 和 AOF 两种持久化机制,确保数据在服务器重启后不丢失。
  • 原子操作:所有操作都是原子性的,支持事务处理。
  • 丰富的功能:包括发布/订阅、Lua 脚本、主从复制、哨兵和集群模式,适应各种复杂应用场景。

Redis 应用场景

Redis 的高性能和多样的数据结构使其适用于多种场景,包括但不限于:

  • 缓存:缓存数据库查询结果、会话数据等,提升系统性能。
  • 消息队列:通过列表或发布/订阅模式实现消息队列功能。
  • 排行榜和计数器:利用有序集合和计数器功能实现实时排行榜和计数器。
  • 实时分析:进行实时数据分析和统计,如网站访问量、在线用户数等。
  • 分布式锁:在分布式系统中实现锁机制,保证资源的安全访问。
  • 持久化存储:在需要高性能读写且数据量较小的场景下作为主数据存储。

2. 安装与启动

Redis 安装步骤

Redis 的安装方式多种多样,常见的有源代码安装和使用包管理器安装。以下以源代码安装和 Ubuntu 系统下的包管理器安装为例,详细介绍 Redis 的安装步骤。

源代码安装
  1. 下载源码

    wget http://download.redis.io/redis-stable.tar.gz
    tar xzf redis-stable.tar.gz
    cd redis-stable
    
  2. 编译

    make
    make test  # 可选,运行测试确保编译正确
    sudo make install
    
  3. 配置
    Redis 默认配置文件为 redis.conf,可以复制一份进行修改:

    cp redis.conf /etc/redis.conf
    # 以管理员身份登录
    sudo -i
    cd /etc/redis/
    #备份
    cp redis.conf redis.conf.copy
    
  4. 启动 Redis

    redis-server /etc/redis.conf
    
使用包管理器安装(以 Ubuntu 为例)
  1. 更新包列表

    sudo apt update
    
  2. 安装 Redis

    sudo apt install redis-server
    
  3. 启动 Redis 服务

    sudo systemctl start redis
    sudo systemctl enable redis  # 设置开机自启动
    

编译与启动命令

编译 Redis 源代码的主要命令如下:

  • 编译

    make
    
  • 运行测试(可选):

    make test
    
  • 安装

    sudo make install
    
  • 配置

    sudo vim /etc/redis/redis.conf
    
    # 守护进程,修改为yes后即后台运行
    daemonize yes
    # 监听的地址,默认127.0.0.1,会导致只能在本地访问,修改为0.0.0.0则可以在任意IP范文
    bind 0.0.0.0
    # 密码,设置后访问redis必须输入密码
    requirepass 123456
    # 监听端口号,默认6379
    port 6379
    #重启 redis
    sudo service redis restart
    

启动 Redis 服务器的命令:

redis-server /path/to/redis.conf

常用选项包括:

  • 后台运行
    redis.conf 中设置 daemonize yes,或使用命令行参数 --daemonize yes

  • 指定配置文件

    redis-server /etc/redis/redis.conf
    

停止 Redis 服务器:

redis-cli shutdown

编客户端连接

redis-cli [options] [commonds]
-h 指定要连接的redis节点的IP地址,默认是127.0.0.1
-p 指定要连接的redis节点的端口,默认是6379
-a 指定redis的访问密码 #例如
redis-cli -h 127.0.0.1 -a 123456

3. Redis 存储结构

Redis 支持多种数据结构,每种数据结构适用于不同的应用场景。以下是 Redis 的主要存储结构详解。

KV 存储结构

Redis 的基本数据模型是键值对(Key-Value)。每个键都是唯一的,可以关联不同类型的值。键通常是字符串,值可以是多种数据类型,包括字符串、列表、哈希、集合和有序集合。
在这里插入图片描述

数据结构类型

String(字符串)
  • 描述:最基本的 Redis 数据类型,类似于键值对中的值。
  • 特点
    • 可以包含任何类型的数据,如文本、数字、二进制数据。
    • 最大值为 512 MB。
  • 常用命令
    • SET key value:设置键的值。
    • GET key:获取键的值。
    • INCR key:将键的值递增。

示例

SET name "Alice"
GET name  # 返回 "Alice"
List(列表)
  • 描述:一个有序的字符串列表,可以从两端推入或弹出元素。
  • 特点
    • 支持队列和栈操作。
    • 双端链表实现,适合频繁的头尾操作。
  • 常用命令
    • LPUSH key value:在列表左侧推入一个值。
    • RPUSH key value:在列表右侧推入一个值。
    • LPOP key:弹出左侧第一个值。
    • RPOP key:弹出右侧第一个值。

示例

LPUSH mylist "a"
RPUSH mylist "b"
LRANGE mylist 0 -1  # 返回 ["a", "b"]
Hash(哈希)
  • 描述:键对应的值是一个键值对集合,类似于对象或字典。
  • 特点
    • 适合存储对象的属性。
    • 内存占用较少。
  • 常用命令
    • HSET key field value:设置哈希字段的值。
    • HGET key field:获取哈希字段的值。
    • HGETALL key:获取哈希中所有字段和值。

示例

HSET user:1000 name "Alice" age "30"
HGETALL user:1000  # 返回 {"name": "Alice", "age": "30"}
Set(集合)
  • 描述:一个无序的字符串集合,所有元素都是唯一的。
  • 特点
    • 支持集合间的交、并、差运算。
    • 适合存储标签、好友列表等。
  • 常用命令
    • SADD key member:向集合添加一个成员。
    • SREM key member:从集合中移除一个成员。
    • SMEMBERS key:获取集合中的所有成员。

示例

SADD myset "a" "b" "c"
SMEMBERS myset  # 返回 ["a", "b", "c"]
Zset(有序集合)
  • 描述:一个带有分数的有序集合,成员按分数排序。
  • 特点
    • 支持按分数范围查询。
    • 适合实现排行榜、优先队列等。
  • 常用命令
    • ZADD key score member:向有序集合添加成员及其分数。
    • ZRANGE key start stop [WITHSCORES]:按分数范围获取成员。
    • ZREM key member:移除有序集合中的成员。

示例

ZADD leaderboard 100 "Alice"
ZADD leaderboard 200 "Bob"
ZRANGE leaderboard 0 -1 WITHSCORES  # 返回 ["Alice", "100", "Bob", "200"]

4. 基础命令

Redis 提供了丰富的命令集来操作不同的数据结构。以下是各数据类型的一些常用基础命令。

String 相关命令

  • SET:设置键的值。

    SET key value
    
  • GET:获取键的值。

    GET key
    
  • INCR:将键的值递增 1。

    INCR key
    
  • DECR:将键的值递减 1。

    DECR key
    
  • APPEND:向键的值追加字符串。

    APPEND key value
    

List 相关命令

  • LPUSH:在列表左侧推入一个或多个值。

    LPUSH key value1 [value2 ...]
    
  • RPUSH:在列表右侧推入一个或多个值。

    RPUSH key value1 [value2 ...]
    
  • LPOP:弹出列表左侧第一个值。

    LPOP key
    
  • RPOP:弹出列表右侧第一个值。

    RPOP key
    
  • LRANGE:获取列表指定范围的值。

    LRANGE key start stop
    

Hash 相关命令

  • HSET:设置哈希字段的值。

    HSET key field value
    
  • HGET:获取哈希字段的值。

    HGET key field
    
  • HDEL:删除哈希中的一个或多个字段。

    HDEL key field1 [field2 ...]
    
  • HGETALL:获取哈希中所有字段和值。

    HGETALL key
    
  • HEXISTS:检查哈希中是否存在某个字段。

    HEXISTS key field
    

Set 相关命令

  • SADD:向集合添加一个或多个成员。

    SADD key member1 [member2 ...]
    
  • SREM:从集合中移除一个或多个成员。

    SREM key member1 [member2 ...]
    
  • SMEMBERS:获取集合中的所有成员。

    SMEMBERS key
    
  • SISMEMBER:检查成员是否在集合中。

    SISMEMBER key member
    
  • SCARD:获取集合的成员数量。

    SCARD key
    

Zset 相关命令

  • ZADD:向有序集合添加一个或多个成员及其分数。

    ZADD key score1 member1 [score2 member2 ...]
    
  • ZRANGE:按分数范围获取成员。

    ZRANGE key start stop [WITHSCORES]
    
  • ZREM:移除有序集合中的一个或多个成员。

    ZREM key member1 [member2 ...]
    
  • ZSCORE:获取成员的分数。

    ZSCORE key member
    
  • ZCARD:获取有序集合的成员数量。

    ZCARD key
    

5. Redis 高级应用

Redis 不仅是一个简单的键值存储,还支持许多高级功能,适用于复杂的应用场景。以下是 Redis 的几种高级应用详解。

分布式锁

在分布式系统中,分布式锁用于确保多个进程或线程之间对共享资源的互斥访问。Redis 通过 SETNX 命令和过期时间来实现分布式锁。

实现步骤

  1. 尝试获取锁

    SET key value NX PX timeout
    
    • NX:只有在键不存在时才设置键。
    • PX timeout:设置键的过期时间,防止死锁。
  2. 释放锁
    通过 Lua 脚本确保释放锁的原子性:

    if redis.call("GET", key) == value thenreturn redis.call("DEL", key)
    elsereturn 0
    end
    

示例

SET mylock "unique_value" NX PX 30000  # 尝试获取锁,30秒过期

位运算

Redis 提供了对位(bit)的操作,通过 BITOP 和相关命令可以进行高效的位操作。

常用命令

  • SETBIT:设置位值。

    SETBIT key offset value
    
  • GETBIT:获取位值。

    GETBIT key offset
    
  • BITCOUNT:统计位为 1 的数量。

    BITCOUNT key [start end]
    
  • BITOP:对多个键的位进行操作(AND, OR, XOR, NOT)。

    BITOP operation destkey key1 [key2 ...]
    

应用场景

  • 用户活跃度统计。
  • 布隆过滤器实现。
  • 权限控制。

累加器

累加器用于对数值进行累加操作,常用于统计和计数。

实现方式

利用 Redis 的 INCRINCRBY 等命令对键的值进行递增操作。

示例

INCR page_views  # 将 page_views 键的值递增 1
INCRBY page_views 10  # 将 page_views 键的值递增 10

阻塞队列与异步消息队列

Redis 的列表可以用作阻塞队列,通过 BLPOPBRPOP 命令实现。
在这里插入图片描述

阻塞队列

生产者通过 RPUSH 将消息推入队列,消费者通过 BLPOP 从队列左侧阻塞获取消息。

示例

# 生产者
RPUSH queue "message1"# 消费者
BLPOP queue 0  # 阻塞等待直到有消息

发布/订阅模式

利用 Redis 的发布/订阅功能实现消息广播。

示例

# 订阅者
SUBSCRIBE channel1# 发布者
PUBLISH channel1 "Hello, World!"

分布式定时器

分布式定时器用于在分布式系统中实现定时任务,可以利用 Redis 的有序集合和定时任务调度机制。

实现步骤

  1. 存储定时任务
    将定时任务存储在有序集合中,分数为执行时间戳。

    ZADD timers timestamp task_data
    
  2. 调度执行
    定期检查有序集合中分数小于等于当前时间的任务并执行。

    ZRANGEBYSCORE timers -inf current_timestamp
    
  3. 执行并移除任务
    执行任务后,将其从有序集合中移除。

    ZREM timers task_data
    

6. Redis 使用场景

Redis 的高性能和多样化的数据结构使其适用于多种实际应用场景。以下是一些典型的使用案例。

朋友圈点赞与评论

在社交应用中,用户的点赞和评论操作需要高并发处理。Redis 的高性能读写能力可以有效应对这种场景。

实现方式

  • 点赞计数
    使用字符串或哈希存储每条动态的点赞数量。

    INCR post:1000:likes
    
  • 用户点赞记录
    使用集合记录用户对哪些动态进行了点赞,防止重复点赞。

    SADD user:1000:liked_posts 2000
    
  • 评论存储
    使用列表存储动态的评论。

    RPUSH post:1000:comments "Great post!"
    

购物车实现

在电商平台中,购物车需要快速响应用户的添加、删除和更新操作。Redis 的哈希和列表结构非常适合此类需求。

实现方式

  • 用户购物车
    使用哈希存储每个用户购物车中的商品及数量。

    HSET cart:user1000 item123 2
    HSET cart:user1000 item456 1
    
  • 购物车列表
    使用列表记录购物车中的商品顺序,支持展示和排序。

    RPUSH cart:user1000:items "item123" "item456"
    

抽奖应用

抽奖应用需要高效随机抽取中奖用户,Redis 的集合和有序集合提供了良好的支持。

实现方式

  • 用户集合
    使用集合存储所有参与抽奖的用户。

    SADD lottery:participants user1 user2 user3 ...
    
  • 随机抽取
    使用 SRANDMEMBER 命令随机抽取中奖用户。

    SRANDMEMBER lottery:participants 1
    

时间窗口限流

为了防止系统被过多请求压垮,可以使用 Redis 实现基于时间窗口的限流。

实现方式

  • 滑动时间窗口
    使用有序集合记录请求的时间戳,并在每次请求时清理过期记录,判断当前请求数是否超过限制。

    ZADD user:1000:requests timestamp
    ZREMRANGEBYSCORE user:1000:requests -inf (current_time - window_size)
    ZCARD user:1000:requests
    
  • 固定时间窗口
    使用计数器在固定时间窗口内计数。

    INCR user:1000:count
    EXPIRE user:1000:count window_size
    

百度热榜与延时队列

百度热榜
利用有序集合实现实时的热点榜单,根据关键词的热度(分数)排序展示。

实现方式

ZINCRBY hotwords 1 "keyword1"
ZRANGE hotwords 0 -1 WITHSCORES

延时队列
使用有序集合和定时任务调度实现延时任务,如定时发送邮件、订单超时处理等。

实现方式

ZADD delayed_tasks execute_timestamp "task_data"

定期检查并执行到期任务:

ZRANGEBYSCORE delayed_tasks -inf current_timestamp

参考

0voice · GitHub

相关文章:

Redis 完整指南:命令与原理详解

目录 1. Redis 概述什么是 RedisRedis 应用场景 2. 安装与启动Redis 安装步骤源代码安装使用包管理器安装(以 Ubuntu 为例) 编译与启动命令编客户端连接 3. Redis 存储结构KV 存储结构数据结构类型String(字符串)List(…...

【2024软考高级架构师】论文篇——3、论Web系统的测试技术及其应用

【摘要】 本人于2023年8月参与了某地级市的市级机关电子政务信息系统的建设工作,该项目是该市机关的电子政务网建设计划的一部分,笔者在该项目中担任项目经理和系统分析师一职,主要负责项目的日常全面管理和质量保证与质量控制工作。该项目是基于WEB系统的,由于WEB系统具有…...

迪杰斯特拉算法的理解

图片转载自:最短路径算法-迪杰斯特拉(Dijkstra)算法 - 程序小哥爱读书的文章 - 知乎 https://zhuanlan.zhihu.com/p/346558578 迪杰斯特拉,一个广度优先算法,采用了贪心策略。 第一步,选取顶点D,更新和D相连的节点C&a…...

华为OD机试 - 文本统计分析(Python/JS/C/C++ 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…...

计算机挑战赛9

Excel表列名称由字母A~Z组成,列字母的规律如下: A、B、C.、AA、AB....AZ、BA、B...ZZZZY、ZZZZ...输入: 输入包含两个列名称字符串,长度均小于等于5。 输出: 输出两个列名称之间共有多少列 样例输入: AA AZ 样例输出: 24 代码: C&…...

C++学习路线(十六)

void类型指针 void -> 空类型 void* -> 空类型指针,只存储地址的值,丢失类型,无法访问,要访问里面的值 我们必须对指针进行正确的类型转换,然后再间接引用指针 所有其它类型的指针都可以隐式自动转换成 void 类型…...

2024年最受欢迎的AI工具与实际应用:AI技术对未来生活的深远影响

2024年最受欢迎的AI工具与实际应用:AI技术对未来生活的深远影响 随着2024年的到来,人工智能(AI)技术已经深入渗透到我们生活的方方面面。从日常工作到科学研究,AI工具的应用变得越来越广泛。无论是生成式AI工具&#…...

【网络安全】账户安全随笔

未经许可,不得转载。 作者:Enoch 原文出处:https://mp.weixin.qq.com/s/oKBpZ0F6Kl5NNmHSYCYIPw 文章目录 账户类型资金划转问题幂等ID使用错误多接口并发问题精度问题其他划转问题特殊资金盗取问题科学计数法问题账户类型 在互联网金融和电商企业中,账户安全直接关系到用…...

在线培训知识库管理系统:教育行业的新动力

在当今数字化时代,教育行业正经历着前所未有的变革。随着在线教育的兴起,如何高效地管理和传播知识成为了一个关键问题。在线培训知识库管理系统应运而生,它以其强大的知识整合、分享和管理能力,为教育行业注入了新的活力。 一、…...

【AI声音克隆本地整合包及教程】第二代GPT-SoVITS V2:声音克隆的新境界

在数字时代的浪潮中,个性化和创新是永恒的主题。GPT-SoVITS V2,作为第二代声音克隆技术,正以其革命性的特性和应用,为个人和企业打开一扇通往声音个性化的新大门。 声音克隆的新高度 GPT-SoVITS V2是由RVC变声器创始人“花儿不哭…...

博看书苑 8.8.1| 免费阅读海量图书期刊

博看书苑是一款免费的图书和期刊阅读神器,拥有海量的图书和期刊资源,涵盖了文学、历史、科技、教育等多个领域。无论你是想深入研究某个专业领域,还是想在闲暇时阅读一些轻松的读物,博看书苑都能满足你的需求。更令人惊喜的是&…...

导致动态代理无法使用的原因有哪些?

在动态代理的应用过程中,有时会遇到其无法正常使用的情况。这种现象可能源于多种原因,从网络配置到软件设置,了解和解决这些问题对保持代理的高效运行至关重要。本文将详细探讨导致动态代理无法使用的主要原因及对策,以帮助用户及…...

熟练使用Spring Boot、Spring Cloud Alibaba微服务开发框架,并深入理解其原理 学习要求

1. Spring Boot 核心理解 自动配置:了解 Spring Boot 的自动配置原理(EnableAutoConfiguration),包括如何查看和定制自动配置的内容。需要能解释 Spring Boot 如何减少样板代码。Spring Boot Starter:熟悉各种 starte…...

2024-10-09 问AI: [AI面试题] 描述数据预处理在 AI 中的重要性

文心一言 数据预处理在人工智能(AI)中扮演着至关重要的角色,它是构建高效、准确和可靠AI模型不可或缺的步骤。以下是数据预处理在AI中重要性的详细描述: 1. 提高数据质量 清理和去噪:数据预处理可以识别和纠正数据中…...

Linux中文件的理解

✨前言✨ 📘 博客主页:to Keep博客主页 🙆欢迎关注,👍点赞,📝留言评论 ⏳首发时间:2024年10月16日 📨 博主码云地址:渣渣C 📕参考书籍&#xff1a…...

益安宁丸,国药准字,值得信赖

益安宁丸真品辨别唯一标准 益安宁丸是由同溢堂药业有限公司独家生产的一款中成药,主要用于调理心血管系统,广泛应用于内地市场及港澳地区。由于其疗效显著,益安宁丸在消费者中享有良好的声誉,被誉为心血管健康的守护者。然而&…...

Django项目的创建及说明(详细图解版)

Django项目的创建及说明 1、安装Django2、创建项目2.1、利用终端创建项目2.2、利用Pycharm企业版创建项目 3、默认文件介绍 1、安装Django 在终端输入下述命令行。 pip install django安装成功后执行如下命令查看Django是否安装好,若正确显示出Django版本号则安装…...

MySQL 9从入门到性能优化-二进制日志

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

Cloudlog delete_oqrs_line 未授权SQL注入漏洞复现

0x01 产品简介 Cloudlog 是一个自托管的 PHP 应用程序,可让您在任何地方记录您的业余无线电联系人。使用PHP和MySQL构建的基于Web的业余无线电记录应用程序支持从HF到微波的一般站记录任务 0x02 漏洞概述 Cloudlog delete_oqrs_line 接口存在未授权SQL注入漏洞,未经身份验…...

【Linux】解锁软硬链接奥秘,高效动静态库管理的实战技巧

软硬连接和动静态库 1. 软链接1.1. 概念1.2. 特点1.3. 应用场景 2. 硬链接2.1. 概念2.2. 硬链计数2.3. 特点2.4. 应用场景 3. 动静态库3.1 库存在的原因3.2. 静态库制作与使用3.2.1 打包3.2.2. 使用 3.3. 动态库制作与使用3.3.1. 打包3.3.2. 使用 4. 解决动态库查不到的4种方法…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​,覆盖应用全生命周期测试需求,主要提供五大核心能力: ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

【2025年】解决Burpsuite抓不到https包的问题

环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...