Linux安装Redis

NoSQL(NoSQL=Not Only SQL),泛指非关系型的数据库

NoSQL 不依赖业务逻辑方式存储,而已简单的key-value模式存储,因此大大增加了数据库的扩展能力

不遵循SQL标准,有一套自己的操作标准

不支持ACID,(不是不支持事务,zhi'shi)

负载均衡:什么是负载均衡? - 知乎icon-default.png?t=LA92https://zhuanlan.zhihu.com/p/32841479

安装步骤:

sudo su 切换超级管理员账号

linux安装及操作

redis.io官网下载tar.gz包

然后打开linux,打开虚拟机,打开fz建立windows和linux连接,

安装 gcc环境 rpm -q gcc查看是否安装

sudo apt-get update 先更新

sudo apt-get install gcc 安装

sudo gcc --version

查看ssh是否开启,

dpkg -l | grep ssh 查看是否开启,

sudo apt-get install openssh-client 重新启动openssh-client

sudo apt-get install openssh-server 重新启动openssh-server

sudo apt-get install ssh 命令安装ssh

sudo /etc/init.d/ssh start 启动ssh

ifconfig 查看id地址,192.168.200.129(studytest)

输入ip地址,虚拟机用户名,密码。默认端口22,连接后

上传文件,

上传后,cd进入上传tar包的目录 ll 查看文件是否存在

存在就解压到指定路径

sudo cp redis-6.2.6.tar.gz /usr/lib/jvm 将文件复制到自定路径

tar -zxf redis-6.2.6.tar.gz 解压gz包

解压完后产看文件 ls(出现蓝色redis-6.2.6即解压成功)

cd进入redis-6.2.6文件编译

sudo apt install make 安装make命令 # version 4.2.1-1.2, or

sudo apt install make-guile 安装make命令 # version 4.2.1-1.2

sudo make PREFIX=/usr/local install

sudo make distclean 执行清理命令

sudo make test

编译后默认存放位置

cd /usr/local/bin phython3.8

ll

ll

安装好了

前端启动(不推荐,窗口关闭无法运行)

redis-server

修改redis.conf文件

cd /usr/lib/jvm/redis-6.2.6

将文件复制到指定文件

sudo cp /usr/lib/jvm/redis-6.2.6/redis.conf /etc/redis

查看文件

cd /etc/redis

sudo vi redis.conf

查找/daemonize 将no改成yes

(退出):wq(保存并退出):q!(强制退出,不保存)

权限不够还是咋地????

后端启动

sudo redis-server /etc/redis/redis.conf

查看启动信息

sudo ps -ef | grep redis

连接redis

sudo redis-cli

关闭

1.shutdown

2.exit

找到进程

sudo ps -ef | grep redis

输入kill -p 5780 命令

安装yum

sudo rpm -ivh --force --nodeps python-urlgrabber-3.9.1-11.el6.noarch.rpm

sudo rpm -ivh --force --nodeps yum-metadata-parser-1.1.2-16.el6.x86_64.rpm

sudo rpm -ivh --fonce --nodeps yum-3.2.29-81.el6.centos .noarch.rpm yum-plugin-fastestmirror-1.1.30-41,el6.noarch.rpm

rpm -ivh --nodeps http://mirrors.163.com/centos/5/os/x86_64/CentOS/yum-fastestmirror-1.1.16-14.el5.centos.1.noarch.rpm

rpm -ivh --nodeps http://mirrors.163.com/centos/5/os/x86_64/CentOS/yum-metadata-parser-1.1.2-3.el5.centos.x86_64.rpm

rpm -ivh --nodeps http://mirrors.163.com/centos/5/os/x86_64/CentOS/yum-3.2.22-26.el5.centos.noarch.rpm

redis介绍

默认端口号6379(Merz)

默认有16个数据库,默认应用0号数据库

select 0 切换数据库 0可以是0到15

memcached与redis的区别

1.memcached支持数据类型单一

redis支持各种数据类型list、set等

2.memcached不支持持久化操作只能在内存中存储

redis即支持持久化操作也能在内存中存储

3.memcached使用多线程加锁的机制

redis使用单线程加多路IO复用的机制(能实现出多线程的效果,效率更高,效果更好)

redis常用五大数据类型

keys *查看当前库所有key    (匹配:keys *)

exists key判断某个key是否存在

type key 查看你的key是什么类型

del key       删除指定的key数据

unlink key   根据value选择非阻塞删除(异步删除)

仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。

expire key 10   10秒钟:为给定的key设置过期时间

ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期

select命令切换数据库

dbsize查看当前数据库的key的数量

flushdb清空当前库

flushall通杀全部库

String

String类型Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value

String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象

String类型是Redis最基本的数据类型,一个Redis中字符串value最多可以是512M

常用命令

1、set  添加键值对

2、get  查询对应键值

3、append 将给定的 追加到原值的末尾

4、strlen 获得值的长度

5、setnx 只有在 key 不存在时    设置 key的值

6、incr 将 key 中储存的数字值增1只能对数字值操作,如果为空,新增值为1

7、decr 将 key 中储存的数字值减1只能对数字值操作,如果为空,新增值为-1

8、incrby / decrby  将 key 中储存的数字值增减。自定义步长。(原子性操作,不会被线程调度机制打断的操作)

9、mset    ..... 同时设置一个或多个key-value对 

10、mget  .....同时获取一个或多个value 

11、msetnx   ..... 同时设置一个或多个key-value 对,当且仅当所有给定 key 都不存在。

原子性,有一个失败则都失败

12、getrange 获得值的范围,类似java中的substring,前包,后包

13、setrange 用  覆写所储存的字符串值,从开始(索引从0开始)。

14、setex  设置键值的同时,设置过期时间,单位秒。

15、getset 以新换旧,设置了新值同时获得旧值。

String的数据结构

简单的动态字符串,可以修改字符串中的值,内部结构实现上类似于Java的Arrylist,采用预分配

冗余空间来减少内u你的频繁分配

当长度超过len的长度会自动扩容,就是加倍现有的空间,超过1M,扩容一次只会多扩1M的空间,

可能之前的一倍,可能之前的0.5倍,小于1M,大于1M的扩容机制是不一样的,不管怎样最大长度为512M

List(单键多值)

Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。

数据结构

List的数据结构为快速链表quickList。首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。它将所有的元素紧挨着一起存储,分配的是一块连续的内存。

当数据量比较多的时候才会改成quicklist。因为普通的链表需要的附加指针空间太大,会比较浪费空间。比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prev和next,Redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余

常用命令

1、lpush/rpush  .... 从左边/右边插入一个或多个值。

2、lpop/rpop 从左边/右边吐出一个值。值在键在,值光键亡。

3、rpoplpush 从列表右边吐出一个值,插到列表左边。

4、lrange 按照索引下标获得元素(从左到右)

5、lrange mylist 0 -1   0左边第一个,-1右边第一个,(0-1表示获取所有)

6、lindex 按照索引下标获得元素(从左到右)

7、llen 获得列表长度

8、linsert   before 在的后面插插入值

9、lrem 从左边删除n个value(从左到右)

10、lset将列表key下标为index的值替换成value

Set(集合)

常用命令

1、sadd ..... 将一个或多个 member 元素加入到集合 key 中,已经存在的 member元素将被忽略

2、smembers 取出该集合的所有值。

3、sismember 判断集合是否为含有该值,有1,没有0scard返回该集合的元素个数

4、scard返回该集合的元素个数。

5、srem .... 删除集合中的某个元素。

6、spop 随机从该集合中吐出一个值。

7、srandmember 随机从该集合中取出n个值。不会从集合中删除 。

8、smove

value把集合中一个值从一个集合移动到另一个集合

9、sinter 返回两个集合的交集元素。

10、sunion 返回两个集合的并集元素。

11、sdiff 返回两个集合的差集元素(key1中的,不包含key2中的)

Hash(哈希)

常用命令

1、hset 给集合中的  键赋值

2、hget 从集合取出 value

3、hmset ...批量设置hash的值

4、hexists 查看哈希表 key 中,给定域 field 是否存在。

5、hkeys 列出该hash集合的所有field

6、hvals 列出该hash集合的所有value

7、hincrby 为哈希表 key 中的域 field 的值加上增量 1   -1

8、hsetnx 将哈希表 key 中的域 field 的值设置为 value ,当且仅当域field (字段)不存在 .

Zset(有序集合)

常用命令

1、zadd …将一个或多个 2、member 元素及其 score 值加入到有序集 key当中。

3、zrange  [WITHSCORES]   返回有序集 key中,下标在之间的元素带WITHSCORES,可以让分数一和值返回到结果集。

4、zrangebyscore key minmax [withscores] [limit offset count]返回有序集 key 中,所有 score 值介于 min和 max 之间(包括等于 min或 max )的成员。有序集成员按 score 值递增(从小到大)次序排列。

5、zrevrangebyscore key maxmin [withscores] [limit offsetcount]  同上,改为从大到小排列。

6、zincrby   为元素的score加上增量

7、zrem 删除该集合下,指定值的元素

8、zcount 统计该集合,分数区间内的元素个数

9、zrank 返回该值在集合中的排名,从0开始。

Bitmap

1、setbit设置Bitmaps中某个偏移量的值(0或1)*offset:偏移量从0开始。unique:users:20201106代表2020-11-06这天的独立访问用户的Bitmaps

2、getbit获取Bitmaps中某个偏移量的值,获取键的第offset位的值(从0开始算)

3、bitcount[start end] 统计字符串从start字节到end字节比特值为1的数量

4、bitop and(or/not/xor) destkey> [key…]bitop是一个复合操作, 它可以做多个Bitmaps的and(交集) 、 or(并集) 、 not(非) 、 xor(异或) 操作并将结果保存在destkey中

HyperLogLog

1、pfadd < element> [element ...]   添加指定元素到 HyperLogLog 中

2、pfcount [key ...] 计算HLL的近似基数,可以计算多个HLL,比如用HLL存储每天的UV,计算一周的UV可以使用7天的UV合并计算即可

3、pfmerge [sourcekey...]  将一个或多个HLL合并后的结果存储在另一个HLL中,比如每月活跃用户可以使用每天的活跃用户来合并计算可得

Geospatial

1、geoadd< longitude>[longitude latitude member...]   添加地理位置(经度,纬度,名称)

2、geopos  [member...] 获得指定地区的坐标值

3、geodist  [m|km|ft|mi ] 获取两个位置之间的直线距离

4、georadius< longitude>radius  m|km|ft|mi  以给定的经纬度为中心,找出某一半径内的元素

配置文件介绍

自定义目录:cd /etc/redis

查看文件:sudo vi redis.conf

MODULES

redis3.0的爆炸功能是新增了集群,而redis4.0就是在3.0的基 础上新增了许多功能,其中这里的 自定义模块配置就是其中之一。通过这里的 loadmodule 配置将引入自定义模块来新增一些功能。

GENERAL (通用)

Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程,pidfile:配置PID文件路径,当redis作为守护进程运行的时候,它会把 pid 默认写到 /var/redis/run/redis_6379.pid 文件里面

     daemonize no

当Redis以守护进程方式运行时,配置PID文件路径,当redis作为守护进程运行的时候,它会把 pid 默认写到/var/redis/run/redis_6379.pid 文件里面可以通过pidfile指定

     pidfile /var/run/redis.pid

定义日志级别。默认值为notice,有如下4种取值:

          debug(记录大量日志信息,适用于开发、测试阶段)

          verbose(较多日志信息)

          notice(适量日志信息,使用于生产环境)

          warning(仅有部分重要、关键信息才会被记录)

 loglevel verbose

配置log文件地址,默认打印在命令行终端的窗口上,默认为标准输出,如果配置Redis为守护进程方式运行,而这里又配置为日志记录方式为标准输出,则日志将会发送给/dev/null

   logfile stdout

设置数据库的数目。默认的数据库是DB 0 ,可以在每个连接上使用select  命令选择一个不同的数据库,dbid是一个介于0到databases - 1 之间的数值。默认值是 16,也就是说默认Redis有16个数据库。

databases 16

INCLUDES

指定包含其它的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各个实例又拥有自己的特定配置文件

    include /path/to/local.conf

NETWORK (网络相关配置)

绑定的主机地址,绑定redis服务器网卡IP,默认为127.0.0.1,即本地回环地址。这样的话,访问redis服务只能通过本机的客户端连接,而无法通过远程连接。如果bind选项为空的话,那会接受所有来自于可用网络接口的连接

    bind 127.0.0.1

port:指定redis运行的端口,默认是6379。由于Redis是单线程模型,因此单机开多个Redis进程的时候会修改端口。作者在自己的一篇博文中解释了为什么选用6379作为默认端口,因为6379在手机按键上MERZ对应的号码,而MERZ取自意大利歌女Alessia Merz的名字

timeout:设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接。默认值为0,表示不关闭。

 timeout 300

tcp-keepalive :单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是300s,如果设置为0,则不会周期性的检测。

tcp-backlog设置tcp的backlog,backlog其实是一个连接队列,backlog队列总和=未完成三次握手队列 + 已经完成三次握手队列。在高并发环境下你需要一个高backlog值来避免慢客户端连接问题

protected-mode将本机访问保护模式设置no

如果开启了protected-mode,那么在没有设定bind ip且没有设密码的情况下,Redis只允许接受本机的响应

  

SNAPSHOTTING

指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

    save

    Redis默认配置文件中提供了三个条件:  

save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存 save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存 save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存

stop-writes-on-bgsave-error :默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。这会让用户意识到数据没有正确持久化到磁盘上,否则没有人会注意到灾难(disaster)发生了。如果Redis重启了,那么又可以重新开始接收数据了

对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。

rdbcompression yes

  rdbchecksum :默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。

设置快照的文件名,默认是 dump.rdb

dbfilename dump.rdb

设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。使用上面的 dbfilename 作为保存的文件名 

dir ./

REPLICATION

slave-serve-stale-data:默认值为yes。当一个 slave 与 master 失去联系,或者复制正在进行的时候,slave 可能会有两种表现:

   1) 如果为 yes ,slave 仍然会应答客户端请求,但返回的数据可能是过时,或者数据可能是空的在第一次同步的时候 

   2) 如果为 no ,在你执行除了 info he salveof 之外的其他命令时,slave 都将返回一个 "SYNC with master in progress" 的错误

