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

黑马 | Reids | 基础篇

黑马reids基础篇

文章目录

  • 黑马reids基础篇
    • 一.初始Redis
      • 1.1SQL 和 NoSql的区别
        • 1.1.1结构化和非结构化
        • 1.1.2关联和非关联
        • 1.1.3查询方式
        • 1.1.4 事务
        • 1.1.5总结
      • 1.2 认识Redis
      • 1.3 Redis安装启动
        • 默认启动:
        • 后台启动:
        • 开机自启
      • 1.4 Redis客户端
          • 1.4.1.Redis命令行客户端
          • 1.4.2.图形化桌面客户端
    • 二.Redis命令
      • 0.通用命令
      • 1.String
      • 2.Key的层级格式
      • 3.Hash
      • 4.List
      • 5.Set
      • 6.SortedSet

一.初始Redis

1.1SQL 和 NoSql的区别

1.1.1结构化和非结构化

(1) SQL关系性数据库

传统关系型数据库是结构化数据,每一张表都有严格的约束信息:字段名、字段数据类型、字段约束等等信息,插入的数据必须遵守这些约束

image-20221108150421251

(2) NoSql数据库

NoSql对数据库格式没有严格约束,往往形式松散,自由。

可以是key-value,可以是文档,或者图格式

image-20221108150842073

image-20221108150759880

image-20221108150824222

1.1.2关联和非关联

(1) 关系型数据库

image-20221108151050108

(2) 非关系型数据库

{
id: 1,
name: "张三",
orders: [{id: 1,item: {id: 10, title: "荣耀6", price: 4999}},{id: 2,item: {id: 20, title: "小米11", price: 3999}}
]
}
1.1.3查询方式

image-20221108151404130

1.1.4 事务

传统关系型数据库能满足事务ACID的原则 ,而非关系型数据库往往不支持事务,或者不能严格保证ACID的特性,只能实现基本的一致性。

1.1.5总结

image-20221108154744967

1.2 认识Redis

特征:

  • 键值(key-value)型,value支持多种不同数据结构,功能丰富
  • 单线程,每个命令具备原子性
  • 低延迟,速度快(基于内存、IO多路复用、良好的编码)。
  • 支持数据持久化(定期将内存搬运到磁盘)
  • 支持主从集群、分片集群(数据拆分)(可以做读写分离,大大提高效率)
  • 支持多语言客户端

Redis的官方网站地址:RedisRedis Redis

1.3 Redis安装启动

Redis是基于C编写,所以需要先安装Redis所需的gcc依赖

yum install -y gcc 

如果有了就跳过

安装包上传到usr/local/src

image-20221109102716711

tar -zxvf redis-6.2.6.tar.gz 
1

cd到redis的目录:

cd redis-6.2.6/
1

编译和运行

make && make install
1
默认启动:

需要一直挂着页面

redis-server
后台启动:

前提是必须修改配置文件(/usr/local/src/redis-6.2.6/redis.conf)

(1) 先备份一份

cp redis.conf redis.conf.bak

(2) 修改

vi redis.conf

eg:修改密码为1234

image-20221109111623471

(3) 运行

cd /usr/local/src/redis-6.2.6
redis-server redis.conf
12

(4) 查看是否启动

ps -ef | grep redis
1

image-20221109111925399

(5) 停止redis -9:强制但是不安全

kill -9 进程号
1
开机自启

(1) 新建系统服务文件

vi /etc/systemd/system/redis.service
1

内容:

