redis基础1——发展历程+源码安装及配置+基本常识

news2024/11/25 16:41:41

文章目录

  • 一、NOSQL概述
    • 1.1 单机Mysql的演进
    • 1.2 什么是Nosql
    • 1.3 Nosql的四大分类
      • 1.3.1 KV键值对型
      • 1.3.2 文档型数据库(bson格式,和json一样)
      • 1.3.3 列存储数据库
      • 1.3.4 图数据库
  • 二、redis安装与配置
    • 2.1 redis概述
    • 2.2 Windows安装
      • 2.2.1 安装至windows服务
    • 2.3 Linux安装(源码安装)
      • 2.3.1 配置本地yum源
      • 2.3.2 安装gcc环境
        • 2.3.2.1 更新gcc版本
      • 2.3.3 下载安装包
      • 2.3.4 解压编译
      • 2.3.5 编译安装
      • 2.3.6 启动服务
      • 2.3.7 查看进程
      • 2.3.8 停止服务
      • 2.3.9 配置环境变量
    • 2.4 redis.conf配置文件
      • 2.4.1 内存
      • 2.4.2 设置密码
      • 2.4.3 后台运行
      • 2.4.4 远程访问
  • 三、性能测试工具redis-benchmark
    • 3.1 示例
  • 四、redis常识
    • 4.1 为什么默认端口是6379?
    • 4.2 为什么redis是单线程还这么快?
    • 4.3 redis为什么是单线程?

一、NOSQL概述

1.1 单机Mysql的演进

单机MYSQL的时代!

在这里插入图片描述

在90年代,一个基本的网站访问量一般不会太大,单个数据库完全足够用。在那个时候,更多的是去使用静态网页Html,比如我们熟知的导航网站“Hao123”,此类网站对服务器来说没有太大的压力,读和写的操作都在单台机器上。但好景不长,出现很多瓶颈。

  • 数据量太大,一个机器放不下。
  • 数据的索引太多,一个机器的内存也放不下。
  • 访问量太大(读写混合),一个服务器也承受不了。

出现以上问题时,先是优化数据结构和索引,再到用文件缓存,最终发现还是解决不了根本问题,后面就出现了了Memcached,成为当时最热门的技术,自此正式进入缓存时代。

Memcached(缓存)+mysql+垂直拆分(读写分离)

在这里插入图片描述

缓存的出现使用很好的解决了大量用户的“读”操作,当一个库一张表数据过多时,就开始采用集群,MySQL水平拆分。

Memached(缓存)+水平拆分+mysql集群

在这里插入图片描述

从早些年的MyISAM(表锁)转战到Innodb(行锁),这种更换引擎也只是属于“物理治疗”,再后来就开始使用分库分表来解决写的压力,这就属于“精神治疗”。mysql集群的出现很好的解决了大量“写”操作。但是像抖音热榜、热搜排名这种需要快速刷新的大数据量时,MySQL这种关系型数据库就不够用了,用mysql保存一些大文件和图片时,效率也比较低,所以这时候就需要用Nosql非关系型数据库来解决了。

1.2 什么是Nosql

  1. NoSQL(Not Only SQL),翻译过来为“不仅仅是SQL”,是对所有非关系型数据库的一种统称。除去关系型数据库之外的都是非关系型数据库。
  2. NoSQL数据库种类繁多,包括文档型数据库、键值存储数据库、宽列存储数据库和图形数据库,常见的有MongoDB、Redis、Hbase、Neo4j等,共同的特点都是去掉关系数据库的关系型特性。
  3. 数据之间无关联,易扩展,无形之间也在架构的层面上带来了可扩展的能力。
  4. 大数据量下的NoSQL数据库具有非常高的读写性能,这正是得益于它的无关系性,数据库的结构简单。

1.3 Nosql的四大分类

1.3.1 KV键值对型

  • 新浪:redis
  • 美团:redis+Tair
  • 阿里、百度:redis+memcached

1.3.2 文档型数据库(bson格式,和json一样)

  • MongoDB:是一个基于分布式文件存储的数据库,C++编写,主要用来处理大量的文档。是介于关系型数据库和非关系型数据库中间的产品,同时也是非关系型数据库中功能最丰富,最像关系型数据库的。
  • ConthDB等等

1.3.3 列存储数据库

  • HBase
  • 分布式文件系统

1.3.4 图数据库

  • Neo4j、InfoGrid:不是存图形,而是存放关系,比如:朋友圈的社交网络关系,广告推荐等。

二、redis安装与配置

