NOSQL - Redis的简介、安装、配置和简单操作

news2024/11/25 21:45:04

目录

一. 知识了解

1. 关系型数据库与非关系型数据库

1.1 关系型数据库

1.2 非关系型数据库

1.3 区别

1.4 非关系型数据库产生背景

1.5 NOSQL 与 SQL的数据记录对比

2. 缓存相关知识

2.1 缓存概念

2.2 系统缓存

2.3 缓存保存位置及分层结构

二 . redis 相关知识

1. redis 的简介

2. redis 的五大数据类型

3. redis 的优缺点

4. redis 的适用场景

5. redis 采用单线程的原因

6. redis 为什么运行速度快

7. redis 和 memcache 的比较

三. Redis 安装部署

四 redis使用

4.1 Redis 命令工具

4.2 redis-cli 命令行工具

4.3 redis-benchmark 测试工具

4.4 Redis 数据库常用命令 


一. 知识了解

1. 关系型数据库与非关系型数据库

1.1 关系型数据库

关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。
SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。
主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2、PostgreSQL 等。
以上数据库在使用的时候必须先建库建表设计表结构,然后存储数据的时候按表结构去存,如果数据与表结构不匹配就会存储失败。

1.2 非关系型数据库

NoSQL(NoSQL = Not Only SQL ),意思是“不仅仅是 SQL”,是非关系型数据库的总称。
除了主流的关系型数据库外的数据库,都认为是非关系型。
不需要预先建库建表定义数据存储表结构,每条记录可以有不同的数据类型和字段个数(比如微信群聊里的文字、图片、视频、音乐等)。
主流的 NoSQL 数据库有 Redis、MongBD、Hbase、Memcached 等

1.3 区别

数据存储方式不同:

        关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素

扩展方式不同:

        SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多克服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限个表,这都需要通过提高计算机性能来。
而NoSQL数据库是横向扩展的。因为非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。
关系:纵向   比如说硬件中添加内存
非关:横向  天然分布式

对事务性的支持不同:

        如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。
虽然NoSQL数据库也可以使用事务操作,但稳定性方面没法和关系型数据库比较,所以它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。

1.4 非关系型数据库产生背景

可用于应对 Web2.0 纯动态网站类型的三高问题。
(1)High performance——对数据库高并发读写需求
(2)Huge Storage——对海量数据高效存储与访问需求
(3)High Scalability && High Availability——对数据库高可扩展性与高可用性需求

关系型数据库和非关系型数据库都有各自的特点与应用场景,两者的紧密结合将会给Web2.0的数据库发展带来新的思路。让关系数据库关注在关系上,非关系型数据库关注在存储上。例如,在读写分离的MySQL数据库环境中,可以把经常访问的数据存储在非关系型数据库中,提升访问速度。

1.5 NOSQL 与 SQL的数据记录对比

关系型数据库:

  • 实例-->数据库-->表(table)-->记录行(row)、数据字段(column)

非关系型数据库:

  • 实例-->数据库-->集合(collection) -->键值对(key-value)
  • 非关系型数据库不需要手动建数据库和集合(表)。

2. 缓存相关知识

2.1 缓存概念

缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且硬盘也有大小不一的缓存,甚至是物理服务器的raid 卡有也缓存,都是为了起到加速CPU 访问硬盘数据的目的,因为CPU的速度太快了,CPU需要的数据由于硬盘往往不能在短时间内满足CPU的需求,因此CPU缓存、内存、Raid 卡缓存以及硬盘缓存就在一定程度上满足了CPU的数据需求,即CPU 从缓存读取数据可以大幅提高CPU的工作效率。

2.2 系统缓存

buffer与cache:

  • buffer: 缓冲也叫写缓冲,一般用于写操作,可以将数据先写入内存再写入磁盘,buffer 一般用于写缓冲,用于解决不同介质的速度不一致的缓冲,先将数据临时写入到里自己最近的地方,以提高写入速度,CPU会把数据先写到内存的磁盘缓冲区,然后就认为数据已经写入完成看,然后由内核在后续的时间在写入磁盘,所以服务器突然断电会丢失内存中的部分数据。
  • cache: 缓存也叫读缓存,一般用于读操作,CPU读文件从内存读,如果内存没有就先从硬盘读到内存再读到CPU,将需要频繁读取的数据放在里自己最近的缓存区域,下次读取的时候即可快速读取。

