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

[教程] 一文进阶Redis

Redis进阶

过期时间(Expire)

Redis 的过期时间(Expire)功能是一种数据生命周期管理机制,允许为键设置一个过期时间。一旦达到该时间,键会自动被删除。这对于管理缓存数据特别有用,可以自动清理不再需要的数据,从而节省空间。

应用场景

过期时间功能在需要控制数据存储周期的各种应用中都非常有用,尤其是在缓存场景中:

  • 缓存数据过期:自动删除过期的缓存数据,以保持数据的新鲜性。
  • 会话管理:在会话超时后自动删除会话数据。
  • 限时特性控制:用于实现一些限时的功能,例如限时折扣、限时访问等。

注意事项

  • 设置过期时间后,键会在指定的时间后自动被删除,无需手动干预。
  • 过期时间的精度是秒级或毫秒级,取决于使用的是 EXPIRE 还是 PEXPIRE 命令。
  • 过期删除操作是由 Redis 的定时任务异步执行的,因此删除时间可能会稍有延迟。

EXPIRE - 设置键的过期时间(常用)

EXPIRE key seconds

–> (integer) 若键存在且过期时间被成功设置,–> 1
若键不存在,–> 0

PEXPIRE - 以毫秒为单位设置键的过期时间(常用)

PEXPIRE key milliseconds

–> (integer) 若键存在且过期时间被成功设置,–> 1
若键不存在,–> 0

EXPIREAT - 设置键的过期UNIX时间戳

EXPIREAT key timestamp

–> (integer) 若键存在且过期时间被成功设置,–> 1
若键不存在,–> 0

PEXPIREAT - 以毫秒为单位设置键的过期UNIX时间戳

PEXPIREAT key milliseconds-timestamp

–> (integer) 若键存在且过期时间被成功设置,–> 1
若键不存在,–> 0

TTL - 查询键的剩余生存时间(秒)(常用)

TTL key

–> (integer) 返回键的剩余生存时间(秒)。
若键不存在或没有设置过期时间,–> -1
若键已过期,–> -2

PTTL - 查询键的剩余生存时间(毫秒)(常用)

PTTL key

–> (integer) 返回键的剩余生存时间(毫秒)。
若键不存在或没有设置过期时间,–> -1
若键已过期,–> -2

发布订阅模式(Pub/Sub)

Redis 的发布订阅模式(Pub/Sub)是一种消息通信模式,用于在一个或多个订阅者之间发送消息。这种模式由发布者(publisher)向频道(channel)发送消息,订阅者(subscriber)监听这些频道来接收消息。Pub/Sub 模式在需要实现实时消息系统时非常有用,如聊天应用、实时通知系统等。

应用场景

发布订阅模式广泛应用于实时消息传递和事件通知系统,例如:

  • 实时消息系统:如在线聊天室、实时数据更新通知等。
  • 事件驱动的应用:如在某个事件发生时触发通知或执行操作。
  • 订阅服务:用户可以订阅感兴趣的主题或频道,接收相关的消息更新。

注意事项

  • Redis 的发布订阅模式不提供持久化功能,如果没有订阅者在线,消息将会丢失。
  • 这种模式更适合于轻量级和临时的通信,不建议用于关键数据的传输。

PUBLISH - 发布消息(常用)

PUBLISH channel message

–> (integer) 返回接收到消息的订阅者数量。
若无订阅者接收消息,–> 0

SUBSCRIBE - 订阅频道(常用)

SUBSCRIBE channel [channel ...]

–> 订阅一个或多个频道。
在订阅后,服务器会实时推送频道中的消息。

UNSUBSCRIBE - 取消订阅(常用)

UNSUBSCRIBE [channel ...]

–> 取消一个或多个频道的订阅。
若未指定频道,取消所有订阅。

PSUBSCRIBE - 订阅符合模式的频道

PSUBSCRIBE pattern [pattern ...]

–> 订阅符合给定模式的所有频道。
使用通配符匹配模式。

PUNSUBSCRIBE - 取消模式订阅

PUNSUBSCRIBE [pattern ...]

–> 取消一个或多个模式的订阅。
若未指定模式,取消所有模式订阅。

PUBSUB - 查看订阅信息

PUBSUB subcommand [argument [argument ...]]

