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

Redis单例部署

目录

  • 1. 概述
  • 2. 参考
  • 3. 环境
  • 4. 部署
    • 4.1 操作系统
      • 4.1.1 修改系统参数
      • 4.1.2 关闭透明大页内存
      • 4.1.3 修改系统限制
    • 4.2 安装Redis
      • 4.2.1 下载Redis
      • 4.2.2 创建redis账号
      • 4.2.3 添加Redis环境变量
      • 4.2.4 创建Redis使用目录
      • 4.2.5 安装Redis
      • 4.2.6 手动修改配置文件(**可跳过,直接使用4.2.7命令修改**)
      • 4.2.7 命令修改配置文件
      • 4.2.8 Redis使用目录赋权
      • 4.2.9 启动Redis验证
      • 4.2.10 目录结构
    • 4.3 配置systemd管理
      • 4.3.1 编译安装时未使用systemd
      • 4.3.2 编译安装时使用了systemd方式
      • 4.3.3 加载并验证服务
    • 4.3 部署常见问题
      • 4.3.1 编译时环境问题
      • 4.3.2 编译时缺少文件

1. 概述

之前一直使用Redis,最近遇到一些问题,整理Redis的单例安装部署过程,记录如下。

2. 参考

  1. 链接: Install Redis
  2. 链接: github-Redis
  3. 链接: gitcode-Redis

3. 环境

  • 虚机Virtual-Machine-203
  • Ubuntu 22.04(Centos7.9也可以)
  • Redis 7.2.5

4. 部署

4.1 操作系统

4.1.1 修改系统参数

  • 添加以下系统参数(必须)
cat >> /etc/sysctl.conf << EOF
# Redis 必须使用参数
#定义了系统中每一个端口最大的监听队列的长度,默认4096 可调整到8192/16384/32768
net.core.somaxconn = 32768# Redis 必须使用参数
# 1表示内核允许分配所有的物理内存,而不管当前的内存状态如何,默认0。
vm.overcommit_memory = 1# Redis 建议使用参数
# 物理内存使用90%,才开始使用swap,默认60,也可以设置为0,优先使用100%物理内存
vm.swappiness = 10# 大于100将更积极的回收cache,默认100,
vm.vfs_cache_pressure = 100EOF
  • 添加以下系统参数(可选)
cat >> /etc/sysctl.conf << EOF
# 系统调优参数
# 允许存在time_wait状态的最大数值,超过则立刻被清除并且警告 
# 默认是262144, ubuntu默认8192,防止过多的time_wait导致端口资源被耗尽
net.ipv4.tcp_max_tw_buckets = 30000# 开启SYN Cookies,当出现SYN 等待队列溢出时,启用cookies 来处理。
net.ipv4.tcp_syncookies = 1# 该参数决定了,每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目,默认1000
net.core.netdev_max_backlog = 32768# 表示SYN队列的长度,默认2048
net.ipv4.tcp_max_syn_backlog = 32768# 建立连接syn+ack 与syn 包重试次数
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2EOF
  • 参数生效
sysctl -p

4.1.2 关闭透明大页内存

  • 关闭透明大页内存动态分配,需要关闭让 redis 或 mongo 负责内存管理
cat >> /etc/rc.local << EOF
# Redis Mongo建议参数
# Disable Transparent Huge Pages, redis and mongo configure
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
  • 加载生效
source /etc/rc.local

4.1.3 修改系统限制

cp /etc/security/limits.conf /etc/security/limits.conf.bak
cat>>/etc/security/limits.conf <<EOF
* soft nproc 655350
* hard nproc 655350
* soft nofile 655350
* hard nofile 655350# ubuntu 需要针对账号设置
root soft nproc 655350
root hard nproc 655350
root soft nofile 655350
root hard nofile 655350
EOF
  • 重启或重新登录生效
  • 修改当前设置生效
ulimit -n 655350 
ulimit -u 655350 

4.2 安装Redis

4.2.1 下载Redis

  • 从官网或 github下载,需要看一下版本,选择没有重大安全问题的版本
    • https://github.com/redis/redis/releases
    • http://download.redis.io/releases/redis-7.2.5.tar.gz