2.3 缓存保存位置及分层结构

互联网应用领域,缓存是服务响应速度提升的关键

  • 用户层:浏览器DNS缓存,应用程序DNS缓存,操作系统DNS缓存客户端
  • 代理层:CDN,反向代理缓存
  • Web层:Web服务器缓存
  • 应用层:页面静态化
  • 数据层:分布式缓存,数据库
  • 系统层:操作系统cache
  • 物理层:磁盘cache, Raid Cache

DNS缓存
浏览器的DNS缓存默认为60秒,即60秒之内在访问同一个域名就不在进行DNS解析。

应用层缓存
Nginx、PHP等web服务可以设置应用缓存以加速响应用户请求,另外有些解释性语言,比如:PHP/Python/Java不能直接运行,需要先编译成字节码,但字节码需要解释器解释为机器码之后才能执行,因此字节码也是一种缓存,有时候还会出现程序代码上线后字节码没有更新的现象。所以一般上线新版前,需要先将应用缓存清理,再上线新版。

另外可以利用动态页面静态化技术,加速访问,比如:将访问数据库的数据的动态页面,提前用程序生成静态页面文件html 电商网站的商品介绍,评论信息非实时数据等皆可利用此技术实现。

数据层缓存
分布式缓存服务:

  • Redis
  • Memcached

数据库:

  • MySQL 查询缓存
  • innodb缓存、MYISAM缓存

 硬件缓存

  • CPU缓存(L1的数据缓存和L1的指令缓存)、二级缓存、三级缓存
  • 磁盘缓存:Disk Cache
  • 磁盘阵列缓存:Raid Cache,可使用电池防止断电丢失数据

二 . redis 相关知识

1. redis 的简介

Redis是一个开源、基于内存、使用C语言编写的key-value数据库,并提供了多种语言的API。它的数据结构十分丰富,主要可以用于数据库、缓存、分布式锁、消息队列等...

Redis服务器程序是单进程模型,也就是在一台服务器上可以同时启动多个Redis进程,Redis的实际处理速度则是完全依靠于主进程的执行效率。

  • 若在服务器上只运行一个Redis进程,当多个客户端同时访问时,服务器的处理能力是会有一定程度的下降;
  • 若在同一台服务器上开启多个Redis进程,Redis在提高并发处理能力的同时会给服务器的CPU造成很大压力。

2. redis 的五大数据类型

基础数据类型包括:string(字符串)、list(列表,双向链表)、hash(散列,键值对集合)、set(集合,不重复)和 sorted set 也可以称为 Zset(有序集合)

结构类型结构存储的值结构的读写能力
String可以是字符串,整数,浮点数对整个字符串或者字符串的其中一部分进行操作,对整数和浮点数执行自增或者自减操作
list一个链表,链表上每个节点都包含了一个字符串从链表的两端推入或者弹出元素:根据便移量对链表进行修剪:读取单个或多个元素,根据值查找或者移除元素
set包含字符串的无序收集器,并且被包含的每个字符串都是独一无二各不相同的添加、获取、移除单个元素,检查一个元素是否存在与集合中,计算交集,并集,差集,从集合里面随机获取元素
hash包含键值对的无序散列表添加、获取、移除单个键值对,获取所有键值对
zset字符串成员与浮点数分值之间的有序映射,元素的排列顺序由分值的大小决定添加、获取、删除单个元素,根据分值范围或者成员来获取元素

3. redis 的优缺点

优点:

1)具有极高的数据读写速度: 数据读取的速度最高可达到110000 次/s,数据写入速度最高可达到81000次/s。

(2)支持的数据结构: key-value,支持丰富的数据类型:Strings、 Lists、Hashes、 Sets 及Sorted Sets 等数据类型操作。

  • Strings 字符串型
  • Lists 列表型
  • Hashes 哈希(散列)
  • Sets 无序集合
  • Sorted Sets 有序集合(或称zsets)