–> 获取关于订阅的详细信息。
命令子选项如 CHANNELS、NUMSUB、NUMPAT 提供不同的信息。

消息队列(使用 Stream)

Redis 的 Stream 数据类型非常适合用作消息队列。它是一个可持续增长的日志数据结构,可以存储一系列的消息,每个消息都是一个由多个键值对组成的条目。Redis Stream 特别适合于构建事件驱动的应用程序,如消息队列、活动流、实时通知等。

应用场景

Stream 作为消息队列广泛应用于多种场合,例如:

  • 任务队列:用于在后台处理任务,例如电子邮件发送、数据处理等。
  • 事件流处理:实时记录和处理事件,如用户点击、交易记录等。
  • 日志记录:持续记录应用或系统的日志信息。

注意事项

  • Redis Stream 提供了消费者组的概念,可以实现多个消费者之间的负载均衡。
  • Stream 支持范围查询和阻塞读取,适合实时消息应用。
  • Stream 提供了持久化存储,不同于 Pub/Sub,消息不会因为没有消费者在线而丢失。

XADD - 向流添加消息(常用)

XADD key ID field value [field value ...]

–> (string) 返回添加消息的ID。
使用 * 作为ID时,Redis 自动生成ID。

XREAD - 从流中读取消息(常用)

XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]

–> 返回指定流中的消息。
如果未指定 COUNT,默认返回所有消息。BLOCK 用于指定阻塞读取的时间。

XGROUP - 管理消费者组(常用)

XGROUP [CREATE key groupname ID | SETID key groupname ID | DESTROY key groupname | DELCONSUMER key groupname consumername]

–> 创建、更新或删除消费者组及其消费者。

XACK - 确认消息处理(常用)

XACK key group ID [ID ...]

–> (integer) 确认消息已被处理的数量。
用于在消费者组中标记消息为已处理。

XPENDING - 查看待处理消息(常用)

XPENDING key group [start end count] [consumer]

–> 查看消费者组中待处理的消息。
可以指定范围和消费者名称。

地理空间(Geospatial)

Redis 的地理空间(Geospatial)功能是一种特殊的数据结构,用于存储和操作地理位置信息。这种数据结构基于有序集合(sorted set),允许你存储地理位置数据(如经度和纬度)并进行复杂的地理空间查询。

应用场景

地理空间功能适用于各种需要地理位置信息的应用场景,例如:

  • 位置服务:允许用户查找附近的地点、人或物品。
  • 距离计算:计算两点之间的距离,用于配送、旅行规划等。
  • 区域查询:查找特定区域内的成员或位置。

注意事项

  • 地理空间数据存储在有序集合中,每个元素都与一个地理坐标相关联。
  • 查询可以基于半径、成员或者区域来执行。
  • Redis 提供的是近似位置数据,对于精度要求非常高的应用场景可能需要额外的处理。

GEOADD - 添加地理空间位置(常用)

GEOADD key longitude latitude member [longitude latitude member ...]

–> (integer) 返回添加到地理空间索引的元素数量。
添加位置数据,包括经度、纬度和成员名称。

GEODIST - 计算两个成员之间的距离(常用)

GEODIST key member1 member2 [unit]

–> (string) 返回成员之间的距离。
可以指定单位(m、km、mi、ft)。

GEOPOS - 获取成员的地理空间位置(常用)

GEOPOS key member [member ...]

–> 返回成员的经纬度坐标。
如果成员不存在,–> (nil)

GEORADIUSGEORADIUSBYMEMBER - 按半径查询(常用)

GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]
GEORADIUSBYMEMBER key member radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count] [ASC|DESC] [STORE key] [STOREDIST key]

–> 返回符合条件的成员。
可以包含额外的信息,如距离、坐标等。

HyperLogLog(基数估计)

Redis 的 HyperLogLog 是一种概率数据结构,用于高效地执行基数统计,即估算一个集合中唯一元素的数量。HyperLogLog 特别适合处理大数据集,因为它提供了一种空间效率极高的方式来估算唯一元素的数量,例如统计网站的独立访客数。它的优势在于使用极少的内存(约 12 KB)来处理大量数据。

应用场景

