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

Redis 基础和高级用法入门

redis 是什么?      

Redis是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis的数据结构致力于帮助用户解决问题,而不会像其他数据库那样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化(persistence)和客户端分片(client-side sharding)等特性,用户可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系统。

redis 安装

macos 上的安装

brew install redis

ubuntu 上的安装

sudo apt-get install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis

Redhat Centos上的安装

sudo yum install redis
sudo systemctl enable redis
sudo systemctl start redis

连接到redis 

ninjamac@ip-192-168-1-2 ~ % redis-cli
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> 

Redis常用命令介绍

1. string 的用法

127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> get hello
"world"
127.0.0.1:6379> del hello
(integer) 1
127.0.0.1:6379> get hello   //删除后查询结果为nil
(nil)

2. list 的用法

127.0.0.1:6379> rpush list-key item
(integer) 1
127.0.0.1:6379> rpush list-key item2
(integer) 2
127.0.0.1:6379> rpush list-key item
(integer) 3
127.0.0.1:6379> lrange list-key 0 -1 //根据范围来查看
1) "item"
2) "item2"
3) "item"
127.0.0.1:6379> lpop list-key  //弹出一个元素
"item"
127.0.0.1:6379> lrange list-key 0 -1
1) "item2"
2) "item"

3. 集合的用法

127.0.0.1:6379> sadd set-key item.  //当你将一个元素添加到集合,成功后会返回一个1
(integer) 1
127.0.0.1:6379> sadd set-key item2
(integer) 1
127.0.0.1:6379> sadd set-key item
(integer) 0
127.0.0.1:6379> smembers set-key //查看集合中所有的元素
1) "item"
2) "item2"
127.0.0.1:6379> sismember set-key item4  //判断某个元素是否在集合中,不在的话返回0,在的话返回1
(integer) 0
127.0.0.1:6379> sismember set-key item
(integer) 1
127.0.0.1:6379> srem set-key item2  //从集合中删除某个元素
(integer) 1
127.0.0.1:6379> smembers set-key
1) "item"

4. 散列的用法

127.0.0.1:6379> hset hash-key sub-key1 value1.  //在尝试添加键值到散列的时候会返回一个值
(integer) 1
127.0.0.1:6379> hset hash-key sub-key2 value2
(integer) 1
127.0.0.1:6379> hset hash-key sub-key3 value1
(integer) 1
127.0.0.1:6379> hgetall hash-key   //列出散列中所有的键值对
1) "sub-key1"
2) "value1"
3) "sub-key2"
4) "value2"
5) "sub-key3"
6) "value1"
127.0.0.1:6379> hdel hash-key sub-key2   //从散列中删除简直对
(integer) 1
127.0.0.1:6379> hdel hash-key sub-key1
(integer) 1
127.0.0.1:6379> hgetall hash-key
1) "sub-key3"
2) "value1"

5. 有序集合的用法

127.0.0.1:6379> zadd zset-key 738 member1   //往集合添加一个键值对会返回一个值
(integer) 1
127.0.0.1:6379> zadd zset-key 900 member0
(integer) 1
127.0.0.1:6379> zadd zset-key 900 member0
(integer) 0
127.0.0.1:6379> zrange zset-key 0 -1 withscores //查询集合里所有的键值对
1) "member1"
2) "738"
3) "member0"
4) "900"
127.0.0.1:6379> zrangebyscore zset-key 0 800 withscores //按照范围查询键值对
1) "member1"
2) "738"
127.0.0.1:6379> zrem zset-key member1。  //删除键值对
(integer) 1
127.0.0.1:6379> zrange zset-key 0 -1 withscores
1) "member0"
2) "900"

6. 订阅和发布

有一个客户端订阅了redisChat通道

127.0.0.1:6379> SUBSCRIBE redisChat
1) "subscribe"
2) "redisChat"
3) (integer) 1
1) "message"
2) "redisChat"

另一个客户端发布消息到redisChat通道:

127.0.0.1:6379> PUBLISH redisChat "Redis is a great caching technique"
(integer) 1

订阅该通道的客户端可以接受该消息

