redis命令行操作库、键、和五大数据类型详解

news2025/1/30 16:35:22

一、数据库操作命令

redis默认有16个数据库,类似数组下标从0开始,初始默认使用0号库。

1.1 测试是否连通

ping

测试服务器是否连通 返回pone就是连通了

1.2 切换数据库

select index

1.3 数据移动

move key db

1.4 显示数据总量

dbsize

1.5 数据清除

flushdb		# 只清除当前库 
flushall	# 16个库一起清

二、键操作命令

2.1 查看当前库所有key

keys *

2.2 删除指定key

立即删除:

del key

异步删除:

unlink key

2.3 获取key是否存在

exists key

2.4 获取key的类型

type key

2.5 更改key的名字

# 当 key和newkey相同,或者 key不存在时,返回一个错误
# 当 newkey 已经存在时, RENAME 命令将覆盖旧值
rename key newkey	
# 当且仅当newkey不存在时,将key改名为newkey,否则不会改名
renamenx key newkey

2.6 指定key的有效期

# 为当前key设置过期10秒的时间
expire key 10

# 为当前key设置过期10毫秒的时间
pexpire key 10

# 以Unix时间戳格式设置键的到期时间(不常用)
expireat key 1393840000

2.7 获取key的有效期

# 以秒为单位返回 key 的剩余过期时间
ttl key
# 以毫秒为单位返回 key 的剩余过期时间
pttl key

2.8 把key从会过期的换为不会过期

persist key

2.9 查询模式的使用

语法结构:

keys pattern

使用示例:

keys *          查询所有key
keys java*      查询所有以java开头的key
keys *java     	查询所有以java结尾的key
keys ??heima    查询所有前面两个字符任意,后面以java结尾的key
keys user:?     查询所有user:开头,最后一个字符任意的key
keys u[st]er:1  查询所有以u开头,以er:1结尾,中间包含一个字母,s或t的key

三、五大数据类型-string

stringredis最基本的类型,一个key对应一个value,是一种单键单值的结构。

string类型是二进制安全的。意味着redisstring可以包含任何数据。比如jpg图片或者序列化的对象。
在这里插入图片描述

3.1 添加/修改数据

set key value

3.2 获取数据

get key

3.3 删除数据

del key

3.4 在key不存在时 设置key的值

setnx key value

3.5 添加/修改多个数据

mset key1 value1 key2 value2 …

3.6 获取多个数据

mget key1 key2 …

3.7 获取key对应value的长度

strlen key

3.8 追加信息到原始信息后面

append key value

3.9 将key中储存的数字值增加指定的值

# 将key中所储存的值加1(默认就是加1,因此不写就是加1)
incr key

# 将key中所储存的值加10
incrby key 10

# 将key中所储存的值加上指定的浮点数增量值
incrbyfloat key 9.9

3.10 将key中储存的数字值减少指定的值

# 将key中储存的数字值减1
decr key

# 将key中所储存的值减少指定值
decrby key 10

3.11 设置有效时间

# 设置键值的同时,设置过期时间(时间单位为秒)
setex key seconds value

# 设置键值的同时,设置过期时间(时间单位为毫秒)
psetex key milliseconds value

3.12 设置指定key的值,并返回key的旧值

GETSET db mongodb    # 首次设置没有旧值,返回 nil
GETSET db redis      # 返回旧值 mongodb

3.13 获取指定key对应的值的一部分数据

# getrange key 起始位置 结束位置
getrange key 0 3

3.14 覆盖给定key所储存的字符串的一部分值

# setrange key 起始位置 value
SETRANGE key 6 "Redis"

覆盖的位置从偏移量6开始。

3.13 string命名规约

比如新浪微博大V主页显示粉丝数与微博数量,这种访问量很高的数据,我们应按如下规则命名会比较好:

  • redis中为大V用户设定用户信息,以用户主键和属性值作为key,后台设定定时刷新策略即可。