HyperLogLog 主要用于大规模数据环境中的基数估算任务,例如:

  • 独立访客计数:统计网站或应用中的独立用户数。
  • 大数据集的唯一元素计数:在不需要精确计数的场景中,如统计大量数据的不同值。

注意事项

  • HyperLogLog 提供的是一个近似值,而不是精确计数。
  • 它适用于那些可以接受一定误差的场景。
  • 由于其极高的空间效率,它非常适合在内存受限的环境中使用。

PFADD - 向 HyperLogLog 添加元素(常用)

PFADD key element [element ...]

–> (integer) 如果 HyperLogLog 的内部表示改变了,–> 1
如果没有任何变化,–> 0

PFCOUNT - 计算 HyperLogLog 中的唯一元素数量(常用)

PFCOUNT key [key ...]

–> (integer) 返回估算的唯一元素数量。

PFMERGE - 合并多个 HyperLogLog(常用)

PFMERGE destkey sourcekey [sourcekey ...]

–> 创建一个新的 HyperLogLog,包含所有提供的 HyperLogLogs 的并集。
–> 返回 OK。

位图(Bitmap)

Redis 的位图(Bitmap)是一种特殊的数据类型,基于字符串类型实现,允许用户操作字符串中的每一位(bit)。位图提供了一种极为节省空间的方法来存储和操作大量的布尔值。这使得位图非常适合于实现大规模的、空间效率极高的标记系统。

应用场景

位图在处理大量布尔值时非常有用,常见的应用场景包括:

  • 用户活跃度跟踪:跟踪用户每天的登录情况,每个位表示一天。
  • 特征标记:用于标记用户的某些特征或行为,例如是否完成了某项任务。
  • 实时计数:如在线用户数、网站点击量等。

注意事项

  • 位图非常节省空间,但在处理大偏移量时要小心,因为 Redis 位图的大小会根据最大的偏移量自动增长。
  • 位图操作通常非常快,但需要注意,大范围的 BITCOUNTBITPOS 操作可能会消耗较多CPU资源。

SETBIT - 设置或清除位的值(常用)

SETBIT key offset value

–> (integer) 在执行操作之前,指定偏移处的位的原始值。
offset 是位的索引,value 是要设置的值(0 或 1)。

GETBIT - 获取位的值(常用)

GETBIT key offset

–> (integer) 返回位的值(0 或 1)。
offset 是位的索引。

BITCOUNT - 计算设置为 1 的位的数量(常用)

BITCOUNT key [start end]

–> (integer) 返回区间内设置为 1 的位的数量。
可以指定可选的字节范围 startend

BITOP - 对多个位图进行逻辑运算(常用)

BITOP operation destkey key [key ...]

–> (integer) 返回结果位图的长度(以字节为单位)。
支持的运算有 AND、OR、XOR 和 NOT。

BITPOS - 查找第一个设置为指定值的位(常用)

BITPOS key bit [start] [end]

–> (integer) 返回第一个设置为指定值(0 或 1)的位的位置。
可以指定可选的字节范围 startend

BITFIELD - 复杂位操作(Bitmap)

Redis 的 BITFIELD 命令是位图数据类型的扩展,提供了更复杂的操作,允许对字符串的特定部分进行读取、设置和计数等操作。这个命令使得在单个键中有效地存储和管理多种不同的数据片段成为可能,从而在空间效率和性能之间取得平衡。

应用场景

BITFIELD 命令的灵活性使其适用于需要进行更复杂的位操作的场景,特别是在需要处理不同大小的整数字段时,例如:

  • 定制的计数器:使用不同大小的整数字段来存储多个计数器。
  • 高效存储:将多个标记或状态压缩存储在单个键中。
  • 位域映射:映射和操作数据的位域,如权限控制、状态标记等。

注意事项

  • BITFIELD 允许对位进行更精细的控制,但这也意味着需要更多地了解数据的存储和表示方式。
  • 使用时要考虑到数值溢出的问题,特别是当对数值进行增加或减少操作时。

命令用法

  • 设置值(SET):设置指定偏移量上特定大小的整数。
  • 获取值(GET):获取位于指定偏移量上特定大小的整数。
  • 增加值(INCRBY):在指定偏移量上增加特定大小的整数。
  • 溢出控制(OVERFLOW):指定在数值溢出时的行为。