slave-read-only:配置Redis的Slave实例是否接受写操作,即Slave是否为只读Redis。默认值为yes。

repl-diskless-sync:主从数据复制是否使用无硬盘复制功能。默认值为no。

repl-diskless-sync-delay:当启用无硬盘备份,服务器等待一段时间后才会通过套接字向从站传送RDB文件,这个等待时间是可配置的。  这一点很重要,因为一旦传送开始,就不可能再为一个新到达的从站服务。从站则要排队等待下一次RDB传送。因此服务器等待一段  时间以期更多的从站到达。延迟时间以秒为单位,默认为5秒。要关掉这一功能,只需将它设置为0秒,传送会立即启动。默认值为5。

repl-disable-tcp-nodelay:同步之后是否禁用从站上的TCP_NODELAY 如果你选择yes,redis会使用较少量的TCP包和带宽向从站发送数据。但这会导致在从站增加一点数据的延时。  Linux内核默认配置情况下最多40毫秒的延时。如果选择no,从站的数据延时不会那么多,但备份需要的带宽相对较多。默认情况下我们将潜在因素优化,但在高负载情况下或者在主从站都跳的情况下,把它切换为yes是个好主意。默认值为no。

SECURITY(安全)

rename-command:命令重命名,对于一些危险命令例如:

    flushdb(清空数据库)

    flushall(清空所有记录)

    config(客户端连接后可配置服务器)

    keys(客户端连接后可查看所有存在的键)                   