eg:	user:id:3506728370:fans		→	12210947
eg:	user:id:3506728370:blogs	→	6164
eg:	user:id:3506728370:focuses	→	83
  • 也可以使用json格式保存数据
eg:	user:id:3506728370    →	{“fans”:12210947,“blogs”:6164,“ focuses ”:83 }
  • key 的设置约定
表名主键名主键值字段名
eg:userid29437595fans

这样设置,不仅规则清晰,之后找数据和排错也更加方便,便于维护。

3.14 string类型的其它注意事项

  • 数据未获取到时,返回对应的数据为nil,等同于null

  • 数据最大存储量:512MB

  • Stringredis内部存储默认就是一个字符串,当遇到增减类操作incrdecr时会转成数值型进行计算

  • 按数值进行操作的数据,如果原始数据不能转成数值,或超越了redis 数值上限范围,将报错

  • redis所有的操作都是原子性的,采用单线程处理所有业务,命令是一个一个执行的,因此无需考虑并发带来

    的数据影响.

3.15 string数据结构详解

string的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS)。

是可以修改的字符串,内部实现类似于JavaArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。

它内部为当前字符串实际分配的空间capacity一般要高于实际字符串长度len

当字符串长度小于1M时,扩容都是加倍现有的空间。

如果超过1M,扩容时一次只会多扩1M的空间。需要注意的是字符串最大长度为512M

四、五大数据类型-list

list数据类型,一个key对应多个value,是一种单键多值的数据结构。

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

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

宏观来看就是key存储这一个list的这样结构的数据:

在这里插入图片描述

4.1 添加/修改数据

# 从左边插入数据
# 语法:lpush key value1 [value2] ……
lpush key 10 20 30

# 从左边插入数据
# 语法:rpush key value1 [value2] ……
rpush key 10 20 30

4.2 获取并移除一个数据(弹出数据)

lpop key    # 从左侧弹出
rpop key    # 从右侧弹出

每次操作只会弹出一个数据,最终值在键在,值光键亡。

4.3 从key1列表右边吐出一个值,插到key2列表左边

rpoplpush key1 key2

4.4 按照索引下标获得元素(从左到右获取)

lrange key start stop

# 示例
# 0左边第一个,-1右边第一个,这就表示获取所有的意思
lrange mylist 0 -1

range操作不会移除元素,和pop操作是不同的

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

lindex key index 

4.6 获得列表长度

llen key

4.7 在value的后面插入newvalue

linsert key before value newvalue

4.8 删除count个和value相等的元素

lrem key count value

# 示例 删除5个redis字符串
lrem mylist 5 redis
  • count > 0 : 从表头开始向表尾搜索,移除与value相等的元素,数量为count
  • count < 0 : 从表尾开始向表头搜索,移除与value相等的元素,数量为count的绝对值。
  • count = 0 : 移除表中所有与value相等的值。

4.9 将列表key下标为index的值替换成指定value

lset key index value 

4.10 规定时间内获取并移除数据

# 在指定时间内 从左边移出并获取列表的第一个元素
blpop key1 [key2] timeout
# 在指定时间内 从右边移出并获取列表的第一个元素
brpop key1 [key2] timeout
# 在指定时间内 从source列表中取出最后一个元素,并插入到另外一个列表destination的头部
brpoplpush source destination timeout

4.11 list的数据结构

list的数据结构为快速链表quickList

首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是ziplist,也即是压缩列表。

它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量比较多的时候才会改成quicklist

因为普通的链表需要的附加指针空间太大,会比较浪费空间。

比如这个列表里存的只是int类型的数据,结构上还需要两个额外的指针prevnext

redis将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist使用双向指针串起来使用。
在这里插入图片描述

这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。

五、五大数据类型-hash

hash数据类型是一个键值对集合,可以理解为左边一个key,对右边一个存储空间。

右边这块儿存储空间叫hash,也就是说hash是指的一个数据类型。