示例

  1. 设置特定位的值

    BITFIELD mykey SET i5 #100 15
    

    这会将 mykey 中从第 100 位开始的有符号 5 位整数设置为 15。

  2. 获取特定位的值

    BITFIELD mykey GET u8 #0
    

    这会返回 mykey 中从第 0 位开始的无符号 8 位整数的值。

  3. 增加特定位的值

    BITFIELD mykey INCRBY i5 #100 1
    

    这会将 mykey 中从第 100 位开始的有符号 5 位整数增加 1。

  4. 处理溢出情况

    BITFIELD mykey INCRBY i5 #100 1 OVERFLOW SAT
    

    如果操作导致溢出,这会将值设置为该类型所能表示的最大值。

事务(Transactions)

Redis 的事务功能允许将多个命令打包成一个原子性操作序列。这意味着事务内的所有命令要么全部执行,要么全部不执行。Redis 通过一组命令(MULTIEXECDISCARDWATCH)来实现事务处理。

应用场景

事务在需要确保一系列操作完整性和一致性的场景中非常有用,例如:

  • 多步操作:在执行一系列相互依赖的命令时,确保它们要么全部成功,要么全部失败。
  • 数据完整性:保证数据状态的一致性,避免部分更新导致的数据不一致问题。

注意事项

  • Redis 事务不支持回滚。如果事务中的某个操作失败,事务的其余部分仍将继续执行。
  • WATCH 命令可以用于实现乐观锁,它在检测到关键数据在执行事务之前被修改时,会使事务失败。

MULTI - 开始一个事务(常用)

MULTI

–> 标记一个事务块的开始。

EXEC - 执行所有事务块内的命令(常用)

EXEC

–> 执行所有自 MULTI 后进入队列的命令。

DISCARD - 放弃事务(常用)

DISCARD

–> 放弃执行事务块内的所有命令。

WATCH - 监视键变化(常用)

WATCH key [key ...]

–> 监视一个或多个键,如果在事务执行之前这些键被修改,那么事务将被中断。

示例:

假设你需要更新两个键 key1key2 的值,并且希望这两个操作要么同时成功,要么都不执行。以下是如何使用 Redis 事务来实现这一点的步骤:

MULTI            # 开始事务
SET key1 value1  # 队列中加入设置 key1 的命令
SET key2 value2  # 队列中加入设置 key2 的命令
EXEC             # 执行所有命令
  1. 开始事务
    使用 MULTI 命令开始一个新的事务。这标志着接下来的命令将被作为一个原子单元来处理。

  2. 命令入队
    使用 SET 命令将 key1 设置为 value1,并将 key2 设置为 value2。这些命令在执行 EXEC 前不会立即执行,而是被添加到事务的队列中。

  3. 执行事务
    使用 EXEC 命令来执行事务。当 EXEC 被调用时,事务中的所有命令都会被原子性地执行。如果事务成功,你将看到每个命令的输出结果;如果在执行过程中出现错误,所有命令的执行将会被取消。

在这个过程中,如果需要在执行 EXEC 之前取消事务,可以使用 DISCARD 命令,这会清除事务队列并退出事务模式。

持久化(Persistence)

Redis 的持久化功能是其关键特性之一,它允许将存储在内存中的数据保存到磁盘,确保在服务器重启后数据不会丢失。Redis 提供了两种主要的持久化策略:RDB(Redis Database)快照和 AOF(Append Only File)日志。

应用场景

持久化在以下场景中非常重要:

  • 数据备份:定期创建数据快照以备份数据库,用于灾难恢复。
  • 数据恢复:在服务器崩溃或重启后恢复数据。
  • 系统稳定性:确保系统的稳定运行和数据的完整性。

RDB 持久化

RDB 持久化通过创建整个数据库快照来保存当前数据状态。

  • 优点:适用于大规模数据恢复,能快速加载数据。
  • 缺点:在两次快照之间的数据可能丢失,不适合需要每个写操作都持久化的场景。

AOF 持久化

AOF 持久化记录每个写操作,并在服务器启动时重放这些操作来重建原始数据。

  • 优点:更加可靠,可以确保写操作不丢失。
  • 缺点:文件大小可能会很大,且重启恢复速度可能较慢。