[Unit]
Description=redis-server
After=network.target[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf
PrivateTmp=true[Install]
WantedBy=multi-user.target
1234567891011

(2) 重新加载系统服务

systemctl daemon-reload
1

(3)启动

systemctl start redis
1

(4)查看状态

systemctl status redis
1

image-20221109113222600

(5) 设置开机自启

systemctl enable redis
1

image-20221109113355471

1.4 Redis客户端

安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括:

  • 命令行客户端
  • 图形化桌面客户端
  • 编程客户端
1.4.1.Redis命令行客户端

Redis安装完成后就自带了命令行客户端:redis-cli,使用方式如下:

redis-cli [options] [commonds]

redis-cli -h 192.168.200.131 -p 6379 -a 1234

其中常见的options有:

  • -h 127.0.0.1:指定要连接的redis节点的IP地址,默认是127.0.0.1
  • -p 6379:指定要连接的redis节点的端口,默认是6379
  • -a 123321:指定redis的访问密码

其中的commonds就是Redis的操作命令,例如:

  • ping:与redis服务端做心跳测试,服务端正常会返回pong

不指定commond时,会进入redis-cli的交互控制台:

image-20221109130629001

也可以先不写密码,后面来补充!

image-20221109130833848

1.4.2.图形化桌面客户端

GitHub上的大神编写了Redis的图形化桌面客户端,地址:https://github.com/uglide/RedisDesktopManager

不过该仓库提供的是RedisDesktopManager的源码,并未提供windows安装包。

在下面这个仓库可以找到安装包:https://github.com/lework/RedisDesktopManager-Windows/releases

resp.exe

image-20221109141759074

image-20221109142107511

二.Redis命令

0.通用命令

help @generic 查看所有的通用命令

image-20241021105219427

image-20241021105335724

生产过程中不建议用keys是因为它是单线程的,而这个行为是耗时的,会被阻塞很久耽误事情。

centos7_01_192.168.120.90:0>mset k1 v1 k2 v2 k3 v3 
"OK"
centos7_01_192.168.120.90:0>keys *
1) "k2"
2) "k1"
3) "k3"#使用del
centos7_01_192.168.120.90:0>del k1 k2 k3 k4
"3"
centos7_01_192.168.120.90:0>keys *centos7_01_192.168.120.90:0>mset name v1
"OK"
centos7_01_192.168.120.90:0>keys *
1) "name"#使用exists
centos7_01_192.168.120.90:0>exists name
"1"
centos7_01_192.168.120.90:0>exists age
"0"#使用expire和ttl
centos7_01_192.168.120.90:0>expire name 20
"1"
centos7_01_192.168.120.90:0>TTL name
"15"
centos7_01_192.168.120.90:0>TTL name
"14"
centos7_01_192.168.120.90:0>TTL name
"9"
centos7_01_192.168.120.90:0>TTL name
"4"
centos7_01_192.168.120.90:0>TTL name
"2"
centos7_01_192.168.120.90:0>TTL name
"1"
centos7_01_192.168.120.90:0>TTL name
"0"
centos7_01_192.168.120.90:0>TTL name
"-2"
centos7_01_192.168.120.90:0>TTL name
"-2"
centos7_01_192.168.120.90:0>TTL name
"-2"
centos7_01_192.168.120.90:0>TTL name
"-2"
centos7_01_192.168.120.90:0>TTL name
"-2"
# -2表示已经被删了
centos7_01_192.168.120.90:0>keys * centos7_01_192.168.120.90:0>#没有用expire设置有效期,那么-1表示的是永久有效
centos7_01_192.168.120.90:0>set name Kevin
"OK"
centos7_01_192.168.120.90:0>ttl name
"-1"
centos7_01_192.168.120.90:0>

expire设置存活周期,ttl查看剩余时间,不设置expire的话ttl为-1

1.String

image-20221109150526290

image-20221109150730084

