Docker 搭建Redis集群
目录
1. 3主3从架构说明
2. 3主3从Redis集群配置
2.1关闭防火墙+启动docker后台服务
2.2 新建6个docker容器实例
2.3 进去任意一台redis容器,为6台机器构建集群关系
2.4 进去6381,查看集群状态
3. 主从容错切换迁移
3.1 数据读写存储
3.1.1 查看集群情况
3.2 容错切换迁移
3.2.1 Master6381 宕机
3.2.2 Master6381 重新启动
4. 主从扩容
4.1 新增机器 6387 6388 (run image 变成镜像)
4.2 将6387节点(空槽号)作为master节点加入原集群
4.3 第一次检查集群情况
4.4 重新分配槽号
4.5 第二次检查集群情况
4.6 为6387主节点分配6388从节点
4.7 第三次检查集群情况
5. 主从缩容 (6387和 6388 下线,退出集群)
5.1 删除6388 (从集群中移除6388从节点)
5.2 将6387(Master)的槽号清空,重新分配 (平均分给其他3个master)
5.3 第一次检查集群
5.4 将6387删除
5.5 第三次检查集群
1~2亿条数据需要存储,轻微如何设计这个存储案例?
答:单机单台100%不可能,肯定是分布式存储。redis如何落地?
一般业界有3种解决方案:
(1) 哈希取余分区
(2)一致性哈希算法分区
(3)哈希槽分区
详细解释参考之前的文档: Redis 集群(cluster)_redis集群不用哨兵-CSDN博客
1. 3主3从架构说明
2. 3主3从Redis集群配置
2.1关闭防火墙+启动docker后台服务
sudo systemctl stop firewalldsystemctl start docker
2.2 新建6个docker容器实例
docker run -d --name redis-node-1 --net host --privileged=true -v /mydocker/redis/share/redis-node-1:/data redis:7.2.4 --cluster-enabled yes --appendonly yes --port 6381docker run -d --name redis-node-2 --net host --privileged=true -v /mydocker/redis/share/redis-node-2:/data redis:7.2.4 --cluster-enabled yes --appendonly yes --port 6382docker run -d --name redis-node-3 --net host --privileged=true -v /mydocker/redis/share/redis-node-3:/data redis:7.2.4 --cluster-enabled yes --appendonly yes --port 6383docker run -d --name redis-node-4 --net host --privileged=true -v /mydocker/redis/share/redis-node-4:/data redis:7.2.4 --cluster-enabled yes --appendonly yes --port 6384docker run -d --name redis-node-5 --net host --privileged=true -v /mydocker/redis/share/redis-node-5:/data redis:7.2.4 --cluster-enabled yes --appendonly yes --port 6385docker run -d --name redis-node-6 --net host --privileged=true -v /mydocker/redis/share/redis-node-6:/data redis:7.2.4 --cluster-enabled yes --appendonly yes --port 6386--net host : 使用宿主机deIP和端口,默认
--privileged=true :容器卷,宿主机地址:docker内部地址
--cluster-enabled yes : 开启redis集群
--appendonly yes : 开启持久化[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6618c6a22bc3 redis:7.2.4 "docker-entrypoint.s…" 7 seconds ago Up 6 seconds redis-node-6
edab1b644f47 redis:7.2.4 "docker-entrypoint.s…" 15 seconds ago Up 14 seconds redis-node-5
d4cd712628c4 redis:7.2.4 "docker-entrypoint.s…" 23 seconds ago Up 22 seconds redis-node-4
7f09330818f1 redis:7.2.4 "docker-entrypoint.s…" 32 seconds ago Up 31 seconds redis-node-3
3fab905c25d6 redis:7.2.4 "docker-entrypoint.s…" 40 seconds ago Up 39 seconds redis-node-2
8fa8521a26d3 redis:7.2.4 "docker-entrypoint.s…" 3 minutes ago Up 3 minutes redis-node-1
[root@192 ~]#
2.3 进去任意一台redis容器,为6台机器构建集群关系
redis-cli --cluster create 192.168.217.149:6381 192.168.217.149:6382 192.168.217.149:6383 192.168.217.149:6384 192.168.217.149:6385 192.168.217.149:6386 --cluster-replicas 1--cluster-replicas 1 : 表示为每个master创建一个slave节点
2.4 进去6381,查看集群状态
127.0.0.1:6381> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:208
cluster_stats_messages_pong_sent:227
cluster_stats_messages_sent:435
cluster_stats_messages_ping_received:222
cluster_stats_messages_pong_received:208
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:435
total_cluster_links_buffer_limit_exceeded:0127.0.0.1:6381> cluster nodes
826c4e0230f439eb8aca84e3fa6842e0740ee7e2 192.168.217.149:6385@16385 slave 9829684324fd8294650429a00a6ad7dc32ca5357 0 1711277651000 2 connected
2359f4b4eb3d7843ce721a4032b8931f20752cf1 192.168.217.149:6381@16381 myself,master - 0 1711277651000 1 connected 0-5460
da41e72bb921e0c1d013f82df1c481dafb89e91e 192.168.217.149:6386@16386 slave b8b0f5a32e98ef3790108a0009a2e7c8c6115114 0 1711277651740 3 connected
9cd36c05e6125a3251fe7ba937af24da95599617 192.168.217.149:6384@16384 slave 2359f4b4eb3d7843ce721a4032b8931f20752cf1 0 1711277652748 1 connected
b8b0f5a32e98ef3790108a0009a2e7c8c6115114 192.168.217.149:6383@16383 master - 0 1711277652000 3 connected 10923-16383
9829684324fd8294650429a00a6ad7dc32ca5357 192.168.217.149:6382@16382 master - 0 1711277653757 2 connected 5461-10922
127.0.0.1:6381>
3. 主从容错切换迁移
3.1 数据读写存储
root@192:/data# redis-cli -p 6381
127.0.0.1:6381> keys *
(empty array)
127.0.0.1:6381> set k1 v1
(error) MOVED 12706 192.168.217.149:6383
127.0.0.1:6381> set k2 v2
OK
添加数据时出现:(error) MOVED 12706 192.168.217.149:6383
需要 redis-cli -p 6381 -c 以集群的方式连接
root@192:/data# redis-cli -p 6381 -c
127.0.0.1:6381> set k2 v2
OK
127.0.0.1:6381> set k1 v1
-> Redirected to slot [12706] located at 192.168.217.149:6383
OK
3.1.1 查看集群情况
root@192:/data# redis-cli --cluster check 192.168.217.149:6381192.168.217.149:6381 (2359f4b4...) -> 1 keys | 5461 slots | 1 slaves.
192.168.217.149:6383 (b8b0f5a3...) -> 1 keys | 5461 slots | 1 slaves.
192.168.217.149:6382 (98296843...) -> 0 keys | 5462 slots | 1 slaves.
[OK] 2 keys in 3 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.217.149:6381)
M: 2359f4b4eb3d7843ce721a4032b8931f20752cf1 192.168.217.149:6381slots:[0-5460] (5461 slots) master1 additional replica(s)
S: 826c4e0230f439eb8aca84e3fa6842e0740ee7e2 192.168.217.149:6385slots: (0 slots) slavereplicates 9829684324fd8294650429a00a6ad7dc32ca5357
S: da41e72bb921e0c1d013f82df1c481dafb89e91e 192.168.217.149:6386slots: (0 slots) slavereplicates b8b0f5a32e98ef3790108a0009a2e7c8c6115114
S: 9cd36c05e6125a3251fe7ba937af24da95599617 192.168.217.149:6384slots: (0 slots) slavereplicates 2359f4b4eb3d7843ce721a4032b8931f20752cf1
M: b8b0f5a32e98ef3790108a0009a2e7c8c6115114 192.168.217.149:6383slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: 9829684324fd8294650429a00a6ad7dc32ca5357 192.168.217.149:6382slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
root@192:/data#
3.2 容错切换迁移
3.2.1 Master6381 宕机
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6618c6a22bc3 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-6
edab1b644f47 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-5
d4cd712628c4 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-4
7f09330818f1 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-3
3fab905c25d6 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-2
8fa8521a26d3 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-1
[root@192 ~]# docker stop redis-node-1
redis-node-1[root@192 ~]# docker exec -it redis-node-2 /bin/bashroot@192:/data# redis-cli -p 6382 -c127.0.0.1:6382> cluster nodes
b8b0f5a32e98ef3790108a0009a2e7c8c6115114 192.168.217.149:6383@16383 master - 0 1711283738000 3 connected 10923-16383
da41e72bb921e0c1d013f82df1c481dafb89e91e 192.168.217.149:6386@16386 slave b8b0f5a32e98ef3790108a0009a2e7c8c6115114 0 1711283740817 3 connected
9829684324fd8294650429a00a6ad7dc32ca5357 192.168.217.149:6382@16382 myself,master - 0 1711283740000 2 connected 5461-10922
9cd36c05e6125a3251fe7ba937af24da95599617 192.168.217.149:6384@16384 master - 0 1711283739000 7 connected 0-5460
2359f4b4eb3d7843ce721a4032b8931f20752cf1 192.168.217.149:6381@16381 master,fail - 1711283644541 1711283639000 1 disconnected
826c4e0230f439eb8aca84e3fa6842e0740ee7e2 192.168.217.149:6385@16385 slave 9829684324fd8294650429a00a6ad7dc32ca5357 0 1711283741828 2 connected
127.0.0.1:6382>
结论:master 宕机,slave会自动上位变成master
3.2.2 Master6381 重新启动
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6618c6a22bc3 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-6
edab1b644f47 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-5
d4cd712628c4 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-4
7f09330818f1 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-3
3fab905c25d6 redis:7.2.4 "docker-entrypoint.s…" 2 hours ago Up 2 hours redis-node-2[root@192 ~]# docker start redis-node-1
redis-node-1[root@192 ~]# docker exec -it redis-node-1 /bin/bashroot@192:/data# redis-cli -p 6381 -c127.0.0.1:6381> cluster nodes
da41e72bb921e0c1d013f82df1c481dafb89e91e 192.168.217.149:6386@16386 slave b8b0f5a32e98ef3790108a0009a2e7c8c6115114 0 1711284415980 3 connected
826c4e0230f439eb8aca84e3fa6842e0740ee7e2 192.168.217.149:6385@16385 slave 9829684324fd8294650429a00a6ad7dc32ca5357 0 1711284414000 2 connected
9829684324fd8294650429a00a6ad7dc32ca5357 192.168.217.149:6382@16382 master - 0 1711284413000 2 connected 5461-10922
2359f4b4eb3d7843ce721a4032b8931f20752cf1 192.168.217.149:6381@16381 myself,slave 9cd36c05e6125a3251fe7ba937af24da95599617 0 1711284415000 7 connected
9cd36c05e6125a3251fe7ba937af24da95599617 192.168.217.149:6384@16384 master - 0 1711284416997 7 connected 0-5460
b8b0f5a32e98ef3790108a0009a2e7c8c6115114 192.168.217.149:6383@16383 master - 0 1711284415000 3 connected 10923-16383
结论: 即使之前宕机的Master 重新启动,加入集群之后也是slave。
4. 主从扩容
4.1 新增机器 6387 6388 (run image 变成镜像)
docker run -d --name redis-node-7 --net host --privileged=true -v /mydocker/redis/share/redis-node-7:/data redis:7.2.4 --cluster-enabled yes --appendonly yes --port 6387docker run -d --name redis-node-8 --net host --privileged=true -v /mydocker/redis/share/redis-node-8:/data redis:7.2.4 --cluster-enabled yes --appendonly yes --port 6388[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d55857af1d99 redis:7.2.4 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds redis-node-8
cfa322ef90bc redis:7.2.4 "docker-entrypoint.s…" 20 seconds ago Up 18 seconds redis-node-7
6618c6a22bc3 redis:7.2.4 "docker-entrypoint.s…" 23 hours ago Up 11 minutes redis-node-6
edab1b644f47 redis:7.2.4 "docker-entrypoint.s…" 23 hours ago Up 11 minutes redis-node-5
d4cd712628c4 redis:7.2.4 "docker-entrypoint.s…" 23 hours ago Up 8 minutes redis-node-4
7f09330818f1 redis:7.2.4 "docker-entrypoint.s…" 23 hours ago Up 11 minutes redis-node-3
3fab905c25d6 redis:7.2.4 "docker-entrypoint.s…" 23 hours ago Up 11 minutes redis-node-2
8fa8521a26d3 redis:7.2.4 "docker-entrypoint.s…" 23 hours ago Up 11 minutes redis-node-1
4.2 将6387节点(空槽号)作为master节点加入原集群
[root@localhost ~]# docker exec -it redis-node-7 /bin/bash
root@localhost:/data# redis-cli --cluster add-node 192.168.217.149:6387 192.168.217.149:6381
4.3 第一次检查集群情况
root@localhost:/data# redis-cli --cluster check 192.168.217.149:6381
4.4 重新分配槽号
redis-cli --cluster reshard 192.168.217.149:6381
4.5 第二次检查集群情况
root@localhost:/data# redis-cli --cluster check 192.168.217.149:6381
4.6 为6387主节点分配6388从节点
root@localhost:/data# redis-cli --cluster add-node 192.168.217.149:6388 192.168.217.149:6387 --cluster-slave --cluster-master-id c88d4e7a747ec37c1bea6563dedd87289a6fe367redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id slave的编号
4.7 第三次检查集群情况
redis-cli --cluster check 192.168.217.149:6381
5. 主从缩容 (6387和 6388 下线,退出集群)
5.1 删除6388 (从集群中移除6388从节点)
root@localhost:/data# redis-cli --cluster del-node 192.168.217.149:6388 7048f2115ed42bac1c2e53a6ba14ecaf30af4304redis-cli --cluster del-node ip:从机端口 从机节点ID
5.2 将6387(Master)的槽号清空,重新分配 (平均分给其他3个master)
redis-cli --cluster reshard 192.168.217.149:6381
5.3 第一次检查集群
5.4 将6387删除
root@localhost:/data# redis-cli --cluster del-node 192.168.217.149:6387 7048f2115ed42bac1c2e53a6ba14ecaf30af4304redis-cli --cluster del-node ip:端口 节点ID
5.5 第三次检查集群
redis-cli --cluster check 192.168.217.149:6381
相关文章:

Docker 搭建Redis集群
目录 1. 3主3从架构说明 2. 3主3从Redis集群配置 2.1关闭防火墙启动docker后台服务 2.2 新建6个docker容器实例 2.3 进去任意一台redis容器,为6台机器构建集群关系 2.4 进去6381,查看集群状态 3. 主从容错切换迁移 3.1 数据读写存储 3.1.1 查看…...

spring boot商城、商城源码 欢迎交流
一个基于spring boot、spring oauth2.0、mybatis、redis的轻量级、前后端分离、防范xss攻击、拥有分布式锁,为生产环境多实例完全准备,数据库为b2b2c设计,拥有完整sku和下单流程的商城 联系: V-Tavendor...
全面解析“通义千问”:功能、优势与使用指南
引言: “通义千问”是由阿里云研发的一款先进的人工智能语言模型,以其强大的自然语言处理能力与广泛的知识覆盖面,在教育、咨询、信息检索等领域发挥着重要作用。本文将详细介绍“通义千问”的核心功能、显著优势以及具体使用方法。 一、“…...

【第三方登录】Google邮箱
登录谷歌邮箱开发者 https://console.developers.google.com/ 先创建项目 我们用的web应用 设置回调 核心主要: 1.创建应用 2.创建客户端ID 3.设置域名和重定向URL 4.对外公开,这样所有的gmail邮箱 都能参与测试PHP代码实现 引入第三方包 h…...
oslo_config学习小结
2.配置文件加载方法 2.1基础 配置文件指的是文件以.conf,.ini结尾等内容为配置项的文件,配置文件内容格式一般为 [DEFAULT] option value [sectiona] optiona valuea optionb valueb [sectionb] optionc valuec optiond valued 2.2加载方法…...

SpringBoot2.6.3 + knife4j-openapi3
1.引入项目依赖: <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-spring-boot-starter</artifactId><version>4.5.0</version> </dependency> 2.新增配置文件 import io.swag…...

PostgreSQL FDW(外部表) 简介
1、FDW: 外部表 背景 提供外部数据源的透明访问机制。PostgreSQL fdw(Foreign Data Wrapper)是一种外部访问接口,可以在PG数据库中创建外部表,用户访问的时候与访问本地表的方法一样,支持增删改查。 而数据则是存储在外部,外部可以是一个远程的pg数据库或者其他数据库(…...

Java项目:75 springboot房产销售系统
作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 使用房产销售系统分为管理员和用户、销售经理三个角色的权限子模块。 管理员所能使用的功能主要有:首页、个人中心、用户管理、销…...

2.6 IDE(集成开发环境)是什么
IDE(集成开发环境)是什么 IDE 是 Integrated Development Environment 的缩写,中文称为集成开发环境,用来表示辅助程序员开发的应用软件,是它们的一个总称。 通过前面章节的学习我们知道,运行 C 语言&…...
tomcat和web服务器是什么??
一、什么是服务器 1.服务器是计算机的一种,它比普通计算机运行更快、负载更高。服务器拥有独立IP地址,并且运行了服务器软件。 2.服务器由服务器软件和服务器硬件组成。服务器硬件就是拥有独立ip的计算机,服务器软件是一个被动的软件&#…...

鸿蒙Harmony跨模块交互
1. 模块分类介绍 鸿蒙系统的模块一共分为四种,包括HAP两种和共享包两种 HAP(Harmony Ability Package) Entry:项目的入口模块,每个项目都有且只有一个。feature:项目的功能模块,内部模式和En…...

由浅到深认识Java语言(30):集合
该文章Github地址:https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.c…...

Python学习笔记(二)
一:异常: 1.1:异常处理: 1.2:异常捕获: 1.3:异常传递: 二:模块: 2.1:模块的定义: 2.2:模块的导入: 2.3&…...

5.域控服务器都要备份哪些资料?如何备份DNS服务器?如何备份DHCP服务器?如何备份组策略?如何备份服务器状态的备份?
(2.1) NTD(域控数据库)备份 (2.2)DNS备份 (2.3)DHCP备份 (2.4)组策略备份 (2.5)CA证书备份 (2.6)系统状态备份 (2.1)…...
TCP与UDP:网络协议的技术原理与要点
文章目录 1. TCP(传输控制协议)1.1 面向连接1.1.1 三次握手1.1.2 为什么需要三次握手?1.1.3 四次挥手1.1.4 为什么需要四次挥手? 1.2 可靠性1.3 有序传输1.4 流量控制1.5 拥塞控制 2. UDP(用户数据报协议)2…...

vue-office/docx插件实现docx文件预览
1.下包 //预览docx文件 npm install vue-office/docx vue-demi//如果是vue2.6版本或以下还需要额外安装 vue/composition-api2.引入 <template><div>//在src填入文档地址<VueOfficeDocx srchttp://...../xx.docx style"width:80%" rendered"re…...

STM32—控制蜂鸣器(定时器)
目录 1 、 电路构成及原理图 2 、编写实现代码 main.c tim_irq.c 3、代码讲解 4、烧录到开发板调试、验证代码 5、检验效果 此笔记基于朗峰 STM32F103 系列全集成开发板的记录。 1 、 电路构成及原理图 定时器中断是利用定时器的计数功能(向上计数或向下计…...
【React】使用 JSX 为 JavaScript 添加标签
使用 JSX 为 JavaScript 添加标签实际上是将 JSX 语法与 JavaScript 代码结合使用,以描述用户界面。JSX 允许你在 JavaScript 中编写类似 HTML 的结构,并最终由 React 库将其转换为真正的 DOM 元素。以下是将标签引入 JavaScript 以及将 HTML 转化为 JSX…...

Docker构建多平台(x86,arm64)构架镜像
这里写自定义目录标题 背景配置buildx开启experimental重启检查 打包 背景 docker镜像需要支持不同平台架构 配置buildx 开启experimental vi /etc/docker/daemon.json {"experimental": true }或者 重启检查 # 验证buildx版本 docker buildx version# 重启do…...

python爬虫基础-----运算符(第三天)
🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...