注意事项

  • 持久化策略选择:根据数据安全性和性能需求选择合适的持久化策略。
  • 性能影响:持久化操作可能会影响 Redis 的性能。
  • 数据安全:为了确保数据安全,建议同时使用 RDB 和 AOF 持久化。

BGSAVE - 创建 RDB 快照(常用)

BGSAVE

–> 异步执行 RDB 快照保存,不阻塞主进程。

SAVE - 同步创建 RDB 快照

SAVE

–> 同步执行 RDB 快照保存,期间阻塞所有客户端请求。

AOF 相关配置 - 控制 AOF 行为

  • 在配置文件中设置 appendonly yes 开启 AOF 持久化。
  • appendfsync 配置项控制 AOF 的同步频率(always、everysec、no)。

主从复制(Replication)

Redis 的主从复制功能允许将一台 Redis 服务器的数据复制到一个或多个从服务器上。这种机制可以用于数据冗余、负载均衡、灾难恢复和数据备份等。

应用场景

主从复制在以下场景中非常有用:

  • 数据备份:在从服务器上创建数据的副本以备份主服务器上的数据。
  • 读取扩展:通过在多个从服务器上读取数据,可以降低主服务器的读取负载。
  • 灾难恢复:如果主服务器出现故障,可以从从服务器恢复数据或提升某个从服务器为新的主服务器。

注意事项

  • 数据延迟:在高负载情况下,从服务器上的数据可能会稍微滞后于主服务器。
  • 内存使用:每个从服务器都需要足够的内存来存储复制的数据。
  • 网络带宽:复制数据会占用网络带宽,特别是在进行初始同步时。

主从复制设置

  1. 主服务器配置:主服务器无需特殊配置,只需正常运行即可。
  2. 从服务器配置:在从服务器上,使用以下命令指定主服务器:
    SLAVEOF host port
    
    hostport 替换为主服务器的地址和端口。

示例

假设有一个运行在 IP 地址 192.168.1.100、端口 6379 的主 Redis 服务器,要将其数据复制到从服务器上,从服务器上的配置应该是:

SLAVEOF 192.168.1.100 6379

这条命令会使当前服务器成为指定主服务器的从服务器。

INFO REPLICATION - 查看复制信息(常用)

使用 INFO REPLICATION 命令可以查看主从复制的状态,包括从服务器的数量、复制偏移量等信息。

故障转移

Redis Sentinel 或 Redis Cluster 可以用于自动处理故障转移,在主服务器出现故障时自动将从服务器提升为新的主服务器。

通过配置文件配置主从服务器(常用)

要通过配置文件设置 Redis 的主从复制,你需要分别在主服务器和从服务器的 Redis 配置文件中做出相应的修改。
过于复杂,请查阅推荐视频【GeekHour】一小时Redis教程 - P18

验证配置

更改并重启 Redis 服务后,你可以使用 redis-cli 工具检查复制状态。在从服务器上执行以下命令:

redis-cli
info replication

这将显示复制的状态信息,包括从服务器是否成功连接到主服务器等。

哨兵模式(Sentinel)

Redis Sentinel 是 Redis 的高可用性解决方案。它负责监控所有 Redis 主从服务器,自动进行故障转移,并提供服务发现功能。当主服务器出现故障时,Sentinel 能够自动将其中一个从服务器提升为新的主服务器,并让其余从服务器复制新的主服务器。

应用场景

Redis Sentinel 在以下场景中非常有用:

  • 自动故障转移:自动检测主服务器是否故障并进行故障转移。
  • 系统监控:监控 Redis 主从服务器的运行状态。
  • 服务发现:为客户端提供当前主服务器的地址。

注意事项

  • 部署多个 Sentinel 实例:为了确保可靠性,至少需要部署三个 Sentinel 实例。
  • 网络可靠性:Sentinel 需要一个可靠的网络环境来监控 Redis 实例。
  • 配置一致性:确保所有 Sentinel 实例的配置一致。

Sentinel 配置