wget http://download.redis.io/releases/redis-7.2.5.tar.gz

4.2.2 创建redis账号

useradd -s /sbin/nologin redis

4.2.3 添加Redis环境变量

  • 确定Redis安装路径,例如/usr/local/redis7.2.5
  • 增加环境变量 REDIS_HOME ,不要与已有路径冲突
cat >>/etc/profile<<EOFexport REDIS_HOME=/usr/local/redis7.2.5
PATH=\$REDIS_HOME/bin:\$PATH
export PATH
EOF
  • 加载生效,查看路径
source /etc/profile && echo $PATH

4.2.4 创建Redis使用目录

  • 创建Redis使用目录
    • /usr/local/redis7.2.5(REDIS_HOME):程序存放目录
    • /var/log/redis:日志存放目录
    • /var/run/redis:服务PID存放目录
    • /etc/redis:配置文件存放目录(可选),当前默认存放在“程序存放目录”下
mkdir -p ${REDIS_HOME} && chown -R redis:redis ${REDIS_HOME}
mkdir -p /var/log/redis && chown redis:redis /var/log/redis
mkdir -p /var/run/redis && chown -R redis:redis /var/run/redis
# mkdir -p /etc/redis && chown -R redis:redis /etc/redis

4.2.5 安装Redis

安装可以根据Redis服务启动管理,选择安装方式。可提供以下几种方式,供选择:

  1. 使用systemctl命令管理(Centos7、Ubuntu),编译安装时指定 USE_SYSTEMD=yes 选项,配置systemd服务管理文件时Type使用notify
  2. 使用systemctl命令管理(Centos7、Ubuntu),编译安装,配置systemd服务管理文件时Type使用simple
  3. 使用service命令管理(Centos6),编译安装,配置/etc/init.d下启动文件
  • Ubuntu支持systemd方式编译安装,能够支持Type=notify
    • PREFIX 指定安装路径
    • USE_SYSTEMD 支持systemd
# Ubuntu 安装
tar -zxvf redis-7.2.5.tar.gz && cd redis-7.2.5
# 安装依赖包
apt install -y libsystemd-dev pkg-config
# 可以使用支持systemd方式编译安装,能够支持Type=notify
make PREFIX=${REDIS_HOME} USE_SYSTEMD=yes install
  • Centos支持systemd方式编译安装,能够支持Type=notify
    • PREFIX 指定安装路径
    • USE_SYSTEMD 支持systemd
# Centos 安装
tar -zxvf redis-7.2.5.tar.gz && cd redis-7.2.5
# 安装依赖包
yum install -y systemd-notify-devel 
# 可以使用支持systemd方式编译安装,能够支持Type=notify
make PREFIX=${REDIS_HOME} USE_SYSTEMD=yes install
  • 其他编译安装,可用于service命令(如Centos6)或systemd的simple
    • PREFIX 指定安装路径
tar -zxvf redis-6.2.9.tar.gz && cd redis-6.2.9
make PREFIX=${REDIS_HOME} install
  • 验证安装版本
${REDIS_HOME}/bin/redis-server --version