2.1 redis概述

  1. Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
  2. redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了 master-slave(主从)同步。
  3. 免费、开源,是当下最热门的NoSQL技术之一,也被人们称之为结构化数据库。

redis作用

  1. 内存存储、持久化,内存中是断电即失,所以说持久化很重要(rdb、aof)。
  2. 效率高,可以用于告诉缓存。
  3. 发布订阅系统,可以做消息中间件使用。
  4. 地图信息分析。
  5. 计时器、计数器(比如博客浏览量。)

redis特性

  1. 多样的数据类型
  2. 持久化
  3. 集群
  4. 事务

2.2 Windows安装

1、下载安装包:redis_Windows版本下载地址

Redis 官方不建议在 windows 下使用 Redis,所以官网没有 windows 版本可以下载。还好微软团队维护了开源的 windows 版本,虽然只有 3.2 版本,对于普通测试使用足够了。
在这里插入图片描述

2、解压。将下载的离线包解压至自己的电脑上,我这里是统一放在D盘。

redis.conf配置文件介绍

在这里插入图片描述

3、启动服务端
在这里插入图片描述
4、启动客户端,连接redis服务,注意不要关闭客户端窗口。
在这里插入图片描述

2.2.1 安装至windows服务

1、cmd窗口进入redis服务启动程序程序当前目录,执行安装启动命令。
在这里插入图片描述
在这里插入图片描述

  • 安装默认服务未启动。

在这里插入图片描述

  • 启动

在这里插入图片描述
在这里插入图片描述

  • 停止

在这里插入图片描述
在这里插入图片描述

  • 卸载

在这里插入图片描述
在这里插入图片描述

2.3 Linux安装(源码安装)

  • 这里以Centos7.5系统为例。

在这里插入图片描述

2.3.1 配置本地yum源

1、上传CentOS镜像到/opt/下任意目录。

在这里插入图片描述

2、创建挂载镜像

[root@localhost centos]# mkdir centos7

3、挂载镜像

[root@localhost centos]# mount /opt/backup/centos/CentOS-7-x86_64-DVD-1804.iso /opt/backup/centos/centos7 -o loop 
mount: /dev/loop0 is write-protected, mounting read-only 
[root@localhost centos]# df -h 
Filesystem Size Used Avail Use% Mounted on 
...... 
...... 
/dev/loop0 4.2G 4.2G 0 100% /opt/backup/centos/centos7

4、配置本地yum源

root@localhost yum.repos.d]# pwd 
/etc/yum.repos.d 
[root@localhost yum.repos.d]# cat ma.repo 
[Centos7]
name=centos7 backup 
baseurl=file:///opt/backup/centos/centos7 
enabled=1 
gpgcheck=0

5、更新缓存

[root@localhost centos]# yum clean all 
[root@localhost centos]# yum makecache

6、测试

[root@localhost centos]# yum install fuse

2.3.2 安装gcc环境

  • 由于 Redis 由 ANSIC 编写,安装 Redis 前需要先安装 C 语言环境。
  • 高版本的redis依赖的高版本gcc,需要更新gcc。
[root@localhost ~]# yum install gcc-c++

2.3.2.1 更新gcc版本

1、配置网络yum源

阿里云镜像地址