在使用 Sentinel 之前,需要对 Sentinel 进行配置。以下是 Sentinel 配置的基本步骤:

  1. 创建配置文件:为每个 Sentinel 实例创建一个配置文件,如 sentinel.conf

  2. 配置 Sentinel 监控:在配置文件中指定要监控的主服务器。

    sentinel monitor mymaster 127.0.0.1 6379 2
    

    这条命令指定 Sentinel 监控名为 mymaster 的主服务器,地址为 127.0.0.1,端口为 6379。数字 2 表示当有两个或更多的 Sentinel 认为主服务器不可用时,才开始故障转移过程。

  3. 其他配置选项

    • 设置主服务器故障判定的超时时间。
      sentinel down-after-milliseconds mymaster 30000
      
    • 配置故障转移的选项,如选举超时时间等。
  4. 启动 Sentinel
    使用以下命令启动 Sentinel 实例:

    redis-sentinel /path/to/sentinel.conf
    

故障转移过程

当 Sentinel 检测到主服务器不可用时,它会自动开始故障转移过程:

  1. 选举领导 Sentinel。
  2. 选举出一个新的主服务器(通常是数据最完整的从服务器)。
  3. 配置其他从服务器复制新的主服务器。
  4. 更新客户端关于主服务器的信息。

Redis Sentinel 确保了 Redis 环境的高可用性和稳定性,适用于生产环境中对数据可用性要求较高的场景。

相关文章:

[教程] 一文进阶Redis

Redis进阶 过期时间(Expire) Redis 的过期时间(Expire)功能是一种数据生命周期管理机制,允许为键设置一个过期时间。一旦达到该时间,键会自动被删除。这对于管理缓存数据特别有用,可以自动清理…...

通用plantuml模板头

通用plantuml文件 startuml participant Admin order 0 #87CEFA // 参与者、顺序、颜色 participant Student order 1 #87CEFA participant Teacher order 2 #87CEFA participant TestPlayer order 3 #87CEFA participant Class order 4 #87CEFA participant Subject order …...

网站公安备案流程

1.公安备案网址 https://beian.mps.gov.cn/ 选择用户登录->法人用户登录 左边的码下载APP,登上去之后用APP扫右边的码,人脸识别...

关于使用若依,并不会自动分页的解决方式

关于使用若依,并不会自动分页的解决方式 如果只是单纯的使用一次查询list,并不会触发这个bug 例如: 但是我们如果对里面的数据进行调整修改的话就会触发这个bug 例如: 此时可以看到我对数据进行了转换!!!,这时如果超出数据10条,实际我们拿到的永远是10条,具体原因这里就不展…...

在PyCharm中配置PyQt5环境

在PyCharm中配置PyQt5环境 文章目录 1.安装第三方库2.PyQt5设计器3.PyUIC转换工具 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ&#x1…...

SIFI 极值点拟合的详细推导过程

在获得高斯差分金字塔之后,我们可以根据邻近尺度和邻近像素一共 26 个像素点的灰度值和中心像素点的灰度值比较,如果中心像素点的值是最大或者最小的,则作为极值点保留下来。 但是我们知道像素是网格排布的,也就是说是离散的&…...

Kontakt v7.7.2(音频采样器)

Native Instruments Kontakt 7是一款强大的软件采样器,它允许用户从各种来源采样音频并进行编辑和处理。它包含大量预设采样库,包括乐器、合成器、鼓组和声音效果等。此外,Kontakt 7还允许用户创建自己的采样库,以便根据自己的需要…...

Drawer抽屉(antd-design组件库)简单用法

1.Drawer抽屉 屏幕边缘滑出的浮层面板。 2.何时使用 抽屉从父窗体边缘滑入,覆盖住部分父窗体内容。用户在抽屉内操作时不必离开当前任务,操作完成后,可以平滑地回到原任务。 需要一个附加的面板来控制父窗体内容,这个面板在需要时…...

Android控件全解手册 - 多语言切换完美解决方案(兼容7.0以上版本)

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…...

Android-P CameraSerivce

0 前言 本文重点分析Android-P的CameraService实现。 验证:Goldfish模拟器 1 定义 图1.1 CameraService ICameraServiceframeworks/av/camera/aidl/android/hardware/ICameraService.aidlBnCameraServiceout/soong/.intermediates/frameworks/av/camera/libcamera_client/an…...

21.Oracle的程序包(Package)

Oracle的程序包Package 一、Package的概述1、什么是Oracle11g的Package2、Package的作用是什么3、常见的系统内置Package 二、创建Package的相关语法1、Package的创建语法2、Package的删除3、具体案例4、Package的使用5、与Package相关的其他语法 三、常见内置程序包的使用1、…...