作为服务端redis-server,常常需要禁用以上命令来使得服务器更加安全,禁用的具体做法是是:

  • rename-command FLUSHALL "" 也可以保留命令但是不能轻易使用,重命名这个命令即可:
  • rename-command FLUSHALL abcdefg这样,重启服务器后则需要使用新命令来执行操作,否则服务器会报错unknown command。

requirepass:设置redis连接密码访问密码的查看、设置和取消

在命令中设置密码,只是临时的。重启redis服务器,密码就还原了,比如: requirepass 123  表示redis的连接密码为123.默认关闭,。

永久设置,需要再配置文件中进行设置

 当master服务设置了密码保护时,slav服务连接master的密码

  masterauth

LIMITS(限制)

maxclients :设置客户端最大并发连接数,默认无限制,Redis可以同时打开的客户端连接数为Redis进程可以打开的最大文件。  描述符数-32(redis server自身会使用一些),如果设置 maxclients为0 。表示不作限制。当客户端连接数到达限制时,Redis会关闭新的连接并向客户端返回max number of clients reached错误信息

maxmemory:指定Redis最大内存限制,Redis在启动时会把数据加载到内存中,达到最大内存后,Redis会先尝试清除已到期或即将到期的Key,当此方法处理 后,仍然到达最大内存设置,将无法再进行写入操作,但仍然可以进行读取操作。Redis新的vm机制,会把Key存放内存,Value会存放在swap区,设置Redis的最大内存,如果设置为0 。表示不作限制。通常是配合下面介绍的maxmemory-policy参数一起使用

    maxmemory