#set 单个添加 值会被覆盖,所以是修改
centos7_01_192.168.120.90:0>set name Rose
"OK"
centos7_01_192.168.120.90:0>get name
"Rose"
centos7_01_192.168.120.90:0>set name Jack
"OK"
centos7_01_192.168.120.90:0>get name
"Jack"#mset 批量添加
centos7_01_192.168.120.90:0>MSET k1 v1 k2 v2 k3 v3
"OK"
centos7_01_192.168.120.90:0>keys *
1) "name"
2) "k2"
3) "k1"
4) "k3"centos7_01_192.168.120.90:0>MGET name k1 k2 k3
1) "Jack"
2) "v1"
3) "v2"
4) "v3"#INCR
centos7_01_192.168.120.90:0>set age 18
"OK"
centos7_01_192.168.120.90:0>keys *
1) "k1"
2) "k2"
3) "age"
4) "k3"
5) "name"centos7_01_192.168.120.90:0>INCR age
"19"
centos7_01_192.168.120.90:0>get age
"19"
centos7_01_192.168.120.90:0>INCR age
"20"
centos7_01_192.168.120.90:0>get age
"20"#INCRBY 设置每次增长多少
#设置为负数就是自减了
centos7_01_192.168.120.90:0>INCRBY age 2
"22"
centos7_01_192.168.120.90:0>INCRBY age 2
"24"
centos7_01_192.168.120.90:0>INCRBY age 2
"26"
centos7_01_192.168.120.90:0>get age
"26"
centos7_01_192.168.120.90:0>INCRBY age -3
"23"
centos7_01_192.168.120.90:0>INCRBY age -3
"20"
centos7_01_192.168.120.90:0>get age
"20"#setnx
centos7_01_192.168.120.90:0>setnx name lli
"0"
centos7_01_192.168.120.90:0>get name
"Jack"
centos7_01_192.168.120.90:0>setnx name1 kevin
"1"
centos7_01_192.168.120.90:0>get name
"Jack"
centos7_01_192.168.120.90:0>get name1
"kevin"
#set和nx是组合的,可以分开可以合起来
centos7_01_192.168.120.90:0>set name lucy nx
null
centos7_01_192.168.120.90:0>get name
"Jack"#setex set和expire的组合 添加并设置有效期
centos7_01_192.168.120.90:0>setex name 10 jack
"OK"
centos7_01_192.168.120.90:0>ttl name
"6"
centos7_01_192.168.120.90:0>ttl name
"3"
centos7_01_192.168.120.90:0>ttl name
"2"
centos7_01_192.168.120.90:0>ttl name
"1"
centos7_01_192.168.120.90:0>ttl name
"0"
centos7_01_192.168.120.90:0>ttl name
"-2"
centos7_01_192.168.120.90:0>get name
null#set和ex分开的
centos7_01_192.168.120.90:0>set name Jack ex 10
"OK"
centos7_01_192.168.120.90:0>get name
"Jack"
centos7_01_192.168.120.90:0>ttl name
"4"
centos7_01_192.168.120.90:0>ttl name
"3"
centos7_01_192.168.120.90:0>ttl name
"-2"
centos7_01_192.168.120.90:0>get name
null

2.Key的层级格式

推荐用:

项目名:业务名:类型:id

这种形式去存储

image-20221109152434329

如果Value是一个Java对象,例如一个User对象,则可以将对象序列化为JSON字符串后存储:

centos7_01_192.168.120.90:0>set heima:user:1 '{"id":1,"name": "Jack","age": 21}'
"OK"
centos7_01_192.168.120.90:0>set heima:user:2 '{"id":2,"name": "Rose","age": 20}'
"OK"
centos7_01_192.168.120.90:0>set heima:product:1 '{"id":1, "name": "小米11", "price": 4999}'
"OK"
centos7_01_192.168.120.90:0>set heima:product:2 '{"id":2, "name": "iphone", "price": 9809}'
"OK"
centos7_01_192.168.120.90:0>keys *
1) "heima:product:2"
2) "age"
3) "k2"
4) "k1"
5) "heima:product:1"
6) "heima:user:2"
7) "k3"
8) "name1"
9) "heima:user:1"

一旦我们向redis采用这样的方式存储,那么在可视化界面中,redis会以层级结构来进行存储,形成类似于这样的结构,更加方便Redis获取数据,避免了名字冲突

image-20241021113335832

3.Hash

本身Redis就是一个key-value的结构,而hash的value还是一个key-value的结构

image-20221109155158922

image-20221109155235999

#HSET 用法和set一样的,和string不同的是不止要给key还要给field
centos7_01_192.168.120.90:0>HSET heima:user:3 name Lucy
"1"
centos7_01_192.168.120.90:0>HSET heima:user:3 age 21
"1"
centos7_01_192.168.120.90:0>HSET heima:user:3 age 17
"0"

image-20241021184809896