4.2.6 手动修改配置文件(可跳过,直接使用4.2.7命令修改

  • 拷贝配置文件到安装路径下并修改。
cp ./redis.conf ${REDIS_HOME}/ && cd ${REDIS_HOME}
  • 修改监听地址,IPv4和IPv6均监听
#bind 127.0.0.1 -::1
bind * -::*
  • 根据需要修改监听端口
# Accept connections on the specified port, default is 6379 (IANA #815344).
# If port 0 is specified Redis will not listen on a TCP socket.
port 6379
  • 修改监听队列长度,小于sysctl.conf文件中的somaxconn 设置
# In high requests-per-second environments you need a high backlog in order
# to avoid slow clients connection issues. Note that the Linux kernel
# will silently truncate it to the value of /proc/sys/net/core/somaxconn so
# make sure to raise both the value of somaxconn and tcp_max_syn_backlog
# in order to get the desired effect.
#tcp-backlog 511
tcp-backlog 4096
  • timeout保持不变,配合应用程序保持长连接。
    注意它不是超时连接,它是空闲后等待多久后关闭。
# Close the connection after a client is idle for N seconds (0 to disable)
timeout 0
  • tcp-keepalive保持不变
    服务端于探测客户端的检测时间周期。可根据需要调整
tcp-keepalive 300
  • 启动后台运行
#daemonize no
daemonize yes
  • 修改pid文件路径
#pidfile /var/run/redis_6379.pid
pidfile /var/run/redis/redis_6379.pid
  • 修改日志文件路径
#logfile ""
logfile "/var/log/redis/redis_6379.log"
  • 修改snapshotting配置
    需要综合考虑数据是否允许丢失和写入rdb的频率。
    这里是允许数据丢失的,而且变更的频次不高,所以只修改了900秒内有500个变更的值
################################ SNAPSHOTTING  ################################# Save the DB to disk.
#
# You can set these explicitly by uncommenting the following line.
#
# save 3600 1 300 100 60 10000
save 3600 1 900 500 60 10000
  • 修改了dump.rdb的文件名称
# The filename where to dump the DBdbfilename dump_6379.rdb
  • 修改了dump.rdb的存储路径
    注意路径是否有足够的磁盘空间。最合理方式应该存储在单独的数据分区,创建目录并给redis账号赋权
# dir ./
dir /usr/local/redis/
  • 修改连接密码
# requirepass foobaredrequirepass yourpassword
  • 重命名危险命令
    • config命令使用别名
    • 其它命令被禁用
# rename-command CONFIG ""rename-command CONFIG "kkconfig"rename-command FLUSHALL ""rename-command FLUSHDB ""rename-command DEBUG ""
  • 修改最大客户端连接数
# maxclients 10000
maxclients 50000
  • 修改最大内存限制
    如果是redis专用服务器,建议不超过物理内存的3/4
# maxmemory <bytes>
maxmemory 32GB
  • 保持淘汰策略不变-不淘汰
    通常情况下应该选择一个淘汰策略,而不是不淘汰
# maxmemory-policy noeviction
  • 打开异步操作,防止单线程阻塞
    • lazyfree-lazy-eviction:表示当 Redis 运行内存超过 maxmeory 时,是否开启 lazy free 机制删除;
    • lazyfree-lazy-expire:表示设置了过期时间的键值,当过期之后是否开启 lazy free 机制删除;
    • lazyfree-lazy-server-del:有些指令在处理已存在的键时,会带有一个隐式的 del 键的操作,比如 rename 命令,当目标键已存在,Redis 会先删除目标键,如果这些目标键是一个 big key,就会造成阻塞删除的问题,此配置表示在这种场景中是否开启 lazy free 机制删除;
    • slave-lazy-flush:针对 slave(从节点) 进行全量数据同步,slave 在加载 master 的 RDB 文件前,会运行 flushall 来清理自己的数据,它表示此时是否开启 lazy free 机制删除。
    • lazyfree-lazy-user-del:表示是否将 DEL 指令的默认行为替换成 lazy free 机制删除,效果就跟 UNLINK 一样。
############################# LAZY FREEING ####################################
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
replica-lazy-flush yes
lazyfree-lazy-user-del yes
  • 修改慢查询日志设置
################################## SLOW LOG ###################################
# 修改为20000微秒,默认是10000微秒
slowlog-log-slower-than 20000
# 修改为保存1000条记录,默认128条
slowlog-max-len 1000

4.2.7 命令修改配置文件

  • 拷贝配置文件到安装路径下并修改。
cp ./redis.conf ${REDIS_HOME}/ && cd ${REDIS_HOME}
  • 先定义以下变量
    • PORT: Redis服务监听端口
    • MAXMEMORY:Redis服务最大内存限制
    • YPWD:Redis服务密码
cd ${REDIS_HOME}
PORT=6379
MAXMEMORY='32GB'
YPWD='yourpassword'
sed -i "s|bind 127.0.0.1 -::1| bind * -::* |" ./redis.conf \
&& sed -i "s|port 6379| port ${PORT}|" ./redis.conf \
&& sed -i "s|tcp-backlog 511| tcp-backlog 4096|" ./redis.conf \
&& sed -i "s|daemonize no| daemonize yes|" ./redis.conf \
&& sed -i "s|pidfile /var/run/redis_6379.pid| pidfile /var/run/redis/redis_${PORT}.pid|" ./redis.conf \
&& sed -i "s|logfile \"\"| logfile \"/var/log/redis/redis_${PORT}.log\"|" ./redis.conf \
&& sed -i "s|# save 3600 1 300 100 60 10000| save 3600 1 900 500 60 10000|" ./redis.conf \
&& sed -i "s|# save 3600 1| save 3600 1|" ./redis.conf \
&& sed -i "s|# save 300 100| save 900 500|" ./redis.conf \
&& sed -i "s|# save 60 10000| save 60 10000|" ./redis.conf \
&& sed -i "s|dbfilename dump.rdb| dbfilename dump_${PORT}.rdb|" ./redis.conf \
&& sed -i "s|dir ./| dir ${REDIS_HOME}/|" ./redis.conf \
&& sed -i "s|# requirepass foobared| requirepass ${YPWD}|" ./redis.conf \
&& sed -i "/# rename-command CONFIG \"\"/ a\\ rename-command CONFIG 'xkconfig'\n rename-command FLUSHALL ''\n rename-command FLUSHDB ''\n rename-command DEBUG ''\n"  ./redis.conf \
&& sed -i "s|# maxclients 10000| maxclients 50000|" ./redis.conf \
&& sed -i "s|# maxmemory <bytes>| maxmemory ${MAXMEMORY}|" ./redis.conf \
&& sed -i "s|lazyfree-lazy-eviction no| lazyfree-lazy-eviction yes|" ./redis.conf \
&& sed -i "s|lazyfree-lazy-expire no| lazyfree-lazy-expire yes|" ./redis.conf \
&& sed -i "s|lazyfree-lazy-server-del no| lazyfree-lazy-server-del yes|" ./redis.conf \
&& sed -i "s|replica-lazy-flush no| replica-lazy-flush yes|" ./redis.conf \
&& sed -i "s|lazyfree-lazy-user-del no| lazyfree-lazy-user-del yes|" ./redis.conf \
&& sed -i "s|slowlog-log-slower-than 10000| slowlog-log-slower-than 20000|" ./redis.conf \
&& sed -i "s|slowlog-max-len 128| slowlog-max-len 1000|" ./redis.conf \
  • 验证修改配置
cat ${REDIS_HOME}/redis.conf | grep -E "^[^;#]"

4.2.8 Redis使用目录赋权

# 日志目录赋权
chown -R redis:redis /var/log/redis
# 程序目录赋权
chown -R redis:redis /usr/local/redis
# pid文件目录赋权
chown -R redis:redis /var/run/redis
# 数据目录赋权(如果单独指定了数据目录),与配置文件中rdb存储路径一致
#chown -R redis:redis /data/redis/
chown -R redis:redis /var/log/redis \
&& chown -R redis:redis /var/run/redis \
&& chown -R redis:redis ${REDIS_HOME} \

4.2.9 启动Redis验证

  • 使用普通用户启动Redis
 sudo -u redis /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf 
  • Redis已经监听6379端口
root@Virtual-Machine-203:~# netstat -ntlp| grep redis
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      19821/redis-server  
tcp6       0      0 ::1:6379                :::*                    LISTEN      19821/redis-server  
root@Virtual-Machine-203:~# redis-cli 
127.0.0.1:6379> auth yourpassword
OK
127.0.0.1:6379> select 0
OK
127.0.0.1:6379> dbsize
(integer) 0
127.0.0.1:6379> kkconfig get save
1) "save"
2) "3600 1 900 500 60 10000"
127.0.0.1:6379> 