127.0.0.1:6379> SUBSCRIBE redisChat
1) "subscribe"
2) "redisChat"
3) (integer) 1
1) "message"
2) "redisChat"
3) "Redis is a great caching technique"

7. 事务的用法

redis 事务允许在一个步骤中执行一组命令。以下是事务的两个属性:

  • 事务中的所有命令都作为单个隔离操作按顺序执行。Redis 事务执行过程中不可能处理其他客户端发出的请求。
  • Redis 事务也是原子性的。原子性意味着要么处理所有命令,要么不处理任何命令。

Redis 事务由命令 MULTI 启动,然后您需要传递一个应在事务中执行的命令列表,之后由 EXEC 命令执行整个事务。

127.0.0.1:6379> MULTI
OK
127.0.0.1:6379(TX)> SET tutorial redis
QUEUED
127.0.0.1:6379(TX)> GET turorial
QUEUED
127.0.0.1:6379(TX)> INCR visitors
QUEUED
127.0.0.1:6379(TX)> EXEC
1) OK
2) (nil)
3) (integer) 1

8. redis - server

Redis 服务器命令主要用于管理 Redis 服务器。

示例
以下示例解释了如何获取服务器的所有统计信息。

127.0.0.1:6379> INFO
# Server
redis_version:7.2.7
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:7f24f11dd7e42c58
redis_mode:standalone
os:Darwin 24.3.0 arm64
arch_bits:64
monotonic_clock:POSIX clock_gettime
multiplexing_api:kqueue
atomicvar_api:c11-builtin
gcc_version:4.2.1
process_id:7521
process_supervised:no
run_id:3128aefc390caa8d8b5900f48760227b60bab3b0
tcp_port:6379
server_time_usec:1745481054943667
uptime_in_seconds:14771
uptime_in_days:0
hz:10
configured_hz:10
lru_clock:650590
executable:/Users/ninjamac/redis-server
config_file:
io_threads_active:0
listener0:name=tcp,bind=*,bind=-::*,port=6379# Clients
connected_clients:2
cluster_connections:0
maxclients:10000
client_recent_max_input_buffer:16
client_recent_max_output_buffer:0
blocked_clients:0
tracking_clients:0
clients_in_timeout_table:0
total_blocking_keys:0
total_blocking_keys_on_nokey:0# Memory
used_memory:1716192
used_memory_human:1.64M
used_memory_rss:1572864
used_memory_rss_human:1.50M
used_memory_peak:1833280
used_memory_peak_human:1.75M
used_memory_peak_perc:93.61%
used_memory_overhead:1102904
used_memory_startup:1098848
used_memory_dataset:613288
used_memory_dataset_perc:99.34%
allocator_allocated:1696496
allocator_active:1541120
allocator_resident:1541120
total_system_memory:8589934592
total_system_memory_human:8.00G
used_memory_lua:31744
used_memory_vm_eval:31744
used_memory_lua_human:31.00K
used_memory_scripts_eval:0
number_of_cached_scripts:0
number_of_functions:0
number_of_libraries:0
used_memory_vm_functions:32768
used_memory_vm_total:64512
used_memory_vm_total_human:63.00K
used_memory_functions:216
used_memory_scripts:216
used_memory_scripts_human:216B
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
allocator_frag_ratio:0.91
allocator_frag_bytes:18446744073709396240
allocator_rss_ratio:1.00
allocator_rss_bytes:0
rss_overhead_ratio:1.02
rss_overhead_bytes:31744
mem_fragmentation_ratio:0.93
mem_fragmentation_bytes:-123632
mem_not_counted_for_evict:0
mem_replication_backlog:0
mem_total_replication_buffers:0
mem_clients_slaves:0
mem_clients_normal:3648
mem_cluster_links:0
mem_aof_buffer:0
mem_allocator:libc
active_defrag_running:0
lazyfree_pending_objects:0
lazyfreed_objects:0# Persistence
loading:0
async_loading:0
current_cow_peak:0
current_cow_size:0
current_cow_size_age:0
current_fork_perc:0.00
current_save_keys_processed:0
current_save_keys_total:0
rdb_changes_since_last_save:0
rdb_bgsave_in_progress:0
rdb_last_save_time:1745480666
rdb_last_bgsave_status:ok
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
rdb_saves:2
rdb_last_cow_size:0
rdb_last_load_keys_expired:0
rdb_last_load_keys_loaded:0
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_rewrites:0
aof_rewrites_consecutive_failures:0
aof_last_write_status:ok
aof_last_cow_size:0
module_fork_in_progress:0
module_fork_last_cow_size:0# Stats
total_connections_received:3
total_commands_processed:47
instantaneous_ops_per_sec:0
total_net_input_bytes:1888
total_net_output_bytes:411128
total_net_repl_input_bytes:0
total_net_repl_output_bytes:0
instantaneous_input_kbps:0.00
instantaneous_output_kbps:0.00
instantaneous_input_repl_kbps:0.00
instantaneous_output_repl_kbps:0.00
rejected_connections:0
sync_full:0
sync_partial_ok:0
sync_partial_err:0
expired_keys:0
expired_stale_perc:0.00
expired_time_cap_reached_count:0
expire_cycle_cpu_milliseconds:408
evicted_keys:0
evicted_clients:0
total_eviction_exceeded_time:0
current_eviction_exceeded_time:0
keyspace_hits:13
keyspace_misses:3
pubsub_channels:0
pubsub_patterns:0
pubsubshard_channels:0
latest_fork_usec:472
total_forks:2
migrate_cached_sockets:0
slave_expires_tracked_keys:0
active_defrag_hits:0
active_defrag_misses:0
active_defrag_key_hits:0
active_defrag_key_misses:0
total_active_defrag_time:0
current_active_defrag_time:0
tracking_total_keys:0
tracking_total_items:0
tracking_total_prefixes:0
unexpected_error_replies:0
total_error_replies:1
dump_payload_sanitizations:0
total_reads_processed:50
total_writes_processed:55
io_threaded_reads_processed:0
io_threaded_writes_processed:0
reply_buffer_shrinks:3
reply_buffer_expands:0
eventloop_cycles:145460
eventloop_duration_sum:15705009
eventloop_duration_cmd_sum:11215
instantaneous_eventloop_cycles_per_sec:9
instantaneous_eventloop_duration_usec:58
acl_access_denied_auth:0
acl_access_denied_cmd:0
acl_access_denied_key:0
acl_access_denied_channel:0# Replication
role:master
connected_slaves:0
master_failover_state:no-failover
master_replid:6824c9d2b58f349f1b5e416a534b7cf7e569958b
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:0
second_repl_offset:-1
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0# CPU
used_cpu_sys:10.848199
used_cpu_user:7.186347
used_cpu_sys_children:0.004874
used_cpu_user_children:0.000463# Modules# Errorstats
errorstat_ERR:count=1# Cluster
cluster_enabled:0# Keyspace
db0:keys=4,expires=0,avg_ttl=0

