# Redis 入门到精通(五)-- redis 持久化(2)

news2024/9/9 1:17:49

Redis 入门到精通(五)-- redis 持久化(2)

一、redis 持久化–save 配置与工作原理

1、RDB 启动方式:反复执行保存指令,忘记了怎么办?不知道数据产生了多少变化,何时保存?

采用 redis 自动执行。

  • 谁:redis服务器发起指令(基于条件)。
  • 什么时间:满足条件。
  • 干什么事情:保存数据。

2、RDB 启动方式 ——save 配置

  • 1)配置: save second changes

  • 2)作用:满足限定时间范围内key的变化数量达到指定数量即进行持久化。

  • 3)参数:

    second:监控时间范围。
    changes:监控key的变化量。

  • 4)位置:在 conf 文件中进行配置。

  • 5)范例:

    save 900 1
    save 300 10
    save 60 10000

3、修改 /conf/redis-6379.conf 配置文件,添加 redis 自动执行 save 指令相关配置。指定配置文件,启动 redis 服务,


# 切换到 redis 安装目录 
cd /usr/local/redis/redis-4.0.0/

# 查看 redis 服务是否后台启动成功:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-
root     24153     1  0 01:03 ?        00:00:21 redis-server *:6379
root     24402  1538  0 08:41 pts/3    00:00:00 grep --color=auto redis-
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 

# 杀死 redis 服务进程 
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# kill -s 9 24153
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-
root     24404  1538  0 08:42 pts/3    00:00:00 grep --color=auto redis-
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 

# 修改 conf/redis-6379.conf 配置文件,添加 redis 自动执行 save 指令相关配置。
vim conf/redis-6379.conf 

# 添加如下配置(每102个变化就自动保存):
save 10 2

# 删除 data 目录下的其他 dump.rdb 文件 
rm -rf data/dump*

# 指定配置文件,启动 redis 服务:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-server conf/redis-6379.conf


# 客户端执行 save 后,再次查看 dump-6379.rdb 文件内容:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data