4.2.10 目录结构

  1. Redis安装目录
  • ${REDIS_HOME} = /etc/usr/redis7.2.5
    • bin 程序目录,已添加到系统环境变量PATH中
    • dump_port.rdb 持久化rdb文件,每个对应一个节点
    • redis.conf 单例服务配置文件
[root@localhost redis7.2.5]# tree
.
├── bin
│   ├── redis-benchmark
│   ├── redis-check-aof -> redis-server
│   ├── redis-check-rdb -> redis-server
│   ├── redis-cli
│   ├── redis-sentinel -> redis-server
│   └── redis-server
├── dump_6379.rdb
└── redis.conf
  1. Redis日志目录
  • /var/log/redis
    • 每个Redis服务实例对应一个日志文件
[root@localhost redis]# tree
.
└── redis_6379.log
  1. Redis PID目录
  • /var/run/redis
    • 每个Redis服务实例对应一个PID文件
[root@localhost redis]# tree
.
└── redis_6379.pid

4.3 配置systemd管理

4.3.1 编译安装时未使用systemd

非正规做法!正常应该编译时指定使用systemd
https://github.com/redis/redis/commit/129d14e1431e913426485526663e1a9aac67838c

在这里插入图片描述

vim /etc/systemd/system/redis-server.service
# example systemd service unit file for redis-server
#
# In order to use this as a template for providing a redis service in your
# environment, _at the very least_ make sure to adapt the redis configuration
# file you intend to use as needed (make sure to set "supervised systemd"), and
# to set sane TimeoutStartSec and TimeoutStopSec property values in the unit's
# "[Service]" section to fit your needs.
#
# Some properties, such as User= and Group=, are highly desirable for virtually
# all deployments of redis, but cannot be provided in a manner that fits all
# expectable environments. Some of these properties have been commented out in
# this example service unit file, but you are highly encouraged to set them to
# fit your needs.
#
# Please refer to systemd.unit(5), systemd.service(5), and systemd.exec(5) for
# more information.[Unit]
Description=Redis data structure server
Documentation=https://redis.io/documentation
#Before=your_application.service another_example_application.service
#AssertPathExists=/var/lib/redis
Wants=network-online.target
After=network-online.target[Service]
# 配置正确的服务和配置文件路径
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf --supervised systemd --daemonize no
## Alternatively, have redis-server load a configuration file:
#ExecStart=/usr/local/bin/redis-server /path/to/your/redis.conf
ExecStop=/bin/kill -s TERM $MAINPID
LimitNOFILE=65535
NoNewPrivileges=yes
#OOMScoreAdjust=-900
PrivateTmp=yes
#Type=notify  # 默认 simple
TimeoutStartSec=infinity
TimeoutStopSec=infinity
UMask=0077
User=redis
Group=redis
WorkingDirectory=/usr/local/redis[Install]
WantedBy=multi-user.target
  • 替换配置文件中Redis路径
    如果使用默认路径/usr/local/redis,不用执行