(redis也可以做消息队列,可以通过Sorted Sets实现)

(3)支持数据的持久化: 可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。

(4)原子性: Redis所有操作都是原子性的。(支持事务,所有操作都作为事务)

(5)支持数据备份: 即 master-salve 模式的数据备份。(支持主从复制)

缺点:

  • 缓存和数据库双写一致性问题
  • 缓存雪崩问题
  • 缓存击穿问题
  • 缓存的并发竞争问题

4. redis 的适用场景

  • Redis作为基于内存运行的数据库,是一个高性能的缓存,一般应用在session缓存、 队列、排行榜、计数器、最近最热文章、最近最热评论、发布订阅等。
  • Redis适用于数据实时性要求高、数据存储有过期和淘汰特征的、不需要持久化或者只需要保证弱一致性、逻辑简单的场景。

5. redis 采用单线程的原因

首先要明确的是Redis单线程指的是网络IO和键值对读写是由一个线程来完成的,但Redis持久化、集群数据等是由额外的线程执行的。了解Redis使用单线程之前可以先了解一下多线程的开销。

通常情况下,使用多线程可以增加系统吞吐率或者可以增加系统扩展性,但多线程通常会存在同时访问某些共享资源,为了保证访问共享资源的正确性,就需要有额外的机制进行保证,这个机制首先会带来一定的开销。其实对于多线程并发访问的控制一直是一个难点问题,如果没有精细的设计,比如说,只是简单地采用一个粗粒度互斥锁,就会出现不理想的结果。即使增加了线程,大部分线程也在等待获取访问共享资源的互斥锁,并行变串行,系统吞吐率并没有随着线程的增加而增加。

此外:

值得注意的是在Redis6.0中引入了多线程。在Redis6.0之前,从网络IO处理到实际的读写命令处理都是由单个线程完成的,但随着网络硬件的性能提升,Redis的性能瓶颈有可能会出现在网络IO的处理上,也就是说单个主线程处理网络请求的速度跟不上底层网络硬件的速度。针对此问题,Redis采用多个IO线程来处理网络请求,提高网络请求处理的并行度,但多IO线程只用于处理网络请求,对于读写命令,Redis仍然使用单线程处理!

6. redis 为什么运行速度快

  • Redis 是一款纯内存结构,避免了磁盘I/o等耗时操作。
  • Redis 命令处理的核心模块为单线程,减少了锁竞争,以及频繁创建线程和销毁线程的代价,减少了线程上下文切换的消耗。(Redis具有高效的底层数据结构,为优化内存,对每种类型基本都有两种底层实现方式)
  • 采用了 I/O 多路复用机制,大大提升了并发效率

7. redis 和 memcache 的比较

比较的种类MemcachedRedis
类型Key-value数据库Key-value数据库
过期策略支持支持
数据类型单一数据类型五大数据类型
持久化不支持支持
主从复制不支持支持
虚拟内存不支持支持

三. Redis 安装部署

1. 关闭防火墙和核心防护

systemctl stop firewalld

setenforce 0

2. 安装编译环境,解压编译

yum install -y gcc gcc-c++ make

tar zxvf redis-5.0.7.tar.gz

cd redis-5.0.7/
make -j2
make PREFIX=/usr/local/redis install

##由于Redis源码包中直接提供了 Makefile 文件,所以在解压完软件包后,
不用先执行 ./configure 进行配置,可直接执行 make 与 make install 命令进行安装。

执行软件包提供的 install_server.sh 脚本文件设置 Redis 服务所需要的相关配置文件

cd /opt/redis-5.0.7/utils
./install_server.sh

.....一直回车 代表默认

最后空白添加
/usr/local/redis/bin/redis-server