#HMSET
centos7_01_192.168.120.90:0>HMSET heima:user:4 name hanmeimei
"OK"
centos7_01_192.168.120.90:0>HMSET hiema:user:4 name lilei age 20 sex man
"OK"
#HMGET
centos7_01_192.168.120.90:0>HMGET hiema:user:4 name age sex
1) "lilei"
2) "20"
3) "man"
#HGETALL
centos7_01_192.168.120.90:0>HGETALL hiema:user:4
1) "name"
2) "lilei"
3) "age"
4) "20"
5) "sex"
6) "man"#HKEYS HVALS
centos7_01_192.168.120.90:0>HKEYS hiema:user:4
1) "name"
2) "age"
3) "sex"
centos7_01_192.168.120.90:0>HVALS hiema:user:4
1) "lilei"
2) "20"
3) "man"
#HINCRBY
centos7_01_192.168.120.90:0>HINCRBY hiema:user:4 age 2
"22"
#HSET和nx 原来有的改不了,原来没的创建
centos7_01_192.168.120.90:0>HSETNX hiema:user:4 sex women
"0"
centos7_01_192.168.120.90:0>HSETNX hiema:user:3 sex women
"1"
centos7_01_192.168.120.90:0>HGETALL hiema:user:3
1) "sex"
2) "women"

4.List

image-20221109162502511

image-20221109163700818

BLPOP 是阻塞等待,当前进程阻塞,等待另外一个进程输入结果

#LPUSH
centos7_01_192.168.120.90:0>LPUSH users 1 2 3
"3"
#RPUSH
centos7_01_192.168.120.90:0>RPUSH users 456
"4"
centos7_01_192.168.120.90:0>RPUSH users 4 5 6
"7"
#LPOP 直接移除
centos7_01_192.168.120.90:0>LPOP users 1
1) "3"#RPOP
centos7_01_192.168.120.90:0>RPOP users 1
1) "6"#LRANGE
centos7_01_192.168.120.90:0>LRANGE users 1 2
1) "1"
2) "456"#BLPOP 有的话弹出,没有的话等待指定时间,这里是100秒
centos7_01_192.168.120.90:0>BLPOP user2 100
1) "user2"
2) "Jack"

5.Set

image-20221109164228655

image-20241021194250280

单个集合的操作

#SADD添加
centos7_01_192.168.120.90:0>SADD s1 a b c
"3"
#SMEMBERS 查看所有
centos7_01_192.168.120.90:0>SMEMBERS s1
1) "b"
2) "c"
3) "a"
# SREM 删除
centos7_01_192.168.120.90:0>SREM s1 a
"1"
#SISMEMBER 是否存在
centos7_01_192.168.120.90:0>SISMEMBER s1 a
"0"
centos7_01_192.168.120.90:0>SISMEMBER s1 b
"1"
#SCARD 计数
centos7_01_192.168.120.90:0>SCARD s1
"2"

image-20221109165305468

centos7_01_192.168.120.90:0>sadd zs lisi wangwu zhaoliu
"3"
centos7_01_192.168.120.90:0>sadd ls wangwu mazi ergou
"3"
centos7_01_192.168.120.90:0>sinter zs ls
1) "wangwu"centos7_01_192.168.120.90:0>sdiff zs ls
1) "lisi"
2) "zhaoliu"centos7_01_192.168.120.90:0>sunion zs ls
1) "wangwu"
2) "ergou"
3) "lisi"
4) "zhaoliu"
5) "mazi"centos7_01_192.168.120.90:0>sismember zs lisi
"1"
centos7_01_192.168.120.90:0>sismember ls zhangsan
"0"
centos7_01_192.168.120.90:0>sismember ls zhangsan
"0"
centos7_01_192.168.120.90:0>srem zs lisi
"1"

6.SortedSet

image-20221109165841177

每个元素都带上分数,所以才能实现排序

image-20241021195555459

image-20221109170635790