[root@localhost yum.repos.d]# pwd 
/etc/yum.repos.d 
[root@localhost yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo 
[root@localhost yum.repos.d]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo [root@localhost yum.repos.d]# yum clean all 
[root@localhost yum.repos.d]# yum makecache

2、更新gcc版本

[root@localhost yum.repos.d]# sudo yum install centos-release-scl 
[root@localhost yum.repos.d]# sudo yum install devtoolset-9-gcc*  #这里是更新到9版本,更新8版本换成8.
[root@localhost yum.repos.d]# scl enable devtoolset-9 bash 
[root@localhost yum.repos.d]# gcc --version

2.3.3 下载安装包

redis中文网

在这里插入图片描述

redis官网

在这里插入图片描述

2.3.4 解压编译

一般都会将 redis 目录放置到 /usr/local/redis这里将目前在 /home/sail 目录下的 redis-6.2.6 文件夹更改目录,同时更改文件夹名称为 redis。

[root@localhost opt]# tar zxf redis-6.0.6.tar.gz 
[root@localhost opt]# mv redis-6.0.6 /usr/local/redis 
[root@localhost opt]# cd /usr/local/redis/ 
[root@localhost redis]# make

2.3.5 编译安装

PREFIX参数指定程序编译时存放路径。
比如我们现在就是指定了 redis 必须存放在 /usr/local/redis 目录。
假设不添加该关键字 Linux 会将可执行文件存放在 /usr/local/bin 目录。
这里指定好目录也方便后续的卸载,后续直接 rm -rf /usr/local/redis 即可删除 redis。

[root@localhost redis]# make PREFIX=/usr/local/redis install

2.3.6 启动服务

启动方式有两种:命令带&,和修改配置文件后不带&。

1、第一种。

[root@localhost redis]# pwd 
/usr/local/redis 
[root@localhost redis]# ./bin/redis-server& ./redis.conf

在这里插入图片描述
2、第二种。

修改redis.conf配置文件里的 daemonize no 改为 daemonize yes 即可。

在这里插入图片描述

[root@localhost redis]# pwd 
/usr/local/redis 
[root@localhost redis]# ./bin/redis-server ./redis.conf

在这里插入图片描述

2.3.7 查看进程

[root@localhost redis]# ps -ef|grep redis
root      19268      1  0 12:25 ?        00:00:00 bin/redis-server 127.0.0.1:6379
root      19297   9320  0 12:25 pts/0    00:00:00 grep --color=auto redis

2.3.8 停止服务

[root@localhost redis]# pwd
/usr/local/redis
[root@localhost redis]# bin/redis-cli  shutdown

[root@localhost redis]# ps -ef|grep redis
root      18768   9320  0 12:20 pts/0    00:00:00 grep --color=auto redis

2.3.9 配置环境变量

从以上操作来看,对redis的任何操作,都需要在/usr/local/redis/bin目录下操作,也就是我们所安装的指定目录。倘若需要跟其他服务公用,就不太方便,所以哦我们需要配置环境变量,这样不管我们在哪个目录下,都可以操作。

  1. 添加变量文件
[root@localhost profile.d]# pwd
/etc/profile.d
[root@localhost profile.d]# cat redis.sh 
export JAVA_HOME=/usr/local/redis
export PATH=$JAVA_HOME/bin:/usr/bin:$PATH

2、重新读取

[root@localhost profile.d]# source redis.sh 

3、测试启动程序

[root@localhost redis]# pwd
/opt/redis
[root@localhost redis]# redis-server redis.conf      #指定配置文件后台启动,不指定就是前台启动。
10262:C 29 Nov 2022 17:11:02.053 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
10262:C 29 Nov 2022 17:11:02.053 # Redis version=6.0.6, bits=64, commit=00000000, modified=0, pid=10262, just started
10262:C 29 Nov 2022 17:11:02.053 # Configuration loaded
[root@localhost redis]# ps -ef|grep redis
root      10263      1  0 17:11 ?        00:00:00 redis-server 127.0.0.1:6379
root      10269   3342  0 17:11 pts/1    00:00:00 grep --color=auto redis

4、测试停止程序

[root@localhost redis]# ps -ef|grep redis     #存在redis进程。
root      10263      1  0 17:11 ?        00:00:00 redis-server 127.0.0.1:6379
root      10269   3342  0 17:11 pts/1    00:00:00 grep --color=auto redis
[root@localhost redis]# redis-cli shutdown   #关闭程序
[root@localhost redis]# ps -ef|grep redis
root      11168   3342  0 17:14 pts/1    00:00:00 grep --color=auto redis   #进程消失。

2.4 redis.conf配置文件

配置项名称配置项值范围说明
daemonizeyes、noyes表示启用守护进程,默认是no即不以守护进程方式运行。其中Windows系统下不支持启用守护进程方式运行
port指定 Redis 监听端口,默认端口为 6379
bind绑定的主机地址,如果需要设置远程访问则直接将这个属性备注下或者改为bind * 即可,这个属性和下面的protected-mode控制了是否可以远程访问 。
protected-modeyes 、no保护模式,该模式控制外部网是否可以连接redis服务,默认是yes,所以默认我们外网是无法访问的,如需外网连接rendis服务则需要将此属性改为no。
timeout300当客户端闲置多长时间后关闭连接,如果指定为 0,表示关闭该功能
logleveldebug(调试日志)、verbose(在debug的基础上,减少连接信息以及内部信息)、notice(建议在生产使用)、warning(只打印重要、关键的信息)日志级别,默认为 notice
databases16设置数据库的数量,默认的数据库是0。整个通过客户端工具可以看得到
rdbcompressionyes、no指定存储至本地数据库时是否压缩数据,默认为 yes,Redis 采用 LZF 压缩,如果为了节省 CPU 时间,可以关闭该选项,但会导致数据库文件变的巨大。
dbfilenamedump.rdb指定本地数据库文件名,默认值为 dump.rdb
dir指定本地数据库存放目录
requirepass设置 Redis 连接密码,如果配置了连接密码,客户端在连接 Redis 时需要通过 AUTH 命令提供密码,默认关闭
maxclients0设置同一时间最大客户端连接数,默认无限制,Redis 可以同时打开的客户端连接数为 Redis 进程可以打开的最大文件描述符数,如果设置 maxclients 0,表示不作限制。当客户端连接数到达限制时,Redis 会关闭新的连接并向客户端返回 max number of clients reached 错误信息。
maxmemoryXXX < bytes >指定 Redis 最大内存限制,Redis 在启动时会把数据加载到内存中,达到最大内存后,Redis 会先尝试清除已到期或即将到期的 Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis 新的 vm 机制,会把 Key 存放内存,Value 会存放在 swap 区。配置项值范围列里XXX为数值。

2.4.1 内存

  • 项目中需要视情况设置redis最大内存,该参数默认是注释状态。
  • 注意单位是字节。

在这里插入图片描述

2.4.2 设置密码

  • 项目中,必须要设置redis密码,现网络完全形式严峻,做一名合格的“运维战将”。
  • 密码不能设置太简单,要有一定的安全性。

在这里插入图片描述

  • 不输入密码连接失败

在这里插入图片描述

  • 输入密码才能登录成功

在这里插入图片描述

2.4.3 后台运行

  • daemonize no (默认),代表redis只是一个守护进行,关闭启动的对话框,就直接停止运行了。
  • 把yes改为no,redis就能在后台自动运行了,不受对话框是否关闭的影响

在这里插入图片描述
在这里插入图片描述

2.4.4 远程访问

  • bind 127.0.0.1为默认只能本机连接,也就是只能在redis所在的虚拟机上用redis-cli来连接,无法通过外部工具远程连接。
  • 注释该行,或者bind * 就可以开启远程访问。
  • bind * 和bind 0.0.0.0 一样,0.0.0.0 实际等效于通配符 *,代表任意地址。

在这里插入图片描述
在这里插入图片描述

三、性能测试工具redis-benchmark

在这里插入图片描述

3.1 示例

测试200个并发连接数,100000个请求。

  • 测试命令
[root@localhost redis]# redis-benchmark -a wuhan@123 -p 6379 -c 200 -n 100000
  • 测试结果

在这里插入图片描述

  • 结果分析

在这里插入图片描述

四、redis常识

4.1 为什么默认端口是6379?

  • 6379在是手机按键(9键)上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字。Redis 作者 Antirez 早年看电视节目,觉得 Merz 在节目中的一些话愚蠢可笑,Antirez 喜欢造“梗”用于平时和朋友们交流,于是造了一个词 “MERZ”,形容愚蠢,与 “stupid” 含义相同。
  • 到了给 Redis 选择一个数字作为默认端口号时,Antirez 没有多想,把 “MERZ” 在手机9键上对应的数字 6379 拿来用了。

4.2 为什么redis是单线程还这么快?

  1. redis是完全基于内存来的,绝大部分请求时存粹的内存操作,非常快速。
  2. 数据结构简单,所以对数据的操作也就非常简单了,redis中的数据结构是专门进行设计过的。
  3. 采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或多线程导致的切换从而消耗CPU,也不用去考虑各种锁的问题,更不存在加锁释放锁的操作,也没有因为可能出现死锁而导致的性能消耗问题。
  4. 使用多路I/O复用模型,可以处理并发的连接。
  5. 使用底层模型不同,他们之间底层实现方式以及与客户端之间通信的应用协议不一样,redis自己构建的VM机制,因为一般的系统调用系统函数会浪费一定的时间去移动和请求。

上下文切换:多线程再轮流执行会抢占cpu资源,而redis单线程就避免了繁琐的多线程的上下文切换。

多路复用:

  • 多路,指多个网络连接。

  • 复用,指复用一个线程。

  • 多路复用主要有三种技术,select、poll、eploll。三种技术时从前往后依次出现的,后者交于前者更正其缺点,epoll也成为最新的也是目前最好的多路复用技术。

怎么理解?先打个比方。一个高级自助餐厅服务员要服务多桌客人,epoll方式就相当于1号桌的客人要添加菜品,服务员就会去给他服务,当没有客人有需求时可以在旁边等待玩玩手机。而select和poll技术就相当于这个服务员轮流问1号桌、2号桌、3号桌…客人需不需要服务,完全没有空闲时间可以玩手机,全程服务。在这里I/O多路复用的意思就是多桌客人公用一个服务员。

  • I/O多路复用模型:就是利用select、poll、epoll可以同时检查多个流的I/O事件的能力。在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件时,就从阻塞状态中唤醒,此时程序就会轮询一遍所有的流,而epoll是值轮询那些真正发出了事件的流,并且只依次顺序的处理就绪的流,避免了大量的无用操作,高效率就是epoll的特别之处。

4.3 redis为什么是单线程?

官方表示,redis是基于内存干活的,CPU不是redis的性能瓶颈,影响redis性能的是服务器的内存和网络带宽。既然可以用单线程来实现,就不需要去靠考虑多线程,所以就使用单线程了。

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

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

相关文章

【项目实战:核酸检测平台】第四章 冲锋陷阵

项目实战&#xff1a;核酸检测平台第四章 冲锋陷阵 摘要&#xff1a;战争&#xff0c;冲在最前面的永远是最危险的人群&#xff0c;新冠之战&#xff0c;冲在最前的则是医护人员、防疫工作者。 核酸检测平台的采集人员APP做为先头部队的重要武器&#xff0c;一定要做的好用、…

JVM之运行时数据区 PC、虚拟机栈、本地方法栈

JVM之运行时数据区 PC、虚拟机栈、本地方法栈PC寄存器线程回顾寄存器实践面试使用PC寄存器存储字节码指令地址有什么用&#xff1f;为什么使用PC寄存器记录当前线程的执行地址PC寄存器为什么会被设定为线程私有虚拟机栈虚拟机栈出现背景简介栈可能出现的异常栈中存储着什么运行…

二、【redux】redux 完整版求和Demo

文章目录1、添加count_action.js1.1、项目结构变化1.2、CODE1.2.1、count_action.js1.2.2、Count_Redux.jsx2、添加constant.js2.1、项目结构变化2.2、CODE2.2.1、constant.js2.2.2、count_action.js2.2.3、count_reducer.js本示例补全 上一章 redux mini版示例&#xff0c;使用…

Codeforces Round #721 (Div. 2) C. Sequence Pair Weight

翻译&#xff1a; 序列的权值定义为具有相同值(&#x1d44e;&#x1d456;&#x1d44e;&#x1d457;)的无序索引对(&#x1d456;&#xff0c;&#x1d457;)(这里&#x1d456;<&#x1d457;)的数量。例如&#xff0c;序列&#x1d44e;[1,1,2,2,1]的权值为4。具有相同…

5-UI自动化-三大切换,iframe如何定位,窗口新开、alert弹窗如何进行元素定位

5-UI自动化-三大切换&#xff0c;iframe如何定位&#xff0c;窗口新开、alert弹窗如何进行元素定位新开一个窗口如何定位元素switch_to方法iframe定位元素alert弹窗如何定位元素上篇介绍4-UI自动化-selenium三大等待操作 web测试过程中有没有遇到以下问题&#xff1a; 1、测试…

中概股回暖,B站打开向上通道

“回来了&#xff0c;我感觉他们都回来了。”周星驰《少林足球》中这句经典台词&#xff0c;最近成为了中概股投资者的口头禅。 财报季临近尾声&#xff0c;好消息已经层出不穷。中概互联网指数KWEB在11月的涨幅超过30%&#xff0c;不少个股从低位大幅反弹&#xff0c;其中就包…

C/C++家族族谱管理系统

C/C家族族谱管理系统 课题名称: 家族族谱管理 主要目标: 通过训练&#xff0c;强化学生对树结构、二叉树结构的表示及操作算法的掌握和灵活运用 3.具体要求: 要求设计实现具有下列功能的家谱管理系统: (1) 输入文件以存放最初家谱中各成员的信息&#xff0c;成员的信息中…

[Java] 从内存的角度去理解ThreadLocal如何把不同线程间的访问隔离开来?ThreadLocal的内存泄露问题是什么?如何避免?

文章目录前言前置知识&#xff1a;堆内存与栈内存普通数据结构类和ThreadLocal存取数据的不同&#xff1f;结合源码来看ThreadLocal如何实现的1. ThreadLocal类get方法2. ThreadLocal类的getMap(Thread)方法3. Thread类的threadLocals属性4. ThreadLocal类的setInitialValue()方…

win11该文件没有与之关联的应用怎么办

win11用户在使用电脑的时候遇到了“该文件没有与之关联的应用”的提示&#xff0c;这是怎么回事呢&#xff1f;应该怎么办呢&#xff1f;出现这个情况应该是注册表被误删了&#xff0c;大家需要新建一个文本文档&#xff0c;然后输入下文提供的指令&#xff0c;之后将其重命名为…

亚信科技亮相南京软博会,数智赋能百行千业

11月23至25日&#xff0c;主题为“软件赋能 数智转型”的2022中国&#xff08;南京&#xff09;国际软件产品和信息服务交易博览会在南京国际博览中心盛大启幕。“数智化全栈能力提供商”亚信科技携“云网边端”产品体系&#xff0c;5G、人工智能、边缘AI、机器人流程自动化、数…

AlphaFold2源码解析(4)--模型架构

AlphaFold2源码解析(4)–模型架构 我们将Alphafold的流程分为一下几个部分&#xff1a; 搜索同源序列和模板特征构造特征表示MSA表示与残基对表示之间互相交换信息残基的抽象表示转换成具体的三维空间坐标 模型参数 AlphaFold有多个不同类型的参数&#xff08;单体&#x…

一文让你理解Linux权限问题

前言&#xff1a; 权限是个很重要的一部分&#xff0c;无论是在Linux系统中还是在生活里&#xff0c;权限都是必不可缺失的一部分&#xff0c;在生活中&#xff0c;权限是很常见的&#xff0c;例如VIP&#xff0c;如果你不是VIP你就不能享用VIP的一些特有的功能&#xff0c;这就…

WebRTC学习笔记四 RTCDataChannel

一、RTCDataChannel 简单来说&#xff0c;RTCDataChannel 就是在点对点连接中建立一个双向的数据通道&#xff0c;从而获得文本、文件等数据的点对点传输能力。它依赖于流控制传输协议&#xff08;SCTP&#xff09;&#xff0c;SCTP 是一种传输协议&#xff0c;类似于 TCP 和 U…

[ECCV2022]Language-Driven Artistic Style Transfer

标题&#xff1a;Language-Driven Artistic Style Transfer 链接&#xff1a;https://sites.cs.ucsb.edu/~william/papers/LDAST.pdf 如标题所示&#xff0c;本文做的是基于文本引导的风格迁移。整体的思路还是用的AST(arbitrary style transfer)那一套自编码器结构。AST的思…

期中考试【Verilog】

期中考试【Verilog】前言推荐期中考试一. 单选题&#xff08;共10题&#xff09;二. 填空题&#xff08;共5题&#xff09;三. 简答题&#xff08;共3题&#xff09;四. 其它&#xff08;共4题&#xff09;最后前言 编写于2022/11/30 13:30 以下内容源自Verilog期中试题 仅供…

Windows访问centOS的Tomcat

首先&#xff0c;先准备好jdk1.8和Tomcat的文件 点击此处获取jdk1.8和Tomcat的文件&#xff08;提取码&#xff1a;xxrc&#xff09; 配置IP地址 打开终端输入ifconfig&#xff0c;检查centOS的ip地址 根据要求&#xff0c;是要把ip地址最后一位改为自己的学号&#xff08;前…

手把手教你做智能合约开源|多文件合约开源|引用文件开源

本文手把手教你使用 区块链浏览器 验证智能合约的三种方式。 验证单一 Solidity 文件 在开始验证之前&#xff0c;我们需要首先部署智能合约。进入 Remix IDE&#xff0c;创建一个合约新文件。复制粘贴下面的代码&#xff1a; // SPDX-License-Identifier: MITpragma solidit…

夜曲编程Python体验课

目录 day1 编程中的“文本” 代码规范 打印数字 打印字符串 注释 总结思维导图 day2 变量与赋值 变量 常量 赋值 格式化输出 转义字符&#xff1a; 总结思维导图 day3 编程中的“数字” 整形 浮点型 运算符 四种常见的四则运算符&#xff08; - * / &…

【软件测试】测试人的我们,咋做一个如鱼得水的测试员?

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 一千个人&#xff0…

短视频创作,主动变现和被动变现方式详解,建议收藏反复阅读-下

同样先说纲要&#xff0c;有兴趣可以继续看下去&#xff0c;上一篇讨论了抖音变现的有三个建议&#xff0c;①变现标准低、②变现天花板高、③可主动变现。 这一篇的内容只要是抖音上被动和主动两类变现方式&#xff0c;涉及了直播打赏&#xff0c;广告接单&#xff0c;视频带货…