NOSQL----redis的安装和基础命令

redis是什么

1.redis-------非关系型数据库

redis是非关系数据库的一种,也称为缓存型数据库。

非关系型数据库和关系型数据库

1.关系型数据库

  • 关系型数据库是一个结构化的数据库,记录方式是行和列(列:声明对象,行:记录对象属性)
  • sql语句。表与表之间是有关联的,使用sql语句,来对指定的表,库进行增删改查。
  • 在创建表时,我们是设计好了表的结构,按照表结构去存储数据。数据与表结构不匹配,存储数据会失败。

2.非关系型数据库

  • nomysql(not lnly mysql),不仅仅是数据库,是非关系型数据库的总称
  • 不需要定义库,也不需要定义表的结构,直接记录即可,而且每条记录都可以有不同的数据类型,字段(字段个数)

3.非关系型数据库和关系型数据库的区别

(1)数据的存储方式不同

关系型数据库和非关系型数据库的主要区别就在于数据的存储方式

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

(2) 扩展方式

  • 性能上的提升,SQL靠的是提升本机性能。
  • NOMYSQL提升性能可以横向扩展(添加集群),加入节点的方式提高性能

  • 横向扩展:增加服务器(比较便宜,性价比高)
  • 纵向扩展:提高硬件配置,比如说cpu性能,硬盘,磁盘I/O,内存条等

(3) 对事务的支持性能不同

  • MySQL支持事务
  • 非关系型数据库也支持事务,redis也可以支持事务,但是稳定性和处理能力都不如关系型数据库。

关系型数据库:特别适合高事务性要求和需要控制执行计划的任务,事务处理更加精细。

非关系型数据库:事务控制会稍显弱势,其价值点在于高扩展性和大数据量处理方面。

2.非关系型数据库的主要运用场景

1.操作的扩展性

2.大数据量处理

3.MySQL和nomysql数据记录对比

关系型数据库:

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

非关系型数据库

  • 实例-->数据库-->集合(collection) -->键值对(key-value)
  • 不需要手动创建库,表

非关系型数据库工作示意图:

redis的相关知识

1.介绍

开源的,使用c语言编写的NQL数据库。

redis:基于内存运行,支持持久化(数据恢复)。采用的就算key-value(键值对)的存储形式。目前在分布式架构中是非常重要的一环

  1. redis服务器程序,是一个单进程模式,即只有一个主进程工作。也就是说在一台服务器上可以启动多个redis(端口号不能冲突)
  2. redis的实际处理速度是完全依靠主进程的执行效率。
  3. 服务器只部署一个redis进程,多个客户端访问,可能会导致redis的处理能力下降
  4. 如果部署了多个redis进程,虽然能提高redis的并发处理能力,但是会给服务器cpu带来很大的压力。
  5. 一台服务器,一般部署3个redis进程。(根据情况来看,高并发,要部署多个。一般的情况,单进程足够)

2.redis的特点

  1. 极高的读写数据速度,数据读取每秒110000次,写入数据每秒81000的写入。
  2. 支持丰富的数据类型。
  3. 支持持久化。平常的数据都是保存在内存中,持久化可以写入你,既可以保存到本地,也可以实现备份。
  4. 原子性(最小单位,不可被分割)
  5. 支持主从模式-----master,slave

3.redis为什么这么快???

1.redis是一个纯内存结构,避免磁盘I/O的耗时

2.核心模块是一个单进程,减少了线程切换和回收线程的时间。

3.I/O的多路复用机制,每一个执行线路,都可以同时执行读和写。并发效率大大提高。

*特殊说明:redis的读写任然是单进程处理

4.redis的五大数据类型

  1. string(字符串)
  2. list----列表。(列表内的元素类型还是string)
  3. hash类型
  4. set数据类型
  5. 有序集合

redis的部署和安装

1.redis的编译安装

关闭防火墙
systemctl stop firewalld
setenforce 0

安装编译环境
yum install -y gcc gcc-c++ make