它指的不是一个数据,是这里边的一堆数据,那么它底层呢,是用hash表的结构来实现的。

值得注意的是:

如果右边存储空间数量较少,存储结构优化为类数组结构。

如果右边存储空间数量较多,存储结构使用HashMap结构。

在这里插入图片描述

宏观来看就是一个string类型的field(字段)和value(值)的映射表,特别适合用于存储对象。

类似Java里面的Map<String,Object>

比如用户id为查找的key,存储的value为用户对象的各个字段的键值对:如果用普通的key/value结构来存储

在这里插入图片描述

这样通过 **key(用户ID) + field(属性标签) **就可以操作对应属性数据了。

既不需要重复存储数据,也不会带来反复序列化和并发修改控制的问题。

5.1 添加/修改数据

# key 是redis的键   field是hash中数据的键
hset key field value
# 示例
hset key name "张三"

5.2 获取数据

# 从key中取出 hash的键为field的值
hget key field

# 获取key中全部的hash数据
hgetall key

5.3 删除数据

# 设置了几个field就删除几个
hdel key field1 field2...

5.4 设置field的值,如果该field存在则不做任何操作

hsetnx key field value

5.5 添加/修改多个数据(批量添加)

hmset key field1 value1 field2 value2 …

5.6 获取多个数据

hmget key field1 field2 …

5.7 获取哈希表中字段的数量

hlen key

5.8 获取哈希表中是否存在指定的字段

hexists key field

5.9 列出该hash集合的所有field

hkeys key

5.10 列出该hash集合的所有value

hvals key

5.11 为哈希表 key 中的域 field 的值加上指定值

# 这里的increment只能是整数
hincrby key field increment

# 这里的increment只能是浮点数
hincrbyfloat key field increment

5.12 当field不存在时才添加field

hsetnx key field value

5.13 hash类型数据其它的注意事项

  • hash类型中value只能存储字符串,不允许存储其他数据类型,不存在嵌套现象。

    如果数据未获取到,对应的值为(nil)。

  • 每个hash可以存储 2^32-1个键值对

    hash类型十分贴近对象的数据存储形式,并且可以灵活添加删除对象属性。

    hash设计初衷不是为了存储大量对象而设计 的,切记不可滥用,更不可以将hash作为对象列表使用。

  • hgetall操作可以获取全部属性,如果field过多,遍历整体数据效率会很低,有可能成为数据访问瓶颈。

5.14 hash类型对应的数据结构

hash类型的数据结构主要有两种:ziplist(压缩列表),hashtable(哈希表)。

field-value长度较短且个数较少时,使用ziplist,否则使用hashtable

六、五大数据类型-set

redisset数据类型对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的。

当需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择。

并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

set是一个string类型的无序集合。它底层其实是一个valuenullhash表。
在这里插入图片描述

所以添加,删除,查找的复杂度都是O(1)

一个算法,随着数据的增加,执行时间的长短,如果是O(1),那么意味着随着数据增加,查找数据的时间不变。

这在大数据查找时就显得很有优势了。

6.1 添加数据

sadd key member1 [member2]...

# 示例:
asdd myset 9 8 7

6.2 获取全部数据

smembers key

6.3 删除一部分数据

srem key member1 [member2]...

6.4 获取集合数据总量

scard key

6.5 判断集合中是否包含指定数据

sismember key member

6.6 随机获取集合中指定数量的数据

srandmember key [count]

6.7 随机获取集中的某个数据并将该数据移除集合

# count不指定时默认为1
spop key [count]

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

# source 源集合的名称
# destination 目标集合的名称
# value源集合想要移动的值
smove source destination value

6.9 返回两个集合的交集元素

sinter key1 key2

6.10 返回两个集合的并集元素

sunion key1 key2

6.11 返回两个集合的差集元素

sdiff key1 key2

6.12 求两个集合的交、并、差集并存储到指定集合中

# 求两个集合的交集元素并存储到destination集合当中
sinterstore destination key1 key2