# sed -i "s|/usr/local/redis|${REDIS_HOME}|g" /etc/systemd/system/redis-server.service 

4.3.2 编译安装时使用了systemd方式

vim /etc/systemd/system/redis-server.service
# example systemd service unit file for redis-server
#
# In order to use this as a template for providing a redis service in your
# environment, _at the very least_ make sure to adapt the redis configuration
# file you intend to use as needed (make sure to set "supervised systemd"), and
# to set sane TimeoutStartSec and TimeoutStopSec property values in the unit's
# "[Service]" section to fit your needs.
#
# Some properties, such as User= and Group=, are highly desirable for virtually
# all deployments of redis, but cannot be provided in a manner that fits all
# expectable environments. Some of these properties have been commented out in
# this example service unit file, but you are highly encouraged to set them to
# fit your needs.
#
# Please refer to systemd.unit(5), systemd.service(5), and systemd.exec(5) for
# more information.[Unit]
Description=Redis data structure server
Documentation=https://redis.io/documentation
#Before=your_application.service another_example_application.service
#AssertPathExists=/var/lib/redis
Wants=network-online.target
After=network-online.target[Service]
# 配置正确的服务和配置文件路径
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf --supervised systemd --daemonize no
## Alternatively, have redis-server load a configuration file:
#ExecStart=/usr/local/bin/redis-server /path/to/your/redis.conf
LimitNOFILE=65535
NoNewPrivileges=yes
#OOMScoreAdjust=-900
PrivateTmp=yes
Type=notify
#TimeoutStartSec=infinity
#TimeoutStopSec=infinity
TimeoutStartSec=180
TimeoutStopSec=180
UMask=0077
User=redis
Group=redis
WorkingDirectory=/usr/local/redis[Install]
WantedBy=multi-user.target
  • 替换配置文件中Redis路径
    如果使用默认路径/usr/local/redis,不用执行