#ZADD 添加
centos7_01_192.168.120.90:0>zadd stus 85 jack 89 Lucy 82 Rose 95 Tom 78 Jerry 92 Amy 76 Miles
"7"
#ZREM 删除
centos7_01_192.168.120.90:0>zrem stus Tom
"1"
#ZSCORE
centos7_01_192.168.120.90:0>zscore stus Amy
"92"
#ZRANK 这个是从0开始数的排名 升序
centos7_01_192.168.120.90:0>zrank stus Rose
"2"
#ZREVRANK 降序
centos7_01_192.168.120.90:0>zrevrank stus Rose
"3"
#ZCOUNT 0-80分
centos7_01_192.168.120.90:0>zcount stus 0 80
"2"
#ZINCRBY 自增,一个加分操作
centos7_01_192.168.120.90:0>zincrby stus 2 Amy
"94"
#这是后三名,因为原来的是按照成绩升序排的
centos7_01_192.168.120.90:0>zrange stus 0 2
1) "Miles"
2) "Jerry"
3) "Rose"
#这是前三名
centos7_01_192.168.120.90:0>zrevrange stus 0 2
1) "Amy"
2) "Lucy"
3) "jack"
#80以下的人
centos7_01_192.168.120.90:0>zrangebyscore stus 0 80
1) "Miles"
2) "Jerry"

相关文章:

黑马 | Reids | 基础篇

黑马reids基础篇 文章目录 黑马reids基础篇一.初始Redis1.1SQL 和 NoSql的区别1.1.1结构化和非结构化1.1.2关联和非关联1.1.3查询方式1.1.4 事务1.1.5总结 1.2 认识Redis1.3 Redis安装启动默认启动:后台启动:开机自启 1.4 Redis客户端1.4.1.Redis命令行客…...

SAP-换登录界面图片

SMW0 二、SM30 (将value值删除,登录图片恢复默认) 重新登录,更改成功。...

移动 Web核心笔记(二)