Spring 日志

日志的作用: 1.定位和发现问题 2.系统监控 3.数据采集 观察日志 先写一段打印日志的代码 日志内容 日志级别分类 默认日志级别是Info,级别一下的就不打印了 Spring 帮我们集成了日志框架,我们直接使用即可 我们测试一下用日志框架打印日志是如何 我们就会发现打印的结果跟…...

webpack如何处理浏览器的样式兼容问题postcss

一、准备工作 css/index.css添加样式 .word {color: red;user-select: none; } 为了兼容不同的浏览器我们需要添加前缀比如: -webkit-user-select: none; 这个工作可以通过postcss的插件postcss-preset-env处理 二、安装依赖 pnpm i -D postcss postcss-loader…...

idea方法注释模版设置

方法上面的注释模版: Template text: ** Description $desc$ $param$ $return$* Aauthor yimeng* date $DATE$ $TIME$ **/param: groovyScript("def result ;def params \"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toLis…...

NX二次开发UF_CURVE_create_isocline 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_create_isocline Defined in: uf_curve.h int UF_CURVE_create_isocline(int face_cnt, tag_t faces [ ] , double direction [ 3 ] , const char * start_angle, const ch…...

从0开始学习JavaScript--JavaScript 模板字符串的全面应用

JavaScript 模板字符串是 ES6 引入的一项强大特性,它提供了一种更优雅、更灵活的字符串拼接方式。在本文中,将深入探讨模板字符串的基本语法、高级用法以及在实际项目中的广泛应用,通过丰富的示例代码带你领略模板字符串的魅力。 模板字符串…...

开源 vs 闭源:数字化时代的技术选择

开源 vs 闭源:数字化时代的技术选择 近期,特斯拉CEO马斯克的一番言论引起了广泛关注:OpenAI不该闭源,自家首款聊天机器人将开源。这引发了人们对于开源与闭源软件的辩论,这一话题在技术界一直是热门的讨论焦点。在数字…...

Spring Boot项目Service类单元测试自动生成

在Spring Boot项目中,对Service类进行单元测试对于开发工程师而言具有重大意义和作用: 验证业务逻辑的正确性和完整性 核心业务逻辑的准确实现:Service类通常包含核心业务逻辑。单元测试确保这些逻辑被正确实现,满足业务需求。处…...

Typescript中 interface 和 type 的区别是什么?

在 TypeScript 中,interface 和 type 都用于定义类型,但它们有一些区别。 1. 语法差异: interface 关键字用于声明接口,使用 interface 可以定义对象的形状、函数的签名等。 type 关键字用于声明类型别名,可以给一个…...

W2311294-万宾科技可燃气体监测仪怎么进行数据监测

万宾科技可燃气体监测仪怎么进行数据监测 燃气是现代城市之中重要的能源,它已经渗透到城市生活的方方面面,对燃气管网的管理也在考验着政府人员的工作能力。燃气管网的安全运行和城市的安全和人民的生活直接挂钩。为了及时掌握燃气管网的运行状态&#x…...

龙虎榜——20250610

上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

在rocky linux 9.5上在线安装 docker

前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

【网络安全】开源系统getshell漏洞挖掘

审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

日常一水C

多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

node.js的初步学习

那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...

基于 HTTP 的单向流式通信协议SSE详解

SSE(Server-Sent Events)详解 🧠 什么是 SSE? SSE(Server-Sent Events) 是 HTML5 标准中定义的一种通信机制,它允许服务器主动将事件推送给客户端(浏览器)。与传统的 H…...

理想汽车5月交付40856辆,同比增长16.7%

6月1日,理想汽车官方宣布,5月交付新车40856辆,同比增长16.7%。截至2025年5月31日,理想汽车历史累计交付量为1301531辆。 官方表示,理想L系列智能焕新版在5月正式发布,全系产品力有显著的提升,每…...

MeanFlow:何凯明新作,单步去噪图像生成新SOTA

1.简介 这篇文章介绍了一种名为MeanFlow的新型生成模型框架,旨在通过单步生成过程高效地将先验分布转换为数据分布。文章的核心创新在于引入了平均速度的概念,这一概念的引入使得模型能够通过单次函数评估完成从先验分布到数据分布的转换,显…...