# sed -i "s|/usr/local/redis|${REDIS_HOME}|g" /etc/systemd/system/redis-server.service 

4.3.3 加载并验证服务

  • 加载systemd配置文件,每次修改后都需要重新加载
systemctl daemon-reload
  • 验证服务启动
# 启动
systemctl start redis-server
# 查看进程
netstat -ntlp | grep redis
  • 验证服务重启
# 测试重启
systemctl restart redis-server
# 查看进程ID是否变更
netstat -ntlp | grep redis
  • 验证服务停止
# 测试重启
systemctl stop redis-server
# 查看进程ID是否变更
netstat -ntlp | grep redis

4.3 部署常见问题

4.3.1 编译时环境问题

  • 现象:Ubuntu 没装 GCC
make[1]: Entering directory '/root/redis-7.2.5/src'
sh: 1: cc: not found
/bin/sh: 1: pkg-config: not found
/bin/sh: 1: pkg-config: not found
/bin/sh: 1: pkg-config: not foundCC Makefile.dep
sh: 1: cc: not found
make[3]: 离开目录“/public/redis-7.2.5/deps/jemalloc”
make[2]: 离开目录“/public/redis-7.2.5/deps”CC adlist.oCC quicklist.oCC ae.oCC anet.oCC dict.oCC server.o
In file included from server.c:30:0:
server.h:58:31: 致命错误:systemd/sd-daemon.h:没有那个文件或目录#include <systemd/sd-daemon.h>^
编译中断。
make[1]: *** [server.o] 错误 1
make[1]: 离开目录“/public/redis-7.2.5/src”
make: *** [install] 错误 2
  • 处理:Ubuntu 22.04 安装
apt install build-essential pkg-config -y
  • 处理:如果是CentOS 7.9,参考安装
yum install make automake gcc gcc-c++ kernel-devel systemd-devel -y

4.3.2 编译时缺少文件

  • 现象:编译时缺文件
/usr/bin/ld: cannot find ../deps/hiredis/libhiredis.a: No such file or directory
/usr/bin/ld: cannot find ../deps/lua/src/liblua.a: No such file or directory
/usr/bin/ld: cannot find ../deps/hdr_histogram/libhdrhistogram.a: No such file or directory
/usr/bin/ld: cannot find ../deps/fpconv/libfpconv.a: No such file or directory
/usr/bin/ld: cannot find ../deps/jemalloc/lib/libjemalloc.a: No such file or directory
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:403: redis-server] Error 1
make[1]: Leaving directory '/root/redis-7.2.5/src'
make: *** [Makefile:9: install] Error 2
  • 处理:先编译缺少的文件
root@Virtual-Machine-203:~# cd deps/
root@Virtual-Machine-203:~# make hiredis lua hdr_histogram fpconv jemalloc linenoise# 如果jemalloc仍然不行,可以试试以下方式
#root@Virtual-Machine-203:~# cd  deps/jemalloc/
#root@Virtual-Machine-203:~#  ./configure
#root@Virtual-Machine-203:~#  make && make install_bin install_include install_lib

相关文章:

Redis单例部署

目录 1. 概述2. 参考3. 环境4. 部署4.1 操作系统4.1.1 修改系统参数4.1.2 关闭透明大页内存4.1.3 修改系统限制 4.2 安装Redis4.2.1 下载Redis4.2.2 创建redis账号4.2.3 添加Redis环境变量4.2.4 创建Redis使用目录4.2.5 安装Redis4.2.6 手动修改配置文件&#xff08;**可跳过&a…...

HarmonyOS4升级到Harmonyos Next(Api 11)学习捷径