9. redis script

Redis 脚本用于使用 Lua 解释器执行脚本。从 2.6.0 版本开始,它内置于 Redis 中。用于脚本编写的命令是 EVAL 命令。

127.0.0.1:6379> EVAL "return {KEYS[1],KEYS[2],ARGV[1],ARGV[2]}" 2 key1 key2 first second
1) "key1"
2) "key2"
3) "first"
4) "second"

10. redis 备份和安全

127.0.0.1:6379> CONFIG get requirepass  //默认redis 没有设置密码
1) "requirepass"
2) ""
127.0.0.1:6379> CONFIG set requirepass "tutorialspoint" //设置密码
OK
127.0.0.1:6379> AUTH "tutorialspoint" //使用密码认证
OK
127.0.0.1:6379> set key1 test
OK
127.0.0.1:6379> get key1
"test"
127.0.0.1:6379> save  //该命令将在Redis目录创建dump.rdb.
OK

高级用法

通过java app 连接到redis server

前提条件:

使用maven 创建java project

ninjamac@ip-192-168-1-2 java % mvn archetype:generate -DgroupId=com.example -DartifactId=myapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
[INFO] Scanning for projects...
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: basedir, Value: /Users/ninjamac/java
[INFO] Parameter: package, Value: com.example
[INFO] Parameter: groupId, Value: com.example
[INFO] Parameter: artifactId, Value: myapp
[INFO] Parameter: packageName, Value: com.example
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: /Users/ninjamac/java/myapp
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:15 min
[INFO] Finished at: 2025-04-24T17:34:22+08:00
[INFO] ------------------------------------------------------------------------