空间转换 空间:是从坐标轴角度定义的 X 、Y 和 Z 三条坐标轴构成了一个立体空间,Z 轴位置与视线方向相同。 空间转换也叫 3D转换 属性:transform 平移 /*单独设置 z轴效果不明显*/ transform: translate3d(x, y, z); transform: translateX(…...

MySQL创建和管理表

1. 基础知识 存储数据是处理数据的第一步,只有正确地把数据存储起来,才能进行有效的处理和分析。 在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。 从系统架构的层次上看…...

【从零开始的LeetCode-算法】910. 最小差值 II

给你一个整数数组 nums&#xff0c;和一个整数 k 。 对于每个下标 i&#xff08;0 < i < nums.length&#xff09;&#xff0c;将 nums[i] 变成 nums[i] k 或 nums[i] - k 。 nums 的 分数 是 nums 中最大元素和最小元素的差值。 在更改每个下标对应的值之后&#xf…...

周报 | 24.10.14-24.10.20文章汇总

为了更好地整理文章和发表接下来的文章&#xff0c;以后每周都汇总一份周报。 周报 | 24.10.7-24.10.13文章汇总-CSDN博客 OpenCV与AI深度学习 | T-Rex Label &#xff01;超震撼 AI 自动标注工具&#xff0c;开箱即用、检测一切-CSDN博客 计算机视觉与机器学习 | 目标检测 …...

Codeforce 980 Div2 A-D 题解

A. Profitable Interest Rate 原题 A. Profitable Interest Rate 思路 易推出公式 2 * a - b 代码 #include <bits/stdc.h> //#define int long long#define F(i, a, b) for (int i (a); i < (b); i) #define dF(i, a, b) for (int i (a); i > (b); i--)usi…...

一次代码优化的过程

场景说明&#xff1a; wpf项目&#xff0c;有4个不同的页面&#xff0c;共用一个next按钮&#xff0c;实现点击后跳转到下一个页面。 第一个页面是导入文件&#xff0c;当有2个及以上文件时&#xff0c;会弹窗提示。如下图所示&#xff1a; 之前和之后的代码对比&#xff1a; 之…...

多线程的学习(1)

线程的创建方式 1.继承Thread类 package duoXianCheng;public class MyThread extends Thread{public void run(){System.out.println("hoh");}public static void main(String[] args) {MyThread m1 new MyThread();m1.start();//start启动线程&#xff0c;调用重…...

PyCharm借助MobaXterm跳板机连接服务器

服务器信息&#xff1a; Step 1 MovaXterm→Session→SSH输入服务器信息 Step 2 MovaXterm→Session→SSH→Network setting→SSG gateway(jump host) 输入跳板机信息 键入密码即可 Step 3 MovaXterm→Tunneling→New SSH tunnel 依次输入&#xff1a;A本机端口&#xff0c…...

计算机毕业论文基于Android 的签到系统设计与实现

计算机专业本科毕业设计(论文)开题报告 毕业设计(论文)题目:基于Android的签到系统设计与实现 文章目录 毕业设计论文开题报告一、课题的目的及意义(含国内外的研究现状分析):二、课题任务、重点研究内容、实现途径、条件:摘 要1. 绪论1.1. 研究背景1.2. 研究现状1.3.…...

量化学习-02

1、宏观经济学基础概念 宏观经济简单背景 宏观经济&#xff0c;就是在宏观范畴以全局视角观察经济现象&#xff0c;分析其中的经济总量。该宏观范畴所包含的范围可以指一个国家或地区&#xff0c;是由众多微观个体组成的一个经济体&#xff0c;而这里面的微观个体可以指一个家…...

SAP_MM模块-设置业务合作伙伴类型字段必输(多种方案)

一、业务背景 公司需要把供应商增加一个细分的维度&#xff0c;并且要求该字段设置为必输&#xff0c;防止用户新增供应商时忘记维护。这里给用户找了一个分类的字段&#xff1a;业务合作伙伴类型&#xff0c;本文主要讲解如何设置该字段设置为必填&#xff1b; 注意&#xff…...

STM32平台上实现串口接收不定长数据-实际项目中应用

文章目录 一、中断串口监听方式初始化中断处理串口监听 二、空闲中断方式三、空闲中断DMA方式四、总结 本文将详细介绍在STM32平台上实现串口接收不定长数据的几种方法 一、中断串口监听方式 这种方式也是我早期使用的方式&#xff0c;直接使用寄存器来操作&#xff0c;这种方…...

AWD入门

一、简介 AWD(Attack With Defense&#xff0c;攻防兼备)模式。你需要在一场比赛里要扮演攻击方和防守方&#xff0c;攻者得分&#xff0c;失守者会被扣分。也就是说攻击别人的靶机可以获取 Flag 分数时&#xff0c;别人会被扣分&#xff0c;同时你也要保护自己的主机不被别人…...

T3矩阵看功率

每个像素的T3矩阵&#xff0c;功率等于特征值的和。 不同的像素的T3矩阵相加&#xff0c;可不能用特征分解的相加&#xff0c;因为两个T矩阵的特征向量不同...

VLMEvalKit多模态大模型评测工具源码解析

vlmeval/api和vlmeval/vlm文件夹下分别是api接口和本地运行的大模型的代码 基类都是base vlmeval/dataset是数据集处理代码 vlmeval/inference.py是推理代码 run.py的整个流程 1 vlmeval/api/base.py 主要为需要与外部API交互的系统提供了一个通用的框架 类属性 allowed_type…...

将 Docker 安装到指定目录

将 Docker 安装到指定目录 将 Docker 安装到指定目录 Docker 默认安装在 C:\Program Files\Docker\Docker&#xff0c;这可能会占用大量 C 盘空间。你可以按以下步骤将 Docker 安装到其他盘&#xff08;例如 E 盘&#xff09;&#xff1a; 创建安装目录&#xff1a;在 E 盘创…...

哪些企业需要部署SD-WAN?

首先&#xff0c;让我们先明确SD-WAN的定义。SD-WAN&#xff0c;中文全称为软件定义广域网&#xff08;Software-Defined Wide Area Network&#xff09;&#xff0c;通过集中化管理与流量控制&#xff0c;帮助企业优化网络性能&#xff0c;提升用户体验。与传统广域网&#xf…...

通信基站类型、频段与网络标准

【1】通信基站类型 移动通信基站根据覆盖面积和功率大小主要可以分为以下几种类型&#xff1a; 宏基站&#xff08;宏站&#xff09;&#xff1a;这是最常见的基站类型&#xff0c;具有较大的发射功率和较广的覆盖范围&#xff0c;通常覆盖半径从1到25公里不等。宏基站主要用于…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...