root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# cat data/dump-6379.rdb 
REDIs0008dis-ver4.0.0edis-bitsctimefed-memf-preamblerepl-id(3807de8be5a58a80693a6a91fb91d33a68ce217ap1-offsetlname
redis-6379age 0;root@WIN-20240529B1A: /usr/local/redis/redis-4.0.0root@wIN-20240529BJA:/usr/1ocal/redis/redis-4.0.0#

# 当客户端 创建1个数据时,查询 data 下,只有日志文件。
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 20
drwxr-xr-x 2 root root 4096 Jul 16 08:43 ./
drwxrwxr-x 8 root root 4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 6899 Jul 16 08:45 6379.log
-rw-r--r-- 1 root root 1754 Jul 15 23:26 6380.log
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 

# 当客户端 创建2个数据时,再次查询data 下,多了一个 dump-6379.rdb 文件。
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 24
drwxr-xr-x 2 root root 4096 Jul 16 08:51 ./
drwxrwxr-x 8 root root 4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 7224 Jul 16 08:51 6379.log
-rw-r--r-- 1 root root 1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root  186 Jul 16 08:51 dump-6379.rdb
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 

# 执行2次get,数据无变化,也不会自动保存
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 24
drwxr-xr-x 2 root root 4096 Jul 16 08:51 ./
drwxrwxr-x 8 root root 4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 7224 Jul 16 08:51 6379.log
-rw-r--r-- 1 root root 1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root  186 Jul 16 08:51 dump-6379.rdb
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 

# 执行2次 get,数据无变化,也不会自动保存
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 24
drwxr-xr-x 2 root root 4096 Jul 16 08:51 ./
drwxrwxr-x 8 root root 4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 7224 Jul 16 08:51 6379.log
-rw-r--r-- 1 root root 1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root  186 Jul 16 08:51 dump-6379.rdb

# 执行2次 del 和 set,数据有变化,自动保存
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 24
drwxr-xr-x 2 root root 4096 Jul 16 09:01 ./
drwxrwxr-x 8 root root 4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 7549 Jul 16 09:01 6379.log
-rw-r--r-- 1 root root 1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root  169 Jul 16 09:01 dump-6379.rdb
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 

4、打开另一终端,连接 redis 客户端,创建的数据,测试是否自动保存。


# 启动另一客户端:

# 切换到 redis 安装目录 
cd /usr/local/redis/redis-4.0.0/

# 指定端口号,启动 redis 客户端:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-cli -p 6379

# 查看所有 key 
127.0.0.1:6379> keys *

# 创建一个数据,查看服务端,不会自动保存
127.0.0.1:6379> set name redis-6379
OK

# 创建第2个数据,查看服务端,已经自动保存
127.0.0.1:6379> set age 38
OK 

# 执行2次 get,数据无变化,也不会自动保存
127.0.0.1:6379> get name
"redis-6379"
127.0.0.1:6379> get age
"38"

# 执行2次 del 和 set,数据有变化,自动保存
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> set age 33
OK
127.0.0.1:6379> 

在这里插入图片描述

5、RDB启动方式 ——save 配置原理

38-RDB启动方式save配置原理.png

6、注意事项:

  • save 配置要根据实际业务情况进行设置,频度过高或过低都会出现性能问题,结果可能是灾难性的。
  • save 配置中对于 second 与 changes 设置通常具有互补对应关系,尽量不要设置成包含性关系。
  • save 配置启动后执行的是 bgsave 操作。

二、redis 持久化–RDB 三种启动方式对比与优缺点分析

1、RDB 三种启动方式对比

方式save指令bgsave指令
读写同步异步
阻塞客户端指令
额外内存消耗
启动新进程

2、rdb 特殊启动形式

  • 全量复制: 在主从复制中详细讲解。
  • 服务器运行过程中重启: debug reload。
  • 关闭服务器时指定保存数据:shutdown save。

默认情况下执行shutdown命令时,自动执行 bgsave(如果没有开启AOF持久化功能)。

3、RDB 优点:

  • RDB 是一个紧凑压缩的二进制文件,存储效率较高。
  • RDB 内部存储的是 redis 在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景。
  • RDB 恢复数据的速度要比 AOF 快很多。
  • 应用:服务器中每X小时执行 bgsave 备份,并将 RDB 文件拷贝到远程机器中,用于灾难恢复。

4、RDB 缺点:

  • RDB 方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性丢失数据。
  • bgsave 指令每次运行要执行fork操作创建子进程,要牺牲掉一些性能。
  • Redis 的众多版本中未进行RDB文件格式的版本统一,有可能出现各版本服务之间数据格式无法兼容现象。

三、redis 持久化–AOF 简介

1、RDB 存储的弊端

 存储数据量较大,效率较低,基于快照思想,每次读写都是全部数据,当数据量巨大时,效率非常低。
 大数据量下的IO性能较低。
 基于fork创建子进程,内存产生额外消耗。
 宕机带来的数据丢失风险。

2、解决思路

 不写全数据,仅记录部分数据。
 降低区分数据是否改变的难度,改记录数据为记录操作过程。
 对所有操作均进行记录,排除丢失数据的风险。

3、AOF概念

 AOF(append only file)持久化:以独立日志的方式记录每次写命令,重启时再重新执行AOF文件中命令
达到恢复数据的目的。与RDB相比可以简单描述为改记录数据为记录数据产生的过程。

 AOF的主要作用是解决了数据持久化的实时性,目前已经是Redis持久化的主流方式。

四、redis 持久化–AOF 持久化策略基本操作

1、AOF 写数据过程

40-AOF写数据过程.png

2、AOF 写数据三种策略 (appendfsync)

  • always(每次)
    每次写入操作均同步到AOF文件中,数据零误差,性能较低,不建议使用。
  • everysec(每秒)
    每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能较高,建议使用,也是默认配置。
    在系统突然宕机的情况下丢失1秒内的数据。
  • no(系统控制)
    由操作系统控制每次同步到AOF文件的周期,整体过程不可控。

3、AOF 功能开启


- 配置:
	appendonly yes|no

- 作用:
	是否开启AOF持久化功能,默认为不开启状态。
	
- 配置
	appendfsync always|everysec|no
	
- 作用:
	AOF 写数据策略。
	
- 配置
	appendfilename filename。
	
- 作用
	AOF持久化文件名,默认文件名未appendonly.aof,建议配置为 appendonly-端口号.aof。
	
- 配置
	dir 
	
- 作用
	AOF持久化文件保存路径,与RDB持久化文件保持一致即可。	

4、修改 /conf/redis-6379.conf 配置文件,添加 AOF持久化策略。指定配置文件,启动 redis 服务,


# 切换到 redis 安装目录 
cd /usr/local/redis/redis-4.0.0/

# 查看 redis 服务是否后台启动成功:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-
root     24408     1  0 08:45 ?        00:00:04 redis-server *:6379
root     24426  1538  0 10:16 pts/3    00:00:00 grep --color=auto redis-

# 杀死 redis 服务进程 
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# kill -s 9 24408
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-
root     24428  1538  0 10:16 pts/3    00:00:00 grep --color=auto redis-

# 修改 conf/redis-6379.conf 配置文件,添加 AOF持久化策略。
vim conf/redis-6379.conf 

# 添加如下配置
appendonly yes
appendfsync always
# appendfsync everysec
# appendfsync no

# 删除 data 目录下的其他 dump.rdb 文件 
rm -rf data/dump*

# 指定配置文件,启动 redis 服务:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-server conf/redis-6379.conf

# 查看 data 文件夹下文件列表,多出一个 appendonly.aof 文件,容量0:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 28
drwxr-xr-x 2 root root 4096 Jul 16 10:21 ./
drwxrwxr-x 8 root root 4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 8754 Jul 16 10:21 6379.log
-rw-r--r-- 1 root root 1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root    0 Jul 16 10:21 appendonly.aof
-rw-r--r-- 1 root root  169 Jul 16 09:01 dump-6379.rdb

# 客户端创建数据后,再次查看 data 文件夹下文件列表,appendonly.aof 文件,容量增大:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 32
drwxr-xr-x 2 root root 4096 Jul 16 10:21 ./
drwxrwxr-x 8 root root 4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 8754 Jul 16 10:21 6379.log
-rw-r--r-- 1 root root 1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root   63 Jul 16 10:26 appendonly.aof
-rw-r--r-- 1 root root  169 Jul 16 09:01 dump-6379.rdb
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 32
drwxr-xr-x 2 root root 4096 Jul 16 10:40 ./
drwxrwxr-x 8 root root 4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 9079 Jul 16 10:40 6379.log
-rw-r--r-- 1 root root 1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root   93 Jul 16 10:40 appendonly.aof
-rw-r--r-- 1 root root  186 Jul 16 10:40 dump-6379.rdb


# 执行2次 get,数据无变化,appendonly.aof 文件大小无变化
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 32
drwxr-xr-x 2 root root 4096 Jul 16 10:40 ./
drwxrwxr-x 8 root root 4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 9079 Jul 16 10:40 6379.log
-rw-r--r-- 1 root root 1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root   93 Jul 16 10:40 appendonly.aof
-rw-r--r-- 1 root root  186 Jul 16 10:40 dump-6379.rdb

# 查看 appendonly.aof 文件内容 
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# cat data/appendonly.aof 
*2
$6
SELECT
$1
0
*3
$3
set
$4
name
$10
redis-6379
*3
$3
set
$3
age
$2
38


# 再次修改 conf/redis-6379.conf 配置文件,添加 AOF 持久化策略。重新测试。
vim conf/redis-6379.conf 

# 保存以下内容即可:
port 6379
daemonize yes
logfile "6379.log"

# redis 持久化 -- RDB 相关配置
# data 目录为新建目录(设置存储.rdb文件的路径)
dir /usr/local/redis/redis-4.0.0/data

# 设置本地数据库文件名:
dbfilename dump-6379.rdb
# 设置存储至本地数据库时是否压缩数据
rdbcompression yes
# 设置是否进行 RDB 文件格式校验
rdbchecksum yes

# save配置(每10秒有2次数据变化就自动保存)
save 10 2

# 添加如下配置(AOF存储功能)
# 开启AOF持久化功能
appendonly yes
# AOF写数据策略(每秒)
appendfsync everysec


5、打开另一终端,连接 redis 客户端,创建的数据,测试AOF持久化策略基本操作。


# 启动另一客户端:

# 切换到 redis 安装目录 
cd /usr/local/redis/redis-4.0.0/

# 指定端口号,启动 redis 客户端:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-cli -p 6379

# 查看所有 key 
127.0.0.1:6379> keys *

# 创建一个数据,查看服务端,appendonly.aof 有数据
127.0.0.1:6379> set name redis-6379
OK

# 创建第2个数据,查看服务端,appendonly.aof 文件大小增加了
127.0.0.1:6379> set age 38
OK 

# 执行2次 get,数据无变化,appendonly.aof 文件大小无变化
127.0.0.1:6379> get name
"redis-6379"
127.0.0.1:6379> get age
"38"

# 执行2次 del 和 set,数据有变化,自动保存
127.0.0.1:6379> del name
(integer) 1
127.0.0.1:6379> set age 33
OK
127.0.0.1:6379> 

41-AOF持久化策略基本操作.png

五、redis 持久化–AOF 重写概念与命令执行

1、AOF 写数据遇到的问题

42-AOF写数据遇到的问题.png

2、AOF 重写

随着命令不断写入 AOF,文件会越来越大,为了解决这个问题,Redis 引入了AOF重写机制压缩文件体积。AOF 文件重
写是将 Redis 进程内的数据转化为写命令同步到新AOF文件的过程。简单说就是将对同一个数据的若干个条命令执行结
果转化成最终结果数据对应的指令进行记录。

3、AOF重写作用

  • 降低磁盘占用量,提高磁盘利用率。
  • 提高持久化效率,降低持久化写时间,提高IO性能。
  • 降低数据恢复用时,提高数据恢复效率。

4、AOF 重写规则

  • 进程内已超时的数据不再写入文件
  • 忽略无效指令,重写时使用进程内数据直接生成,这样新的AOF文件只保留最终数据的写入命令。
    如 del key1、 hdel key2、srem key3、set key4 111、set key4 222 等。
  • 对同一数据的多条写命令合并为一条命令、
    如lpush list1 a、lpush list1 b、 lpush list1 c 可以转化为:lpush list1 a b c。 为防止数据量过大造成客户端缓冲区溢出,对list、set、hash、zset等类型,每条指令最多写入64个元素。

5、AOF 重写方式

  • 手动重写:
    bgrewriteaof
  • 自动重写:
    auto-aof-rewrite-min-size size
    auto-aof-rewrite-percentage percentage

6、redis 持久化操作–AOF 重写概念与命令执行

修改 /conf/redis-6379.conf 配置文件,添加 AOF持久化策略。指定配置文件,启动 redis 服务,


# 切换到 redis 安装目录 
cd /usr/local/redis/redis-4.0.0/

# 查看 redis 服务是否后台启动成功:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-
root     24436     1  0 10:21 ?        00:00:10 redis-server *:6379
root     25004  1538  0 14:14 pts/3    00:00:00 grep --color=auto redis-

# 杀死 redis 服务进程 
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# kill -s 9 24436
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-
root     25006  1538  0 14:15 pts/3    00:00:00 grep --color=auto redis-

# 修改 conf/redis-6379.conf 配置文件,添加 AOF持久化策略。
vim conf/redis-6379.conf 

# 保存以下内容即可:
port 6379
daemonize yes
logfile "6379.log"

# redis 持久化 -- RDB 相关配置
# data 目录为新建目录(设置存储.rdb文件的路径)
dir /usr/local/redis/redis-4.0.0/data

# 设置本地数据库文件名:
dbfilename dump-6379.rdb
# 设置存储至本地数据库时是否压缩数据
rdbcompression yes
# 设置是否进行 RDB 文件格式校验
rdbchecksum yes

# save配置(每10秒有2次数据变化就自动保存)
save 10 2

# 添加如下配置(AOF存储功能)
# 开启AOF持久化功能
appendonly yes
# AOF写数据策略(每次)
appendfsync always
# 设置文件名
appendfilename appendonly-6379.aof


# 删除 data 目录下的其他文件 
rm -rf data/dump*
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# rm -rf data/appendonly.aof

# 指定配置文件,启动 redis 服务:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0#  redis-server conf/redis-6379.conf
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ps -ef | grep redis-    
root     25017     1  1 14:23 ?        00:00:00 redis-server *:6379
root     25022  1538  0 14:23 pts/3    00:00:00 grep --color=auto redis-

# 查看 data 文件夹下文件列表,多出一个 appendonly-6379.aof 文件,容量0:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data             
total 24
drwxr-xr-x 2 root root  4096 Jul 16 14:23 ./
drwxrwxr-x 8 root root  4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 10284 Jul 16 14:23 6379.log
-rw-r--r-- 1 root root  1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root     0 Jul 16 14:23 appendonly-6379.aof

# 客户端创建数据后,再次查看 data 文件夹下文件列表,appendonly.aof 文件,容量增大:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 32
drwxr-xr-x 2 root root  4096 Jul 16 14:30 ./
drwxrwxr-x 8 root root  4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 10609 Jul 16 14:30 6379.log
-rw-r--r-- 1 root root  1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root    95 Jul 16 14:30 appendonly-6379.aof
-rw-r--r-- 1 root root   176 Jul 16 14:30 dump-6379.rdb
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# 
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 32
drwxr-xr-x 2 root root  4096 Jul 16 14:30 ./
drwxrwxr-x 8 root root  4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 10609 Jul 16 14:30 6379.log
-rw-r--r-- 1 root root  1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root   131 Jul 16 14:30 appendonly-6379.aof
-rw-r--r-- 1 root root   176 Jul 16 14:30 dump-6379.rdb

# 客户端执行重写操作后,查看服务端,appendonly-6379.aof 文件大小,发现减小了。
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# ll data
total 32
drwxr-xr-x 2 root root  4096 Jul 16 14:32 ./
drwxrwxr-x 8 root root  4096 Jul 15 22:28 ../
-rw-r--r-- 1 root root 11350 Jul 16 14:32 6379.log
-rw-r--r-- 1 root root  1754 Jul 15 23:26 6380.log
-rw-r--r-- 1 root root    59 Jul 16 14:32 appendonly-6379.aof
-rw-r--r-- 1 root root   176 Jul 16 14:30 dump-6379.rdb

7、打开另一终端,连接 redis 客户端,创建的数据,测试AOF持久化策略基本操作。


# 启动另一客户端:

# 切换到 redis 安装目录 
cd /usr/local/redis/redis-4.0.0/

# 指定端口号,启动 redis 客户端:
root@WIN-20240529BJA:/usr/local/redis/redis-4.0.0# redis-cli -p 6379

# 查看所有 key 
127.0.0.1:6379> keys *
(empty list or set)

# 创建一个数据,查看服务端,appendonly-6379.aof 有数据
127.0.0.1:6379> set name redis-1
OK

# 更改name值,查看服务端,appendonly-6379.aof 文件大小增加了
127.0.0.1:6379> set name redis-2
OK 

# 更改name值,查看服务端,appendonly-6379.aof 文件大小增加了
127.0.0.1:6379> set name redis-3

# 执行重写操作,查看服务端,appendonly-6379.aof 文件大小,发现减小了。
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started

43-AOF持久化策略基本操作-重写操作.png

8、AOF手动重写 —— bgrewriteaof指令工作原理

 41-AOF持久化策略基本操作.png

上一节关联链接请点击:
# Redis 入门到精通(五)-- redis 持久化(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1929328.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多核并行加速 tokenizer

import multiprocessingdef tokenize_text(text):return tokenizer(text, truncationTrue, paddingTrue, max_length256)def parallel_tokenize(texts, num_processesNone):"""使用多核并行处理文本分词"""with multiprocessing.Pool(processesn…

uniapp开发APP,主动连接mqtt,订阅消息

一、安装依赖 通过查阅资料,了解到现在mqtt.js库的最新版本已经是5,但是目前应该mqtt3.0.0版本最为稳定,我项目开发中使用的也是mqtt3.0.0版本 npm install mqtt3.0.0 参考插件:MQTT使用-模板项目 - DCloud 插件市场 参考文档…

鸿蒙Harmony--文本组件Text属性详解

金樽清酒斗十千,玉盘珍羞直万钱。 停杯投箸不能食,拔剑四顾心茫然。 欲渡黄河冰塞川,将登太行雪满山。 闲来垂钓碧溪上,忽复乘舟梦日边。 行路难,行路难,多歧路,今安在? 长风破浪会有…

java中的String 以及其方法(超详细!!!)

文章目录 一、String类型是什么String不可变的原因(经典面试题)String不可变的好处 二、String的常用构造形式1.使用常量串构造2.使用newString对象构造3.字符串数组构造 三、常用方法1. length() 获取字符串的长度2. charAt() 获取字符串中指定字符的值 (代码单元)3. codePoin…

ES快速开发,ElasticsearchRestTemplate基本使用以及ELK快速部署

最近博主有一些elasticsearch的工作,所以更新的慢了些,现在就教大家快速入门,并对一些基本的查询、更新需求做一下示例,废话不多说开始: 1. ES快速上手 es下载:[https://elasticsearch.cn/download/]()这…

记录|C#连接PLC通讯

参考视频C#连接S71200PLC 参考资料 目录 前言一、使用工具二、博图PLC1.创建好PLC设备Step1. 创建新设备Step2. 自动配置CPUStep3. 配置IP协议和连接机制隐藏步骤:重置解决PLC硬件版本和PLCSim创建的PLC版本不兼容Step4. 通过HslDemo来测试是否连通Step5. 配置DB数据…

C语言课程回顾:十、C语言之 指针

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 C语言之 指针 10 指针10.1 地址指针的基本概念10.2 变量的指针和指向变量的指针变量10.2.1 定义一个指针变量10.2.2 指针变量的引用10.2.3 指针变量作为函数参数10.2.4 指针变…

性能测试中唯一标识的JMH测试

前文分享了几种性能测试中常用到的生成全局唯一标识的案例,虽然在文中我猜测了几种方案设计的性能,并根据自己的经验给出了适用的场景。 但对于一个性能测试工程师来讲,有真是测试数据才更有说服力。这让我想起来之前学过的Java微基准测试框…

记录些MySQL题集(2)

MySQL 不使用limit的分页查询 limit问题:limit,offset递增问题。随着offset的增加,条数不变,耗时却增加了。 limit 0,10 耗时1ms limit 300000,10 耗时152ms limit 600000,10 耗时312ms 毫秒级别可能没感觉。假…

java:aocache 与Spring Aop兼容问题

本文适用于所有AspectJ与Spring AOP混用的场景。 Spring AOP 是基于动态代理的实现AOP,基于 JDK代理和CGLib代理实现运行时织入(runtime weaving)。 Spring AOP的切面定义沿用了ASpectJ的注解体系,所以在Spring体系中注解定义切面…

Java 将图片转base64和base64转图片

工具 Base64 和 图片互转。 导入的依赖 <!-- https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl --><dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>4.0.5</versi…

【Hot100】LeetCode—118. 杨辉三角

目录 题目1- 思路2- 实现⭐118. 杨辉三角——题解思路 3- ACM 实现 题目 原题连接&#xff1a;118. 杨辉三角 1- 思路 思路 爬楼梯&#xff1a;动规五部曲 2- 实现 ⭐118. 杨辉三角——题解思路 class Solution {List<List<Integer>> res new ArrayList<&g…

嵌入式全栈设计思路:STM32G4+ChibiOS+FreeRTOS+PID控制+PFC算法构建高效智能电源管理系统(附代码示例)

智能电源管理系统是一个基于STM32G4微控制器的高性能数字电源控制解决方案。本项目旨在设计一个功能全面、高效稳定的电源管理系统,可广泛应用于工业控制、新能源、通信设备等领域。 1.1 系统主要特点 高精度数字电源控制&#xff1a;利用STM32G4的高性能ADC和定时器,实现精确…

2024年肥西县“北斗·劳技科普进校园”赛事活动圆满举行

2024年6月13日肥西县“北斗劳技科普进校园”赛事活动在肥西实验高级中学圆满举行。本次赛事由肥西县关心下一代工作委员会和肥西县教育体育局主办&#xff0c;肥西县航空航海模型协会承办&#xff0c;肥西县实验高级中学协办&#xff0c;并得到了赛哆哆、凡尼科技中心和肥西艾瞳…

为什么渲染农场渲染的是帧,而不是视频?

在3D动画产业的壮阔画卷中&#xff0c;渲染农场作为幕后英雄&#xff0c;以其庞大的计算能力支撑起无数视觉奇观的诞生。这些由高性能计算机集群构成的系统&#xff0c;通过独特的逐帧渲染策略&#xff0c;解锁了单机难以企及的创作自由与效率。本文将深入剖析这一策略背后的逻…

springcloud使用微服务的搭建

微服务的搭建 1.配置对应信息 Springboot 、springcloud、springcloud alibaba对应关系 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 2.pom.xml的配置 2.1 总项目pom.xml引入依赖 <parent><groupId>org.sprin…

从库存超卖问题分析锁和分布式锁的应用(二)

本文从一个经典的库存超卖问题分析说明常见锁的应用&#xff0c;假设库存资源存储在Redis里面。 假设我们的减库存代码如下&#xff1a; Autowired StringRedisTemplate redisTemplate;public void deduct(){String stock redisTemplate.opsForValue().get("stock"…

docker desktop历史版本安装

1.安装choco Windows安装 choco包管理工具-CSDN博客 2.通过choco安装 下面例子为安装旧版2.3.0.2,其它版本类似 Chocolatey Software | Docker Desktop 2.3.0.2 https://download.docker.com/win/stable/45183/Docker%20Desktop%20Installer.exe choco install docker-des…

linux高级编程(网络)(www,http,URL)

数据的封包和拆包 封包&#xff1a; 应用层数据&#xff08;例如HTTP请求&#xff09;被传递给传输层。传输层&#xff08;TCP&#xff09;在数据前添加TCP头部&#xff08;包含端口号、序列号等&#xff09;。网络层&#xff08;IP&#xff09;在TCP段前添加IP头部&#xff…

【从0到1进阶Redis】主从复制 — 主从机宕机测试

上一篇&#xff1a;【从0到1进阶Redis】主从复制 测试&#xff1a;主机断开连接&#xff0c;从机依旧连接到主机的&#xff0c;但是没有写操作&#xff0c;这个时候&#xff0c;主机如果回来了&#xff0c;从机依旧可以直接获取到主机写的信息。 如果是使用命令行&#xff0c;来…