编辑pom.xml 文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>myapp</artifactId><packaging>jar</packaging><version>1.0-SNAPSHOT</version><name>myapp</name><url>http://maven.apache.org</url><dependencies><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.10.1</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.3.0</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies>
</project>

编写App.java 

package com.example;
import com.google.gson.Gson;
import redis.clients.jedis.Jedis;public class App {public static void main(String[] args) {// Connect to Redis server on localhostJedis jedis = new Jedis("localhost", 6379);System.out.println("Connection to server successful");// Set data in Redisjedis.set("tutorial-name", "Redis tutorial");// Get data from RedisSystem.out.println("Stored string in redis: " + jedis.get("tutorial-name"));}
}

运行mvn clean install编译项目

mvn clean install

运行编译后的jar 文件,该程序向redis server添加一个名为tutorial-name的键,值为Redis tutorial

ninjamac@ip-192-168-1-2 myapp % java -cp "target/myapp-1.0-SNAPSHOT.jar:/Users/ninjamac/.m2/repository/redis/clients/jedis/4.3.0/jedis-4.3.0.jar:/Users/ninjamac/.m2/repository/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar" com.example.App
Connection to server successful
Stored string in redis: Redis tutorial

通过redis-cli来验证:

127.0.0.1:6379> get tutorial-name"Redis tutorial"

相关文章:

Redis 基础和高级用法入门

redis 是什么&#xff1f; Redis是一个远程内存数据库&#xff0c;它不仅性能强劲&#xff0c;而且还具有复制特性以及为解决问题而生的独一无二的数据模型。Redis提供了5种不同类型的数据结构&#xff0c;各式各样的问题都可以很自然地映射到这些数据结构上&#xff1a…...

使用vue2开发一个在线旅游预订平台-前端静态网站项目练习

hello,大家好&#xff0c;今天给大家再分享一个前端vue2练习项目-在线旅游预订平台。我们在学习编程的时候&#xff0c;除了学习编程的基础知识&#xff0c;为了让我们快速的掌握一门编程技术&#xff0c;肯定离不开各种项目的练习&#xff0c;今天分享的这个前端练习项目&…...

Ext Direct 功能与使用详解

Ext Direct 是 Ext JS 框架中的一个功能模块,旨在简化前端 JavaScript 应用与后端服务器之间的通信。其核心思想是通过远程过程调用(RPC)协议,将服务器端的方法透明地映射为前端可直接调用的 JavaScript 函数,从而减少手动编写 Ajax 请求和处理响应的代码量。 一、Ext Dir…...

Android移动应用开发入门示例:Activity跳转界面

介绍如何使用LinearLayout布局实现基本的UI设计&#xff0c;并实现两个Activity之间的跳转&#xff0c;适合刚接触Android Studio的新手学习。我们将使用Java语言开发&#xff0c;布局采用XML文件。以下为完整源码与运行说明&#xff1a; 案例前的准备工作&#xff1a; 1.1XM…...

【hadoop】HBase分布式数据库安装部署

一、HBase集群的安装与配置 步骤&#xff1a; 1、使用XFTP将HBase安装包hbase-1.2.0-bin.tar.gz发送到master机器的主目录。 2、解压安装包&#xff1a; tar -zxvf ~/hbase-1.2.0-bin.tar.gz 3、修改文件夹的名字&#xff0c;将其改为hbase&#xff0c;或者创建软连接也可…...

理解npm的工作原理:优化你的项目依赖管理流程

目录 什么是npm npm核心功能 npm 常用指令及其作用 执行npm i 发生了什么? 1. 解析命令与参数 2. 检查依赖文件 3. 依赖版本解析与树构建 4. 缓存检查与包下载 5. 解压包到 node_modules 6. 更新 package-lock.json 7. 处理特殊依赖类型 8. 执行生命周期脚本 9. …...

【Python笔记 04】输入函数、转义字符

一、Input 输入函数 prompt是提示&#xff0c;会在控制台显示&#xff0c;用作提示函数。 name input("请输入您的姓名&#xff1a;") print (name)提示你输入任意信息&#xff1a; 输入input test后回车&#xff0c;他输出input test 二、常用的转义字符 只讲…...

MySQL数据库基本操作-DQL-基本查询

数据库的操作中&#xff0c;查询是最重要的 一、基本查询-数据准备 -- 数据准备 create database if not exists mydb2; use mydb2; create table product( pid int primary key auto_increment, pname varchar(20) not null, price double, category_id varchar(20) …...

13、性能优化:魔法的流畅之道——React 19 memo/lazy

一、记忆封印术&#xff08;React.memo&#xff09; 1. 咒语本质 "memo是时间转换器的记忆晶石&#xff0c;冻结无意义的能量波动&#xff01;" 通过浅层比较&#xff08;shallowCompare&#xff09;或自定义预言契约&#xff0c;阻止组件在props未变时重新渲染。 …...

低代码平台开发手机USB-HID调试助手

项目介绍 USB-HID调试助手是一种专门用于调试和测试USB-HID设备的软件工具。USB-HID设备是一类通过USB接口与计算机通信的设备&#xff0c;常见的HID设备包括键盘、鼠标、游戏控制器、以及一些专用的工业控制设备等。 主要功能包括&#xff1a; 数据监控&#xff1a;实时监控和…...

Langchain_Agent+数据库

本处使用Agent数据库&#xff0c;可以直接执行SQL语句。可以多次循环查询问题 前文通过chain去联系数据库并进行操作&#xff1b; 通过链的不断内嵌组合&#xff0c;生成SQL在执行SQL再返回。 初始化 import os from operator import itemgetterimport bs4 from langchain.ch…...

Code Splitting 分包策略

以下是关于分包策略(Code Splitting)的深度技术解析,涵盖原理、策略、工具实现及优化技巧: 一、分包核心价值与底层原理 1. 核心价值矩阵 维度未分包场景合理分包后首屏速度需加载全部资源仅加载关键资源缓存效率任意修改导致全量缓存失效按模块变更频率分层缓存并行加载单…...

AI 开发入门之 RAG 技术

目录 一、从一个简单的问题开始二、语言模型“闭卷考试”的困境三、RAG 是什么—LLM 的现实世界“外挂”四、RAG 的七步流程第一步&#xff1a;加载数据&#xff08;Load&#xff09;第二步&#xff1a;切分文本&#xff08;Chunking&#xff09;第三步&#xff1a;向量化&…...

day36图像处理OpenCV

文章目录 一、图像预处理18 模板匹配18.1模板匹配18.2 匹配方法18.2.1 平方差匹配18.2.2 归一化平方差匹配18.2.3 相关匹配18.2.4 归一化相关匹配18.2.5 相关系数匹配18.2.6 归一化相关系数匹配 18.3 绘制轮廓18.4案例 一、图像预处理 18 模板匹配 18.1模板匹配 模板匹配就是…...

系统与网络安全------弹性交换网络(3)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 STP协议 环路的危害 单点故障 PC之间的互通链路仅仅存在1个 任何一条链路出现问题&#xff0c;PC之间都会无法通信 解决办法 提高网络可靠性 增加冗余/备份链路 增加备份链路后交换网络上产生二层环路 …...

FPGA上实现YOLOv5的一般过程

在FPGA上实现YOLOv5 YOLO算法现在被工业界广泛的应用&#xff0c;虽说现在有很多的NPU供我们使用&#xff0c;但是我们为了自己去实现一个NPU所以在本文中去实现了一个可以在FPGA上运行的YOLOv5。 YOLOv5的开源代码链接为 https://github.com/ultralytics/yolov5 为了在FPGA中…...

verilog和system verilog常用数据类型以及常量汇总

int和unsigned 在 Verilog-2001 中&#xff0c;没有 int 和 unsigned 这样的数据类型。这些关键字是 SystemVerilog 的特性&#xff0c;而不是 Verilog-2001 的一部分。 Verilog-2001 的数据类型 在 Verilog-2001 中&#xff0c;支持的数据类型主要包括以下几种&#xff1a; …...

wordpress学习笔记

P1 P2 P3...

Rust 学习笔记:编程语言的相关概念

Rust 学习笔记&#xff1a;编程语言的相关概念 Rust 学习笔记&#xff1a;编程语言的相关概念动态类型 vs 静态类型动态类型 (Dynamically Typed)静态类型 (Statically Typed)对比示例 强类型 vs 弱类型强类型 (Strongly Typed)弱类型 (Weakly Typed)对比示例 编译型语言 vs 解…...

react nativeWebView跨页面通信

场景 react native项目里&#xff0c;有一些移动端的应用喜欢使用h5来开发&#xff0c;会出现需要跨tab和跨页面通信的场景&#xff0c;可以使用pubsub-js来实现通信。 实现思路 在react native 层实现pubsub的公共API&#xff0c;提供订阅消息、发布消息、取消订阅接口&…...

Python爬虫(3)HTML核心技巧:从零掌握class与id选择器,精准定位网页元素

目录 一、背景与意义‌二、class与id的基础概念与语法规则‌2.1 什么是class与id&#xff1f;‌2.2 核心区别总结 三、应用场景与实战案例‌3.1 场景1&#xff1a;CSS样式管理‌3.2 场景2&#xff1a;JavaScript交互‌3.3 场景3&#xff1a;SEO优化与语义化‌ 四、常见误区与最…...

BGE(BAAI General Embedding)模型详解

BGE&#xff08;BAAI General Embedding&#xff09;模型详解 BGE&#xff08;BAAI General Embedding&#xff09;是北京智源人工智能研究院&#xff08;BAAI&#xff09;推出的通用文本嵌入模型系列&#xff0c;旨在为各种自然语言处理任务提供高质量的向量表示。 一、BGE模…...

【Linux网络】应用层自定义协议与序列化及Socket模拟封装

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

Rust项目GPG签名配置指南

Rust项目GPG签名配置指南 一、环境准备 # 安装Gpg4win&#xff08;Windows&#xff09; winget install -e --id GnuPG.Gpg4win二、密钥生成与配置 # 生成RSA4096密钥 gpg --full-generate-key # 类型选RSA and RSA&#xff0c;长度4096&#xff0c;邮箱填z3266420686202216…...

6.第六章:数据分类的技术体系

文章目录 6.1 数据分类的技术架构6.1.1 数据分类的整体流程6.1.2 数据分类的技术组件6.1.2.1 数据采集与预处理6.1.2.2 特征工程与选择6.1.2.3 分类模型构建6.1.2.4 模型评估与优化6.1.2.5 分类结果应用与反馈 6.2 数据分类的核心技术与算法6.2.1 传统机器学习算法6.2.2 深度学…...

Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?它能干哈?

Nginx 反向代理的理解与配置 User 我打包了我的前端vue项目&#xff0c;上传到服务器&#xff0c;在宝塔面板安装了nginx服务&#xff0c;配置了文件 nginx.txt .运行了项目。 我想清楚&#xff0c;什么是nginx反向代理&#xff1f;是nginx作为一个中介&#xff1f;中间件来集…...

下篇:深入剖析 BLE GATT / GAP / SMP 与应用层(约5000字)

引言 在 BLE 协议栈的最上层,GAP 定义设备角色与连接管理,GATT 构建服务与特征,SMP 负责安全保障,应用层则承载具体业务逻辑与 Profile。掌握这一层,可实现安全可靠的设备发现、配对、服务交互和定制化业务。本文将详解 GAP、GATT、SMP 三大模块,并通过示例、PlantUML 时…...

Linux Awk 深度解析:10个生产级自动化与云原生场景

看图猜诗&#xff0c;你有任何想法都可以在评论区留言哦~ 摘要 Awk 作为 Linux 文本处理三剑客中的“数据工程师”&#xff0c;凭借字段分割、模式匹配和数学运算三位一体的能力&#xff0c;成为处理结构化文本&#xff08;日志、CSV、配置文件&#xff09;的终极工具。本文聚…...

无人设备遥控之调度自动化技术篇

无人设备遥控器的调度自动化技术是现代科技发展的重要成果&#xff0c;它通过集成先进的通信、控制、传感器及人工智能技术&#xff0c;实现了对无人设备的高效、精准调度与自动化管理。 一、核心技术 无线通信技术 调度自动化依赖于高速、稳定的无线通信网络&#xff08;如5…...

STM32F407 HAL库使用 DMA_Normal 模式实现 UART 循环发送(无需中断)

在 STM32 开发中&#xff0c;很多人喜欢使用 DMA 来加速串口发送数据。然而&#xff0c;默认的 DMA 往往配合中断或使用循环模式&#xff08;DMA_CIRCULAR&#xff09;使用。但在某些特定需求下&#xff0c;我们希望&#xff1a; 使用 DMA_NORMAL 模式&#xff0c;确保 DMA 每次…...

汽车自动驾驶介绍

0 Preface/Foreword 1 介绍 1.1 FSD FSD: Full Self-Driving&#xff0c;完全自动驾驶 &#xff08;Tesla&#xff09; 1.2 自动驾驶级别 L0 - L2&#xff1a;辅助驾驶L3&#xff1a;有条件自动驾驶L4/5 &#xff1a;高度/完全自动驾驶...

Uniapp-小程序从入门到精通

沉淀UNIAPP项目精华模版 ******************************************************************************************************************************************* 1、数据库的导入SQL **************************************************************************…...

深度剖析操作系统核心(第一节):从X86/ARM/MIPS处理器架构到虚拟内存、分段分页、Linux内存管理,再揭秘进程线程限制与优化秘籍,助你成为OS高手!

文章目录 OS处理器X86ARMMIPSPowerPC 内存管理虚拟内存内存分段内存分页段页式内存管理Linux 内存管理 OS 处理器 常见处理器有X86、ARM、MIPS、PowerPC四种。 X86 X86架构是芯片巨头Intel设计制造的一种微处理器体系结构的统称。如果这样说你不理解&#xff0c;那么当我说…...

基于 EFISH-SBC-RK3588 的无人机通信云端数据处理模块方案‌

一、硬件架构设计‌ ‌核心计算单元&#xff08;EFISH-SBC-RK3588&#xff09;‌ ‌异构计算能力‌&#xff1a;搭载 8 核 ARM 架构&#xff08;4Cortex-A762.4GHz 4Cortex-A551.8GHz&#xff09;&#xff0c;集成 6 TOPS NPU 与 Mali-G610 GPU&#xff0c;支持多任务并行处理…...

Unity 内置Standard Shader UNITY_BRDF_PBS函数分析 (二)

四、BRDF1_Unity_PBS // 主物理基BRDF实现 // 基于Disney工作并以Torrance-Sparrow微面模型为基础 // 公式&#xff1a; // BRDF kD / π kS * (D * V * F) / 4 // I BRDF * (N L) // // * NDF&#xff08;法线分布函数&#xff09;可根据 UNITY_BRDF_GGX 选择&#…...

GitHub万星项目维护者分享:开源协作的避坑指南

GitHub万星项目维护者分享&#xff1a;开源协作的避坑指南 ——开发者张三与237个文件改动PR的五年战争 序幕&#xff1a;深夜的炸弹 2019年夏天&#xff0c;张三维护的开源项目TerminalX刚突破8000星&#xff0c;一个标题猩红的PR突然弹出&#xff1a;“彻底重构&#xff0…...

Linux基础篇、第四章_01软件安装rpm_yum_源码安装_二进制安装

Linux基础篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; ————laowang 基础命令&#xff1a;rpm、yum、源码安装、二进制安装 一、rpm本地安装&#xff1a; (无需网络安装&#xff0c;无法解决软件依赖) rpm -ivh …...

焊接机排错

焊接机 一、前定位后焊接 两个机台&#xff0c;①极柱定位&#xff0c;相机定位所有极柱点和mark点&#xff1b;②焊接机&#xff0c;相机定位mark点原理&#xff1a;极柱定位在成功定位到所有极柱点和mark点后&#xff0c;可以建立mark点和极柱点的关系。焊接机定位到mark点…...

4.2 Prompt工程与任务建模:高效提示词设计与任务拆解方法

提示词工程&#xff08;Prompt Engineering&#xff09;和任务建模&#xff08;Task Modeling&#xff09;已成为构建高效智能代理&#xff08;Agent&#xff09;系统的核心技术。提示词工程通过精心设计的自然语言提示词&#xff08;Prompts&#xff09;&#xff0c;引导大型语…...

oracle 锁的添加方式和死锁的解决

DML锁添加方式 DML 锁可由一个用户进程以显式的方式加锁&#xff0c;也可通过某些 SQL 语句隐含方式实现。 DML 锁有三种加锁方式&#xff1a;共享锁方式、独占锁方式、共享更新。 共享锁&#xff0c;独占锁用于 TM 锁&#xff0c;共享锁用于 TX 锁。 1)共享方式的表级锁 共享方…...

Nginx 二进制部署与 Docker 部署深度对比

一、核心概念解析 1. 二进制部署 通过包管理器&#xff08;如 apt/yum&#xff09;或源码编译安装 Nginx&#xff0c;直接运行在宿主机上。其特点包括&#xff1a; 直接性&#xff1a;与操作系统深度绑定&#xff0c;直接使用系统库和内核功能 。定制化&#xff1a;支持通过…...

以太网的mac帧格式

一.以太网的mac帧 帧的要求 1.长度 2.物理层...

每日算法-250424

每日算法打卡 (24/04/25) - LeetCode 2971 & 1647 记录一下今天解决的两道 LeetCode 题目 2971. 找到最大周长的多边形 题目 思路 贪心 一个基本的多边形构成条件是&#xff1a;最长边必须小于其他所有边的长度之和。 为了找到周长最大的多边形&#xff0c;我们应该尽可能…...

在本地部署n8n:完整指南

n8n是一个强大的工作流自动化工具&#xff0c;可以帮助你连接不同的应用程序和服务&#xff0c;无需编写复杂的代码。本指南将带你完成在本地计算机上部署n8n的完整过程。 什么是n8n&#xff1f; n8n&#xff08;发音为"n-eight-n"&#xff09;是一个开源的工作流自…...

棋盘格角点检测顺序问题

文章目录 前言一、OpenCV函数测试二、原因分析三、libcbdetect修改总结 前言 棋盘格角点检测在相机拼接、机械臂手眼标定中等应用很广泛&#xff0c;通常也要求尽量各种角度摆放从而保证标定精度。然后就自然想到了这个问题&#xff1a;如果棋盘格任意角度摆放怎么能对应上角点…...

C++之类和对象:定义,实例化,this指针,封装

C语言是面向过程的&#xff0c;C是面向对象的&#xff0c;利用对象交互&#xff0c;接口完成事情。 类的定义&#xff1a; 我们在C语言中可以用struct创建自定义结构体&#xff0c;在C中可以在结构体中定义函数了&#xff0c;这种就被称为类。 #include<iostream> usi…...

Ubuntu系统下交叉编译iperf3

一、参考资料 Linux下iperf3移植到arm下测试100M网口-CSDN博客 Iperf3移植到ARM Linux及使用教程-CSDN博客 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编…...

游戏引擎学习第243天:异步纹理下载

仓库 https://gitee.com/mrxiao_com/2d_game_6 https://gitee.com/mrxiao_com/2d_game_5 回顾并为今天设定阶段 目前的开发工作主要回到了图形渲染相关的部分。我们之前写了自己的软件渲染器&#xff0c;这个渲染器性能意外地好&#xff0c;甚至可以以相对不错的帧率运行过场…...

27、Session有什么重⼤BUG?微软提出了什么⽅法加以解决?

Session的重大BUG 1、进程回收导致Session丢失 原理&#xff1a; IIS的进程回收机制会在系统繁忙、达到特定内存阈值等情况下&#xff0c;自动回收工作进程&#xff08;w3wp.exe&#xff09;。由于Session数据默认存储在进程内存中&#xff0c;进程回收时这些数据会被清除。 …...

机器学习在网络安全中的应用:守护数字世界的防线

一、引言 随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为全球关注的焦点。传统的网络安全防护手段&#xff0c;如防火墙、入侵检测系统&#xff08;IDS&#xff09;和防病毒软件&#xff0c;虽然在一定程度上能够抵御攻击&#xff0c;但在面对复杂多…...