#解释
Selected config:
Port           : 6379								#默认侦听端口为6379
Config file    : /etc/redis/6379.conf				#配置文件路径
Log file       : /var/log/redis_6379.log			#日志文件路径
Data dir       : /var/lib/redis/6379				#数据文件路径
Executable     : /usr/local/redis/bin/redis-server	#可执行文件路径
Cli Executable : /usr/local/bin/redis-cli			#客户端命令工具

[root@localhost utils]#ln -s /usr/local/redis/bin/* /usr/local/bin/

netstat -natp | grep redis

#Redis 服务控制
/etc/init.d/redis_6379 stop				#停止
/etc/init.d/redis_6379 start			#启动
/etc/init.d/redis_6379 restart			#重启
/etc/init.d/redis_6379 status			#状态

#修改配置 /etc/redis/6379.conf 参数
vim /etc/redis/6379.conf
bind 127.0.0.1 192.168.44.60				#70行,添加 监听的主机地址
port 6379									#93行,Redis默认的监听端口
daemonize yes								#137行,启用守护进程
pidfile /var/run/redis_6379.pid				#159行,指定 PID 文件
loglevel notice								#167行,日志级别
logfile /var/log/redis_6379.log				#172行,指定日志文件

四 redis使用

4.1 Redis 命令工具

redis-server:用于启动 Redis 的工具
redis-benchmark:用于检测 Redis 在本机的运行效率
redis-check-aof:修复 AOF 持久化文件
redis-check-rdb:修复 RDB 持久化文件
redis-cli:Redis 命令行工具

4.2 redis-cli 命令行工具

语法:redis-cli -h host -p port -a password
-h :指定远程主机
-p :指定 Redis 服务的端口号
-a :指定密码,未设置数据库密码可以省略-a 选项
若不添加任何选项表示,则使用 127.0.0.1:6379 连接本机上的 Redis 数据库

4.3 redis-benchmark 测试工具

redis-benchmark 是官方自带的 Redis 性能测试工具,可以有效的测试 Redis 服务的性能。

基本的测试语法:redis-benchmark [选项] [选项值]

-h :指定服务器主机名。
-p :指定服务器端口。
-s :指定服务器 socket
-c :指定并发连接数。 
-n :指定请求数。
-d :以字节的形式指定 SET/GET 值的数据大小。
-k :1=keep alive 0=reconnect 。
-r :SET/GET/INCR 使用随机 key, SADD 使用随机值。
-P :通过管道传输<numreq>请求。
-q :强制退出 redis。仅显示 query/sec 值。
--csv :以 CSV 格式输出。
-l :生成循环,永久执行测试。
-t :仅运行以逗号分隔的测试命令列表。
-I :Idle 模式。仅打开 N 个 idle 连接并等待

向 IP 地址为 192.168.44.60、端口为 6379 的 Redis 服务器发送 100 个并发连接与 100000 个请求测试性能

redis-benchmark -h 192.168.44.60 -p 6379 -c 100 -n 100000

测试存取大小为 100 字节的数据包的性能

[root@localhost utils]#redis-benchmark -h 192.168.44.60 -p 6379 -q -d 100

#
-h 192.168.44.60: 指定Redis服务器的IP地址为192.168.44.60。
-p 6379: 指定Redis服务器监听的端口号为6379,这是Redis默认的端口。
-q: 这是Quiet模式,表示在输出结果时不打印任何额外信息,只显示基准测试的结果数据,使输出更简洁。
-d 100: 设置数据集大小为100字节。这意味着在执行写操作(如SET)时,键值对的value部分大小为100字节。
所以这个命令是用来针对IP地址为192.168.44.60,端口为6379的Redis服务器进行基准测试,其中每次写操作的数据大小为100字节。基准测试会模拟多个客户端同时对Redis进行读写操作,以此来评估Redis在高并发情况下的性能。

测试本机上 Redis 服务在进行 set 与 lpush 操作时的性能

[root@localhost utils]#redis-benchmark -t set,lpush -n 100000 -q

#解释
-t set,lpush: 指定要测试的操作类型,这里包含了set和lpush两种操作。set用于测试设置键值对的性能,而lpush则是测试将元素推入列表头部的性能。

-n 100000: 指定每个测试命令执行的总次数为100000次。这意味着对于set和lpush这两种操作,都会各自执行100000次。