maxmemory-policy :当内存使用达到maxmemory设置的最大值时,redis使用的内存清除策略。有以下几种可以选择:

    1)volatile-lru   利用LRU算法移除设置过过期时间的key (LRU:最近使用 Least Recently Used ) 

    2)allkeys-lru   利用LRU算法移除任何key 

    3)volatile-random 移除设置过过期时间的随机key 

    4)allkeys-random  移除随机ke

    5)volatile-ttl   移除即将过期的key(minor TTL) 

    6)noeviction  noeviction   不移除任何key,只是返回一个写错误 ,默认选项

maxmemory-samples :LRU 和 minimal TTL 算法都不是精准的算法,但是相对精确的算法(为了节省内存)。随意你可以选择样本大小进行检,redis默认选择3个样本进行检测,你可以通过maxmemory-samples进行设置样本数。

APPEND ONLY MODE

指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。因为 redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no

    appendonly no

指定更新日志文件名,默认为appendonly.aof

     appendfilename appendonly.aof

指定更新日志条件,共有3个可选值:     no:表示等操作系统进行数据缓存同步到磁盘(快)     always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)     everysec:表示每秒同步一次(折衷,默认值)

    appendfsync everysec

在aof重写或者写入rdb文件的时候,会执行大量IO,此时对于everysec和always的aof模式来说,执行fsync会造成阻塞过长时间,no-appendfsync-on-rewrite字段设置为默认设置为no。如果对延迟要求很高的应用,这个字段可以设置为yes,否则还是设置为no,这样对持久化特性来说这是更安全的选择。   设置为yes表示rewrite期间对新写操作不fsync,暂时存在内存中,等rewrite完成后再写入,默认为no,建议yes。Linux的默认fsync策略是30秒。可能丢失30秒数据。默认值为no。