# 求两个集合的并集元素并存储到destination集合当中
sunionstore destination key1 key2

# 求两个集合的差集元素并存储到destination集合当中
sdiffstore destination key1 key2

6.13 set 类型数据操作的注意事项

  • set 类型不允许数据重复,如果添加的数据在set中已经存在,将只保留一份。

  • set 虽然与hash的存储结构相同,但是无法启用hash中存储值的空间。

6.14 set类型的数据结构

Set数据结构是dict字典,字典是用哈希表实现的。

JavaHashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。

redisset结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。

七、五大数据类型-Zset(sorted set)

Redis有序集合zset与普通集合set非常相似,是一个没有重复元素的字符串集合。

不同之处是有序集合的每个成员都关联了一个评分(score)。

这个评分(score)被用来按照从最低分到最高分的方式排序集合中的成员。

集合的成员是唯一的,但评分可以重复 。

因为元素是有序的, 所以你也可以很快的根据评分(score)或者次序(position)来获取一个范围的元素。

并且访问有序集合的中间元素也是非常快的。

优势利用zset实现一个文章访问量的排行榜,就是非常不错的选择。

7.1 将一个或多个元素及其score 值加入到有序集 key 当中

# 就是每个值前面得加一个分数用来排序
zadd key score1 value1 score2 value2

7.2 返回有序集key中,下标在start到stop之间的元素

# WITHSCORES可加可不加,但是加了可以让分数一起和值返回到结果集
zrange key start stop [WITHSCORES]

# 示例:获取key中下边0-5之间的元素
zrange key 0 5 WITHSCORES

7.3 返回有序集key中,所有 score 值介于min和max之间的元素

zrangebyscore key min max [withscores] [limit offset count]