HarmonyOS4升级到Harmonyos Next&#xff08;Api 11&#xff09;学习捷径&#xff0c;新技术学习路上少走弯路。HarmonyOS NEXT和HarmonyOS 4的基本语法都是一样的&#xff0c;但是还有一些区别。如果你学会HarmonyOS4&#xff0c;那么HarmonyOS Next也自然而然的会了。 Harmon…...

[电子电路学]电路分析基本概念1

第一章 电路分析的基本概念和基本定律 电路模型 反映实际电路部件的主要电磁性质的理想电路元件及其组合&#xff0c;是实际电路电气特性的抽象和近似。 理想电路元件 实际电路器件品种繁多&#xff0c;其电磁特性多元而复杂&#xff0c;分析和计算时非常困难。而理想电路元件…...

Linux bash: /usr/local/gcc/bin/gcc: 不是目录

ln -s /usr/local/bin/gcc /usr/bin/gcc ln -s /usr/local/bin/g /usr/bin/g 创建的软连接不生效 问题&#xff1a; [rootdev003 local]# gcc -v bash: /usr/local/gcc/bin/gcc: 不是目录 或者 [rootdev003 local]# gcc -v bash: /usr/local/bin/gcc: 没有那个文件或目录 解决&…...

vue项目中,pnpm不能用-解决

方法四&#xff1a;解决 PowerShell 执行策略问题 如果你决定继续使用 PowerShell&#xff0c;并且遇到执行策略问题&#xff0c;可以尝试以下方法解决&#xff1a; 永久更改执行策略&#xff1a; 在管理员权限的 PowerShell 中运行以下命令&#xff0c;以永久更改执行策略&am…...

数据处理python

1.列筛选 &#xff08;1&#xff09;某一列&某几列 对于一个表单里面的数据&#xff0c;如果我们想要对于这个表单里面的数据进行处理&#xff0c;我们可以一列一列进行处理&#xff0c;也可以多列一起进行处理&#xff1b; 一列一列处理&#xff1a; 只需要在这个dataf…...

【MotionCap】SLAHMR 在 Colab 的demo运行笔记

【MotionCap】SLAHMR slahmr将人类和相机运动与野外视频分离 CVPR 2023跳至主要内容 SLAHMR (supports 4D Humans).ipynb SLAHMR (supports 4D Humans).ipynb_笔记本已移除星标Google Colab demo for: SLAHMR - Simultaneous Localization And Human Mesh Recovery @inproc…...

Qt-Advanced-Docking-System示例程序

写了一些简单的示例程序&#xff0c;帮助我更好地使用和了解Qt-Advanced-Docking-System 1.写一个如图页面布局的程序 m_pDockMangernew ads::CDockManager(this);this->setCentralWidget(m_pDockManger);ads::CDockWidget* centerDockWidgetnew ads::CDockWidget("中…...

戴尔笔记本重装系统?笔记本卡顿失灵?一键重装系统!

随着科技的快速发展&#xff0c;笔记本电脑已成为我们日常生活和工作中不可或缺的工具。然而&#xff0c;随着时间的推移&#xff0c;笔记本可能会遇到各种问题&#xff0c;如系统卡顿、失灵等。这时&#xff0c;重装系统往往是一个有效的解决方案。本文将详细介绍如何在戴尔笔…...

ViewController 的常用跳转及返回方法

ViewController 的常用跳转及返回方法 ViewController 的常用跳转及返回方法模态跳转导航控制器选项卡控制器Storyboard 的 segues 方式跳转 ViewController 的常用跳转及返回方法 模态跳转 一个普通的视图控制器一般只有模态跳转的功能&#xff0c;这个方法是所有视图控制器…...

FFmpeg开发笔记(四十一)结合OBS与MediaMTX实现SRT直播推流

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外&#xff0c;还有于2017年推出的SRT协议&#xff0c;相比常见的RTMP协议&#xff0c;SRT协议具有更低的延迟&#xff0c;并且消…...

探索AI的巅峰:详解GPT-3.5与GPT-4系列模型的区别