-q: 启用Quiet模式,这会让基准测试工具只输出最终的性能统计结果,不展示中间过程的详细信息,使得输出更为简洁。

综上所述,该命令行主要用于测量Redis服务器在执行100000次set和lpush操作时的性能表现,这对于评估和优化Redis在大规模数据操作中的性能具有重要意义。

4.4 Redis 数据库常用命令 

set:存放数据,命令格式为 set key value
get:获取数据,命令格式为 get key

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

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

相关文章

【MySQL】13. 索引(重点)

1. 没有索引&#xff0c;可能会有什么问题 索引&#xff1a;提高数据库的性能&#xff0c;索引是物美价廉的东西了。 不用加内存&#xff0c;不用改程序&#xff0c;不用调sql&#xff0c;只要执行正确的 create index &#xff0c;查询速度就可能提高成百上千倍。 但是天下没…

如何提高小红书笔记的收录率?

在小红书平台上&#xff0c;笔记的收录率是衡量一篇笔记是否受欢迎和有价值的重要因素。为了提高笔记的收录率&#xff0c;有几个关键点需要注意&#xff1a; 1.内容不涉及广告 在发布笔记前要先确保笔记内容不包含任何形式的广告或推广信息。小红书平台对于广告性质的内容有…

关于 HEAP CORRUPTION DETECTED:after Normal block 错误的原因及解析

目录 一、HEAP CORRUPTION DETECTED:after Normal block 出现的报错情况&#xff1a; 二、问题原因&#xff08;重要&#xff09;&#xff1a; 三、举例 1.错误代码如下&#xff1a; 2.错误原因及分析&#xff08;重要&#xff09;&#xff1a; 3.解决方法 ​编辑 4.正…

OMP压缩感知仿真(MATLAB)

clc; clearvars; close all;% 读文件 Ximread(mandrill256.bmp); tic; Xdouble(X); [m,n]size(X);% % 小波变换矩阵生成 [LL1, LH1, HL1, HH1] dwt2(X, haar); [LL2, LH2, HL2, HH2] dwt2(LL1, haar); % [LL3, LH3, HL3, HH3] dwt2(LL2, haar); % [LL4, LH4, HL4, HH4] d…

Demis Hassabis,这位被封为爵士的AI领域的杰出研究者和神经科学家,是否能成为Google的救星?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Jquery——js库

1. jQuery 基础操作 jQuery 是一个快速、小巧的 JavaScript 库&#xff0c;设计用于简化 HTML 文档的遍历、事件处理、动画设计和 Ajax 交互。jQuery 使用户能够更快地编写 JavaScript 代码&#xff0c;并且能够更容易地处理 HTML 文档、事件、动画和 Ajax。 加载 jQuery 要…

HDLbits 刷题 -- Alwaysblock2

学习&#xff1a; For hardware synthesis, there are two types of always blocks that are relevant: Combinational: always (*)Clocked: always (posedge clk) Clocked always blocks create a blob of combinational logic just like combinational always blocks, but…

【DETR系列目标检测算法代码精讲】01 DETR算法03 Dataloader代码精讲

与一般的Dataloader的区别在于我们对图像进行了随机裁剪&#xff0c;需要进行额外的操作才能将其打包到dataloader里面 这一段的代码如下&#xff1a; if args.distributed:sampler_train DistributedSampler(dataset_train)sampler_val DistributedSampler(dataset_val, shu…

LeetCode-48. 旋转图像【数组 数学 矩阵】

LeetCode-48. 旋转图像【数组 数学 矩阵】 题目描述&#xff1a;解题思路一&#xff1a;一行代码&#xff01;Python zip函数图一乐【zip函数实现主对角线翻转&#xff0c;[::-1]实现垂直翻转】解题思路二&#xff1a;其实我们也可以先水平轴翻转&#xff0c;让后主对角线翻转。…

Linux之用户账号、用户组和与账号有关的系统文件