将安装包拖入/opt,然后解压
tar zxvf redis-5.0.7.tar.gz -C /opt/


cd /opt/redis-5.0.7/
make

make PREFIX=/usr/local/redis install

#执行软件包提供的 install_server.sh 脚本文件设置 Redis 服务所需要的相关配置文件
cd /opt/redis-5.0.7/utils
./install_server.sh

......					#一直回车
Please select the redis executable path [/usr/local/bin/redis-server] /usr/local/redis/bin/redis-server  	
#需要手动修改为 /usr/local/redis/bin/redis-server ,注意要一次性正确输入


#把redis的可执行程序文件放入路径环境变量的目录中便于系统识别
ln -s /usr/local/redis/bin/* /usr/local/bin/


#当 install_server.sh 脚本运行完毕,Redis 服务就已经启动,默认监听端口为 6379
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.233.10				#70行,添加 监听
wq

重启服务
/etc/init.d/redis_6379 restart

Redis 命令工具

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

redis-cli 命令行工具

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

redis-cli -h 192.168.233.21 -p 6379 -a 123456

redis五大字符串详解

1.string(字符串)

概述:String是 redis 最基本的类型,最大能存储 512MB 的数据,
String类型是二进制安全的,即可以存储任何数据、比如数字、图片、序列化对象等

SET/GET/DEL/APPEND

set:存放数据,命令格式为 set key value
get:获取数据,命令格式为 get key
keys *  查看有多少键

20.0.0.170:6379> set stu zzr
OK
20.0.0.170:6379> get stu
"zzr"
20.0.0.170:6379> 

set可以创建键,也可以直接覆盖键值

直接更改键值

20.0.0.170:6379> set stu zzr
OK
20.0.0.170:6379> get stu
"zzr"
20.0.0.170:6379> set stu 100
OK
20.0.0.170:6379> get stu
"100"

删除键----del

20.0.0.170:6379> KEYS *
1) "test1"
2) "test"
3) "stu"
20.0.0.170:6379> del test1 test
(integer) 2
20.0.0.170:6379> KEYS *
1) "stu"

查看对应键的类型

20.0.0.170:6379> type stu
string

给键添加字符:APPEND key value追加键值,并返回追加后的长度(若键不存在,则相当于创建)

20.0.0.170:6379> KEYS *
1) "stu"
20.0.0.170:6379> type stu
string
20.0.0.170:6379> append test hello
(integer) 5
20.0.0.170:6379> KEYS *
1) "test"
2) "stu"
20.0.0.170:6379> get test
"hello"
20.0.0.170:6379> append test world
(integer) 10
20.0.0.170:6379> get test
"helloworld"

incr/decr/incrby/descby

incr----让键值递增1

decr----让键值递减1

incrby/decrby-----给指定键值增加或者减少

(如果键不存在,则从0开始递减)

SETEX

setex key seconds value:设置指定key的过期时间为seconds
20.0.0.170:6379> setex test 15 hello
OK
20.0.0.170:6379> ttl test1
(integer) -2
20.0.0.170:6379> ttl test
(integer) 5
20.0.0.170:6379> ttl test
(integer) 4
20.0.0.170:6379> ttl test
(integer) 3
20.0.0.170:6379> ttl test
(integer) 3
20.0.0.170:6379> ttl test
(integer) 2
20.0.0.170:6379> ttl test
(integer) 2
20.0.0.170:6379> ttl test
(integer) 1
20.0.0.170:6379> ttl test
(integer) 0
20.0.0.170:6379> ttl test
(integer) -2
20.0.0.170:6379> ttl test
(integer) -2
20.0.0.170:6379> ttl test
(integer) -2

-2表示当前键值对已过期

-1表示永不过期

expire--对已有键值设置生命周期

 SETNX:
SETNX key value:不存在键的话执行set操作,存在的话不执行

20.0.0.170:6379> del stu        #删除该键,以便于下面的测试验证。
(integer) 1
20.0.0.170:6379> setnx stu "hello"    #该键并不存在,因此setnx命令执行成功。
(integer) 1
20.0.0.170:6379> get stu
"hello"
20.0.0.170:6379> setnx stu "123"        #该键已经存在,因此本次设置没有产生任何效果。
(integer) 0
20.0.0.170:6379> get stu                     #从结果可以看出,返回的值仍为第一次设置的值。
"hello" 

mset/mget----同时设置

MSET key value [key value …]:批量设置键-值对
MGET key [key …]:批量获取键值对

20.0.0.170:6379> mset test 123 test2 234
OK
20.0.0.170:6379> KEYS *
1) "test"
2) "test2"
3) "stu"
20.0.0.170:6379> mget test test2
1) "123"
2) "234"

2.list数据类型----列表

列表当中的元素还是string类型。

LPUSH/LPUSHX/ LRANGE

LPUSH key value [value …]在头部(左侧)依次插入列表元素 
LPUSHX key value:键必须存在才能执行,在头部插入元素值并返回并返回列表元素数量
LRANGE key start stop:取从位置索引start到位置索引stop的所有元素(所以以0开始)

LPUSH创建列表
20.0.0.170:6379> LPUSH zzr a b c d 1 2 3
(integer) 7
20.0.0.170:6379> LRANGE zzr 0 -1
1) "3"
2) "2"
3) "1"
4) "d"
5) "c"
6) "b"
7) "a"
20.0.0.170:6379> LRANGE zzr 1 3
1) "2"
2) "1"
3) "d"

LRANGE:查看

0代表第一个,-1代表最后一个(这里序号排列和数组下标一致)

但lpush创建的元素与所查看的顺序相反,如果想要顺序一致,可以使用rpush命令

RPUSH
20.0.0.170:6379> rpush zzr1 1 2 3 a b c d
(integer) 7
20.0.0.170:6379> LRANGE zzr1 0 -1
1) "1"
2) "2"
3) "3"
4) "a"
5) "b"
6) "c"
7) "d"

添加

l---从左(上)往右添加

r---从右(下)往左添加

20.0.0.170:6379> lpush zzr1 10
(integer) 8
20.0.0.170:6379> LRANGE zzr1
(error) ERR wrong number of arguments for 'lrange' command
20.0.0.170:6379> LRANGE zzr1 0 -1
1) "10"
2) "1"
3) "2"
4) "3"
5) "a"
6) "b"
7) "c"
8) "d"
20.0.0.170:6379> rpush zzr1 100
(integer) 9
20.0.0.170:6379> LRANGE zzr1 0 -1
1) "10"
2) "1"
3) "2"
4) "3"
5) "a"
6) "b"
7) "c"
8) "d"
9) "100"

5.删除   lpop/rpop

lpop:从左(上)删
rpop:从右(下)删
20.0.0.170:6379> LPOP zzr1
"10"
20.0.0.170:6379> LRANGE zzr1 0 -1
1) "1"
2) "2"
3) "3"
4) "a"
5) "b"
6) "c"
7) "d"
8) "100"
20.0.0.170:6379> RPOP zzr1
"100"
20.0.0.170:6379> LRANGE zzr1 0 -1
1) "1"
2) "2"
3) "3"
4) "a"
5) "b"
6) "c"
7) "d"

指定索引下标修改 lset/linsert

20.0.0.170:6379> lset zzr1 3 www
OK
20.0.0.170:6379> LRANGE zzr1 0 -1
1) "1"
2) "2"
3) "3"
4) "www"
5) "b"
6) "c"
7) "d"

指定位置插入

20.0.0.170:6379> LINSERT zzr1 before 3 aaa
(integer) 8
20.0.0.170:6379> LRANGE zzr1 0 -1
1) "1"
2) "2"
3) "aaa"
4) "3"
5) "www"
6) "b"
7) "c"
8) "d"

3.hash类型

hash类型用于存储对象,采用hash格式来进行操作。占用的磁盘空间少,而且一个hash可以存储4294967295个键值对

 HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX

添加
20.0.0.170:6379> hset zzr2 tall 190
(integer) 1
20.0.0.170:6379> hget zzr2 tall
"190"
20.0.0.170:6379> hset zzr2 face smart
(integer) 1
20.0.0.170:6379> hmget zzr2 tall face
1) "190"
2) "smart"

删除
20.0.0.170:6379> hset zzr2 age 21
(integer) 1
20.0.0.170:6379> hdel zzr2 tall face
(integer) 2
20.0.0.170:6379> hmget zzr2 tall face age
1) (nil)
2) (nil)
3) "21"

查询所有字段
20.0.0.170:6379> hmset zzr3 tall 180 stu 123 score 90
OK
20.0.0.170:6379> hgetall zzr3
1) "tall"
2) "180"
3) "stu"
4) "123"
5) "score"
6) "90"

查询所有键
20.0.0.170:6379> hgetall zzr3
1) "tall"
2) "180"
3) "stu"
4) "123"
5) "score"
6) "90"
20.0.0.170:6379> HKEYS zzr3
1) "tall"
2) "stu"
3) "score"

所有值

20.0.0.170:6379> hvals zzr3
1) "180"
2) "123"
3) "90"

删除方式还是del

!!!hmset创建时,一定要一个键对应一个键值,否则会因为缺少参数而报错

4.set数据类型

set数据类型(无须集合)元素类型也是string。元素是唯一的,不允许重复。多个集合类型可以进行并集,交集,差集进行运算。

set当中的元素类型是唯一的,可以根据一些唯一性的数据。比如访问微博的用户名,只要把对应名称写入redis,set集合会自动保存唯一性,方便下一次访问。

20.0.0.170:6379> sadd myset a a c
(integer) 2
20.0.0.170:6379> SMEMBERS myset
1) "a"
2) "c"

不能重复,所以只保存2个

查询   1-----存在    0------不存在

20.0.0.170:6379> SMEMBERS myset
1) "a"
2) "c"
20.0.0.170:6379> SISMEMBER myset c
(integer) 1
20.0.0.170:6379> SISMEMBER myset f
(integer) 0

spop myset 随机移除一个

20.0.0.170:6379> spop myset
"c"
20.0.0.170:6379> spop myset
"a"

SRANDMEMBER myset 随机查询一个

20.0.0.170:6379> sadd myset a b c d e f g
(integer) 7
20.0.0.170:6379> SRANDMEMBER myset
"e"
20.0.0.170:6379> SRANDMEMBER myset
"g"
20.0.0.170:6379> SRANDMEMBER myset
"b"

指定移除  srem myset 【】 【】 【】

20.0.0.170:6379> SMEMBERS myset
1) "a"
2) "d"
3) "e"
4) "b"
5) "c"
6) "f"
7) "g"
20.0.0.170:6379> srem myset a b c
(integer) 3
20.0.0.170:6379> SMEMBERS myset
1) "d"
2) "e"
3) "f"
4) "g"

5.有序集合

有序集合,元素类型也是string,元素唯一,不能重复。

每个元素都会关联一个double(小数点)的分数(score,表示权重),可以通过权重的大小进行排序。元素的权重可以相同

zset:可以运用在一些 在线积分的排行榜,可以实时更新用户的分数和排名。

zrange命令获取比如积分top10的用户

zrank命令通过用户的名称来获取玩家的信息。按照权重来排列

权重是1,元素是one

20.0.0.170:6379> zadd myzset 1 one
(integer) 1
20.0.0.170:6379> ZRANGE myzset 0 -1 withscores
1) "one"
2) "1"
20.0.0.170:6379> ZRANGE myzset 0 -1 
1) "one"

加withscores显示权重,不加只显示元素

查询元素

无序集合一样,0为第一位

20.0.0.170:6379> zrank myzset one
(integer) 0
20.0.0.170:6379> zrank myzset two
(integer) 1
20.0.0.170:6379> zrank myzset three
(integer) 2

统计权重在1--2范围之内的个数---zcard/zocount

20.0.0.170:6379> zcount myzset 1 2
(integer) 2
20.0.0.170:6379> zcard myzset
(integer) 3

查看权重--zscore
20.0.0.170:6379> zscore myzset two
"2"

set和hset 创建普通类型和hash类型,一般情况下,如无特殊需求,普通的创建方式即可

对一个键进行多字段存储,节省内存,使用hash方式。

如何对已有keys重命名

重命名之后,内部值不变

当前库 键的数量

redis的库 都是创建好的,16个库

数字排名 0-15 每个数据库之间互相独立,互补干扰

select用来切换库

move移动数据,移动之后,原先的库数据就没了,转移到新库

设置密码

auth 123456 在内声明

在外声明-------端口后 -a 密码

删除库--使用注意,缝纫机警告⚠!!!!!

删除当前库

flushall-----删除所有库

缝纫机警告⚠

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python二级 每周练习题27

如果你感觉有收获,欢迎给我打赏 ———— 以激励我输出更多优质内容 练习一: 用户输入一个半径r,求该半径下的圆的面积s与周长c。要求如下: (1)输出的面积与周长都保留俩位小数; (2&#xff0…

王先生丢手机上热搜!VERTU放大招:推出真人找手机服务

日前,一则关于民警三小时帮助失主寻回三十万天价手机的新闻登上热搜,引发网友对这部三十万手机的好奇与猜测。据了解,该男子丢失的手机疑似为一款名叫VERTU Signature 的奢侈品定制手机,而根据其官网显示,“唐卡定制”…

家庭教育专家:如何创建家庭自主学习环境?

经常听到一些父母这样抱怨:“明明和孩子说好就看20分钟电视,结果到了时间,他死活都不肯关。”“作业还没完成的情况下,孩子还一直抱着手机或者电子产品玩游戏。到了约定时间也不撒手,一直跟你讨价还价。” 其实&#…

图像处理02 matlab中NSCT的使用

06 matlab中NSCT的使用 最近在学习NSCT相关内容,奈何网上资源太少,简单看了些论文找了一些帖子才懂了一点点,在此分享给大家,希望有所帮助。 一.NSCT流程 首先我们先梳理一下NSCT变换的流程,只有清楚流程才更好的理清…

Redis(位图Bitmap和位域Bitfield)

位图: 位图是字符串类型的扩展。 Redis中的位图是一种特殊的数据结构,用于表示一系列位的集合。它可以存储大量的布尔值数据,每个位代表一个布尔值(0或1),并且可以对这些位进行各种位运算操作。位图通常用…

【ARM Trace32(劳特巴赫) 使用介绍 2.3 -- TRACE32 进阶命令之 参数传递介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 参数传递命令 ENTRY 参数传递命令 ENTRY ENTRY <parlist>The ENTRY command can be used to Pass parameters to a PRACTICE script or to a subroutineTo return a value from a subroutine 使用示例&am…

C++入门第八篇---STL模板---list的模拟实现

前言&#xff1a; 有了前面的string和vector两个模板的基础&#xff0c;我们接下来就来模拟实现一下list链表模板&#xff0c;我还是要强调的一点是&#xff0c;我们模拟实现模板的目的是熟练的去使用以及去学习一些对于我们本身学习C有用的知识和用法&#xff0c;而不是单纯的…

泛型进阶:通配符

基本概念 对泛型不了解的可以看这篇博客&#xff1a;数据结构前瞻-CSDN博客 一般来说&#xff0c;&#xff1f;在泛型里的使用就是通配符 看看下面的代码 class Message<T> {private T message ;public T getMessage() {return message;}public void setMessage(T m…

Qml使用cpp文件的信号槽

文章目录 一、C文件Demo二、使用步骤1. 初始化C文件和QML文件&#xff0c;并建立信号槽2.在qml中调用 一、C文件Demo Q_INVOKABLE是一个Qt元对象系统中的宏&#xff0c;用于将C函数暴露给QML引擎。具体来说&#xff0c;它使得在QML代码中可以直接调用C类中被标记为Q_INVOKABLE的…

【Sql】sql server还原数据库的时候,提示:因为数据库正在使用,所以无法获得对数据库的独占访问权。

【问题描述】 sql server 还数据库的时候&#xff0c;提示失败。 点击左下角进度位置&#xff0c;可以得到详细信息&#xff1a; 因为数据库正在使用&#xff0c;所以无法获得对数据库的独占访问权。 【解决方法】 针对数据库先后执行下述语句&#xff0c;获得独占访问权后&a…

Python 和 Ruby 谁是最好的Web开发语言?

Python 和 Ruby 都是目前用来开发 websites、web-based apps 和 web services 的流行编程语言之一。 【这个时候又人要说PHP是世界上最好的语言了】 我就不说PHP 最好的方法 VS 以人为本的语言 社区: 稳定与创新 尽管特性和编程哲学是选择一个语言的首要驱动因素&#xff0c…

stack和queue简单实现(容器适配器)

容器适配器 stack介绍stack模拟实现queue 介绍queue模拟实现deque stack介绍 stack模拟实现 以前我们实现stack&#xff0c;需要像list,vector一样手动创建成员函数&#xff0c;成员变量。但是stack作为容器适配器&#xff0c;我们有更简单的方法来实现它。 可以利用模板的强大…

C语言生成dll与lib文件

环境要求 新建一个空白项目&#xff0c;可以是exe的&#xff0c;也可以直接是dll的&#xff0c;也可以是啥都没有的空项目&#xff0c;推荐创建空项目&#xff0c;项目创建好以后进行配置&#xff0c;共两步 第一步&#xff0c;打开项目属性 第二步&#xff0c;设置配置类型…

基础课10——自然语言生成

自然语言生成是让计算机自动或半自动地生成自然语言的文本。这个领域涉及到自然语言处理、语言学、计算机科学等多个领域的知识。 1.简介 自然语言生成系统可以分为基于规则的方法和基于统计的方法两大类。基于规则的方法主要依靠专家知识库和语言学规则来生成文本&#xff0…

java中的抽象

1.当一个类中给出的信息不够全面时&#xff0c;&#xff08;比方说有无法确定的行为&#xff09;&#xff0c;它给出的信息不足以描绘出一个具体的对象&#xff0c;这时我们往往不会实例化该类&#xff0c;这种类就是抽象类。 2. 在Java中&#xff0c;我们通过在类前添加关键字…

Redis篇---第九篇

系列文章目录 文章目录 系列文章目录前言一、如果有大量的 key 需要设置同一时间过期,一般需要注意什么?二、什么情况下可能会导致 Redis 阻塞?三、缓存和数据库谁先更新呢?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击…

南京--ChatGPT/GPT4 科研实践应用

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

MySQL 数据库下载

1 最新版 MySQL :: Download MySQL Community Server 2 存档版本(Archived Versions)-历史版本 MySQL :: Download MySQL Community Server (Archived Versions) 3 下载(样例: zip 方式) tip1&#xff1a; 可以下载安装文件的方式&#xff0c;也可以使用压缩包方式&#xff…

Git详解

Git是一个开源的分布式版本控制系统&#xff0c;常用于软件开发中对代码版本管理。Git具有版本控制、协作开发、分支管理、代码审查等功能&#xff0c;能够记录每次代码修改的内容和时间&#xff0c;并能够回滚到任意历史版本&#xff0c;方便团队协作和代码维护。 Git的基本概…

腾讯云5年服务器2核4G和4核8G配置租用价格表

腾讯云百科整理五年云服务器优惠活动 txybk.com/go/txy 配置可选2核4G和4核8G&#xff0c;公网带宽可选1M、3M或5M&#xff0c;系统盘为50G高性能云硬盘&#xff0c;标准型S5实例CPU采用主频2.5GHz的Intel Xeon Cascade Lake或者Intel Xeon Cooper Lake处理器&#xff0c;睿频3…
最新文章