no-appendfsync-on-rewrite no

默认值为100。aof自动重写配置,当目前aof文件大小超过上一次重写的aof文件大小的百分之多少进行重写,即当aof文件增长到一定大小的时候,Redis能够调用bgrewriteaof对日志文件进行重写。当前AOF文件大小是上次日志重写得到AOF文件大小的二倍(设置为100)时,自动启动新的日志重写过程。

auto-aof-rewrite-percentage 100

设置允许重写的最小aof文件大小,避免了达到约定百分比但尺寸仍然很小的情况还要重写

auto-aof-rewrite-min-size 64mb

aof文件可能在尾部是不完整的,当redis启动的时候,aof文件的数据被载入内存。重启可能发生在redis所在的主机操作系统宕机后,尤其在ext4文件系统没有加上data=ordered选项,出现这种现象  redis宕机或者异常终止不会造成尾部不完整现象,可以选择让redis退出,或者导入尽可能多的数据。如果选择的是yes,当截断的aof文件被导入的时候,会自动发布一个log给客户端然后load。如果是no,用户必须手动redis-check-aof修复AOF文件才可以。默认值为 yes。

aof-load-truncated yes

LUA SCRIPTING 

一个lua脚本执行的最大时间,单位为ms。默认值为5000.

lua-time-limit 5000

REDIS CLUSTER

cluster-enabled:集群开关,默认是不开启集群模式。

cluster-config-file:集群配置文件的名称,每个节点都有一个集群相关的配置文件,持久化保存集群的信息。 这个文件并不需要手动配置,这个配置文件有Redis生成并更新,每个Redis集群节点需要一个单独的配置文件。请确保与实例运行的系统中配置文件名称不冲突。默认配置为nodes-6379.conf。

cluster-node-timeout :可以配置值为15000。节点互连超时的阀值,集群节点超时毫秒数

cluster-slave-validity-factor :可以配置值为10。在进行故障转移的时候,全部slave都会请求申请为master,但是有些slave可能与master断开连接一段时间了,  导致数据过于陈旧,这样的slave不应该被提升为master。该参数就是用来判断slave节点与master断线的时间是否过长。判断方法是:比较slave断开连接的时间和(node-timeout * slave-validity-factor) + repl-ping-slave-period     如果节点超时时间为三十秒, 并且slave-validity-factor为10,假设默认的repl-ping-slave-period是10秒,即如果超过310秒slave将不会尝试进行故障转移

cluster-migration-barrier :可以配置值为1。master的slave数量大于该值,slave才能迁移到其他孤立master上,如这个参数若被设为2,那么只有当一个主节点拥有2 个可工作的从节点时,它的一个从节点会尝试迁移。

cluster-require-full-coverage:默认情况下,集群全部的slot有节点负责,集群状态才为ok,才能提供服务。  设置为no,可以在slot没有全部分配的时候提供服务。不建议打开该配置,这样会造成分区的时候,小分区的master一直在接受写请求,而造成很长时间数据不一致。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值