# 示例
ZRANGEBYSCORE salary -inf +inf					# 显示整个有序集salary的数据
ZRANGEBYSCORE salary -inf +inf WITHSCORES    	# 显示整个有序集及成员的 score 值
ZRANGEBYSCORE salary -inf 5000 WITHSCORES    	# 显示工资 <=5000 的所有成员
ZRANGEBYSCORE salary (5000 400000				# 显示工资大于 5000 小于等于 400000 的成员
ZRANGEBYSCORE salary (5000 (400000				# 显示工资大于 5000 小于 400000 的成员

包括等于 min 或 max 的元素

返回值按score从小到大排列

zrevrangebyscore key max min [withscores] [limit offset count]

这个和上面的用法几乎一样,只不过返回值按score从大到小排列

7.4 为元素的score加上增量 increment

zincrby key increment value

# 示例
zincrby myzset 2 "one"		# 返回值是增加后的分数

7.4 删除有序集合中指定值的元素

zrem key value

7.5 统计该有序集分数区间内的元素个数

zcount key min max

7.6 返回该值在有序集合中的排名,从0开始

zrank key value>

7.8 zset的数据结构

zsetredis提供的一个非常特别的数据结构。

一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score。

另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过

score的范围来获取元素的列表。

zset底层使用了两个数据结构:

  • hashhash的作用就是关联元素value和权重score

    保障元素value的唯一性,可以通过元素value找到相应的score值。

  • 跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

zrevrangebyscore key max min [withscores] [limit offset count]

这个和上面的用法几乎一样,只不过返回值按score从大到小排列

7.4 为元素的score加上增量 increment

zincrby key increment value

# 示例
zincrby myzset 2 "one"		# 返回值是增加后的分数

7.4 删除有序集合中指定值的元素

zrem key value

7.5 统计该有序集分数区间内的元素个数

zcount key min max

7.6 返回该值在有序集合中的排名,从0开始

zrank key value>

7.8 zset的数据结构

zsetredis提供的一个非常特别的数据结构。

ZSet数据较少时底层数据结构是ziplist,数据较多时转为skiplist

一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score

另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过

score的范围来获取元素的列表。

zset底层使用了两个数据结构:

  • hashhash的作用就是关联元素value和权重score

    保障元素value的唯一性,可以通过元素value找到相应的score值。

  • 跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。

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

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

相关文章

Maven 跳过测试的几种方式

在 Maven 对项目进行编译的时候&#xff0c;我们通常可能会希望跳过复杂的测试。 尤其是在开始项目还不是非常稳定的阶段。 命令行中使用 -Dmaven.test.skiptrue 在命令行&#xff0c;只要简单的给任何目标添加 maven.test.skip 属性就能跳过测试&#xff1a; mvn install …

leetcode:6251. 统计回文子序列数目【dp + 统计xy子序列出现的个数】

目录题目截图题目分析ac code总结题目截图 题目分析 固定了中间的数i后从两边选xy 和 yx对于x y的情况&#xff0c;比较简单预处理每个数字出现的index为ids然后看看两边x各自的个数n1 n2n1和n2必须大于等于2左边可以选n1 * (n1 - 1) // 2右边可以选n2 * (n2 - 1) // 2两边乘…

【C++】通过哈希表实现map和set

前言 在前面&#xff0c;我们通过红黑树这一底层结构实现了map和set。它们是关联式容器。而现在&#xff0c;我们将通过哈希表这一数据结构重新实现map和set&#xff0c;即unordered系列的关联式容器。因为它们的遍历是无序的&#xff0c;和平衡二叉树不同&#xff0c;不能做到…

APOLLO UDACITY自动驾驶课程笔记——规划、控制

1、路径规划使用三个输入&#xff0c;第一个输入为地图&#xff0c;Apollo提供的地图数据包括公路网和实时交通信息。第二个输入为我们当前在地图上的位置。第三个输入为我们的目的地&#xff0c;目的地取决于车辆中的乘客。 2、将地图转为图形 该图形由“节点”(node)和“边缘…

直流潮流计算matlab程序

一、直流潮流计算原理 直流潮流发的特点是用电力系统的交流潮流&#xff08;有功功率和无功功率&#xff09;等值的直流电流来代替。甚至只用直流电路的解析法来分析电力系统的有功潮流&#xff0c;而不考虑无功分布对有功的影响。这样一来计算速度加快&#xff0c;但计算的准确…

Rocket MQ : 拒绝神化零拷贝

注: 本文绝非对零拷贝机制的否定笔者能力有限&#xff0c;理解偏差请大家多多指正不可否认零拷贝对于Rocket MQ的高性能表现有着积极正面的作用&#xff0c;但是笔者认为只是锦上添花&#xff0c;并非决定性因素。Rocket MQ性能卓越的原因绝非零拷贝就可以一言以蔽之。 笔者企图…

第146篇 笔记-智能合约介绍

定义&#xff1a;当满足某些预定义条件时&#xff0c;智能合约是一种在区块链网络上运行的防篡改程序。 1.什么是智能合约 智能合约是在区块链网络上托管和执行的计算机程序。每个智能合约都包含指定预定条件的代码&#xff0c;这些条件在满足时会触发并产生结果。通过在去中…

IDEA热部署插件JRebel and XRebel

IDEA热部署插件JRebel and XRebel嘚吧嘚下载安装激活配置使用嘚吧嘚 刚开始用过一段时间的eclipse&#xff0c;其他方面没感觉&#xff0c;但是eclipse的热部署真的是深得我心啊&#x1f60a;。 后来换了IDEA&#xff0c;瞬间就心动了&#xff0c;各个方面真的很好用&#xf…

U3D VideoPlayer播放视频和坑点

最近做的游戏里,需要先播放一段几秒钟的工作室LOGO片头,拿到的视频是AVI格式,以前没在U3D里用到过视频,本以为很简单,没想到都2022年了,U3D播放视频还这么烂。。。 插件最好用的是AVPro,除非你有大量的视频要播放,否则没必要用插件,一个是贵,另一个插件很大。 首先…

Python爬虫从入门到进阶

前言 董伟明&#xff0c;国内某知名Python应用网站高级产品开发工程师&#xff0c;《 Python Web 开发实战》作者&#xff0c;本书目前已经售出 17k 余本&#xff0c;另外也已经在台湾地区上市。在 2012 和 2014 年分别通过 2 个爬虫免试获得 2 个业界知名公司 offer&#xff…

MyBatis缓存机制之一级缓存

MyBatis缓存机制之一级缓存 前言 MyBatis内部封装了JDBC&#xff0c;简化了加载驱动、创建连接、创建statement等繁杂的过程&#xff0c;是我们常见的持久性框架。缓存是在计算机内存中保存的临时数据&#xff0c;读取时无需再从磁盘中读取&#xff0c;从而减少数据库的查询次…

Node.js 入门教程 1 Node.js 简介

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程1 Node.js 简介1.1 大量的库1.2 Node.js 应用程序的示例1.3 Node.js框架和工具1 Node.js 简介 Node.js 是一个开源和跨平台…

子矩形计数(冬季每日一题 17)

给定一个长度为 nnn 的数组 aaa 和一个长度为 mmm 的数组 bbb。 两个数组均只包含 000 和 111。 利用两个给定数组生成一个 nmnmnm 的矩阵 ccc&#xff0c;其中 cijaibjc_{ij}a_ib_jcij​ai​bj​。 显然&#xff0c;矩阵 ccc 中也只包含 000 和 111。 请问&#xff0c;矩阵…

期末复习 c

作者&#xff1a;小萌新 专栏&#xff1a;C语言复习 作者简介&#xff1a; 大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;回顾之前的分支循环以及一些题目博客 [TOC](这里写目录标题分支循环选择switch casegetchar putchar 以及EOF三个C语言练习题总结…

C++智能指针之unique_ptr

C智能指针之unique_ptr前言一、unique_ptr1.1 unique_ptr类的初始化1.2 unique_ptr禁止拷贝和赋值1.3 release、reset函数1.4 向unique_ptr传递删除器1.5 unique_ptr与动态数组的使用总结前言 在C中&#xff0c;动态内存的申请和释放是通过运算符&#xff1a;new 和 delete 进行…

【无线传感器】基于Matlab实现WSN 查找两个节点之间的最短路径并发送数据

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Linux基础内容(13)—— 进程控制

目录 1.fork函数的进程创建 1.fork返回值 2.fork返回值 3.fork调用失败 2.写时拷贝 3.退出码的知识 4.进程退出 1.退出的情况 2.正常退出 5.进程等待 1.调用系统等待函数杀死僵尸进程 2.僵尸状态与PCB的关系 3.进程阻塞等待与非阻塞等待方式 6.进程程序替换 1.替…

【网络篇】第十八篇——IP协议相关技术

目录 DNS DNS背景 域名的层级关系 域名解析过程 使用dig工具分析DNS过程 ARP DHCP NAT NAT IP转换过程 NAPT NAT技术的缺陷 如何解决NAT潜在问题 ICMP ICMP功能 ICMP协议格式 ping命令 traceroute命令 IGMP 跟IP 协议相关的技术也不少&#xff0c;接下来说说与IP 协议相关的重…

Docker——Prometheus监控服务治理

摘要 Prometheus是继Kubernetes之后&#xff0c;第二个从云原生计算基金会&#xff08;CNCF&#xff09;毕业的项目。Prometheus是Google监控系统BorgMon类似实现的开源版&#xff0c;整套系统由监控服务、告警服务、时序数据库等几个部分&#xff0c;及周边生态的各种指标收集…

uniapp vuex正确的打开方式

uniapp vuex正确的打开方式一、vuex与全局变量globalData的区别二、uniapp vuex使用目录结构如下1. 根目录创建vuex目录&#xff0c;创建index.js文件2. 模块化代码3. 在 main.js 中导入store文件4. 调用一、vuex与全局变量globalData的区别 uni-app像小程序一样有globalData&…