目录 一、基本介绍 1.用户和用户组 2.UID和GID 二、 账户管理 1.查看用户的UID和GID 2.添加账户 3.删除账号 4.修改账号 5.账户口令 三、分组管理 1.新增用户组 2.删除用户组 3.修改用户组 4.用户组切换 四、与账号有关的系统文件 1./etc/passwd 2./etc/shado…

LeetCode_33_中等_搜索旋转排序数组

文章目录 1. 题目2. 思路及代码实现详解&#xff08;Python&#xff09;2.1 二分查找 1. 题目 整数数组 n u m s nums nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c; n u m s nums nums 在预先未知的某个下标 k &#xff08; 0 < k…

python_绘图_多条折线图绘制_显示与隐藏

1. 需求 给定一个二维数组 100行, 5列, 每一列绘制一条折线, 横轴为行索引, 纵轴为对应位置的值, 绘制在一个子图里面, 使用python plot, 使用随机颜色进行区别添加显示和隐藏按钮, 可以对每条折线进行显示和隐藏 2. 代码 import numpy as np import matplotlib.pyplot as p…

使用Docker快速搭建Kafka

前言 今天讲下如何使用Docker快速搭建kafka。 前期准备&#xff0c;需要安装好docker、docker-compose。 一、安装Kafka 1、创建Kafka目录&#xff0c;执行如下命令。 mkdir -p /docker/kafka/ cd /docker/kafka/ 2、编写yaml文件&#xff0c;内容如下。 vim docker-com…

国产桌面操作系统统一身份认证及2FA双因子认证安全升级方案

某金融运营服务公司&#xff0c;主要负责业务处理、客户服务、业务监控、报表统计等金融运营服务&#xff0c;为集团下设二级单位&#xff0c;坐落于一线城市&#xff0c;对政策风向有很高的敏锐度。 该公司已为公司业务人员、客户服务、监督员等配备了数百台国产桌面操作系统…

springboot 将manage关闭。

这是SpringBoot自带的接口&#xff0c;会将所有的接口暴露在外面。所以我们上生产环境&#xff0c;需要将这个接口给关闭。 默认是 management.endpoints.web.exposure.include* 只需将配置文件改成下面&#xff0c;Springboot自带的接口就会关闭。 management.endpoints.…

嵌入式系统基础知识(一):嵌入式系统是什么?

一.定义 根据IEEE&#xff08;国际电气和电子工程师协会&#xff09;的定义&#xff0c;嵌入式系统是“控制、监视或者辅助设备、机器和车间运行的装置”。这主要是从应用上加以定义的&#xff0c;从中可看出嵌入式系统是软件和硬件的综合体&#xff0c;还可以涵盖机械等附属装…

vue3使用UEditorPlus 、后端配置、上传图片等处理

前端安装 vue3安装vue-ueditor-wrap // vue-ueditor-wrap v3 仅支持 Vue 3 npm i vue-ueditor-wrap3.x -S // or yarn add vue-ueditor-wrap3.x 下载 UEditorPlus 仓库地址 把dist文件复制到vue3项目中的public下&#xff0c;重命名为UEditorPlus UEditorPlus文档 在main.…

分月饼 java题解

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in); int m sc.nextInt(); // 读取员工数量mint n sc.nextInt(); // 读取月饼数量n// 调用distribute方法并打印返回的分配方法总数//先默认每人分一个…

联手SCQL与CCL,护航隐私计算之路

1.SCQL Overview SCQL&#xff08;Secure Collaborative Query Language&#xff09;是一种专为支持多方安全数据分析而设计的语言&#xff0c;它的目标是在保证数据隐私的前提下&#xff0c;使得不同的参与方能够进行联合数据分析。这一概念和技术是随着隐私计算技术的发展而…

顶顶通呼叫中心中间件-声音编码自适应配置方法(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-声音编码自适应配置方法讲解(mod_cti基于FreeSWITCH) 声音编码自适应介绍 声音编码自适应&#xff0c;通常在语音通信和音频处理领域中指的是一种能够根据信号特性和传输环境自动调整编码参数的技术。其目的是在不同的网络状况和音质要求下&#xff0c;…