人工智能领域不断涌现出令人惊叹的技术突破&#xff0c;其中OpenAI的ChatGPT系列模型尤为引人注目。随着GPT-4的发布&#xff0c;技术开发者们对比分析其与前一代GPT-3.5的差异显得尤为重要。本文将深入探讨GPT-3.5和GPT-4系列模型的主要区别&#xff0c;帮助大家更好地理解和应…...

Linux-笔记 使用SCP命令传输文件报错 :IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

前言 使用scp命令向开发板传输文件发生报错&#xff0c;报错见下图; 解决 rm -rf /home/<用户名>/.ssh/known_hosts 此方法同样适用于使用ssh命令连接开发板报错的情况。 参考 https://blog.csdn.net/westsource/article/details/6636096...

计算机网络 静态路由及动态路由RIP

一、理论知识 1.静态路由 静态路由是由网络管理员手动配置在路由器上的固定路由路径。其优点是简单和对网络拓扑变化不敏感&#xff0c;缺点是维护复杂、易出错&#xff0c;且无法自动适应网络变化。 2.动态路由协议RIP RIP是一种基于距离向量的动态路由协议。它使用跳数作…...

Django实现部门管理功能

在这篇文章中,我们将介绍如何使用Django框架实现一个简单的部门管理功能。这个功能包括部门列表展示、添加新部门、编辑和删除部门等操作。 1. 项目设置 首先,确保你已经安装了Django并创建了一个新的Django项目。在项目中,我们需要创建一个名为​​app01​​的应用。 2.…...

概率论与数理统计期末复习

概率论常考知识点汇总 总括 1. 基础概率论 概率定义&#xff1a;理解概率是事件发生的可能性度量&#xff0c;范围从0&#xff08;不可能&#xff09;到1&#xff08;必然发生&#xff09;。概率公理&#xff1a;掌握概率的三大公理&#xff0c;即非负性、规范性和可加性。条…...

python 识别图片点击,设置坐标,离设置坐标越近的优先识别点击

import pyautogui import cv2 import numpy as np import mathdef find_and_click(template_path, target_x, target_y, match_threshold0.8):"""在屏幕上查找目标图片并点击。Args:template_path: 目标图片的路径。target_x: 预设的坐标 x 轴值。target_y: 预设…...

【实战教程】如何使用JMeter来轻松测试WebSocket接口?

1、websocket接口原理 打开网页&#xff1a;从http协议&#xff0c;升级到websocket协议&#xff0c;请求建立websocket连接服务器返回建立成功成功客户端向服务端发送匹配请求服务端选择一个客服上线服务器返回客服id客户端向服务器发送消息服务器推送消息给指定的客服服务器…...

【linux】详解——库

目录 概述 库 库函数 静态库 动态库 制作动静态库 使用动静态库 如何让系统默认找到第三方库 lib和lib64的区别 /和/usr/和/usr/local下lib和lib64的区别 环境变量 配置相关文件 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 简介&#xff1a;C站最萌博主 相关…...

RuntimeError: “exp_vml_cpu“ not implemented for ‘Half‘

遇到 "exp_vml_cpu" not implemented for Half 这个运行时错误&#xff0c;意味着你尝试在一个操作中使用了半精度&#xff08;Half 或 float16&#xff09;数据类型&#xff0c;但是该操作在当前环境下并没有针对半精度数据类型的实现。 半精度&#xff08;float16&…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

日常一水C

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

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

算术操作符与类型转换:从基础到精通

目录 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符&#xff1a;、-、*、/、% 赋值操作符&#xff1a;和复合赋值 单⽬操作符&#xff1a;、--、、- 前言&#xff1a;从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?

系列回顾&#xff1a; 在上一篇《React核心概念&#xff1a;State是什么&#xff1f;》中&#xff0c;我们学习了如何使用useState让一个组件拥有自己的内部数据&#xff08;State&#xff09;&#xff0c;并通过一个计数器案例&#xff0c;实现了组件的自我更新。这很棒&#…...

大数据驱动企业决策智能化的路径与实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;数据驱动的企业竞争力重构 在这个瞬息万变的商业时代&#xff0c;“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...