Redis(上)

1、redis

        Redis是一个完全开源免费的高性能(NOSQL)的key-value数据库。它遵守BSD协议,使用ANSI C语言编写,并支持网络和持久化。Redis拥有极高的性能,每秒可以进行11万次的读取操作和8.1万次的写入操作。它支持丰富的数据类型,包括String、Hash、List、Set和Ordered Set,并且所有的操作都是原子性的。此外,Redis还提供了多种特性,如发布/订阅、通知、key过期等。Redis采用自己实现的分离器来实现高速的读写操作,效率非常高。Redis是一个简单、高效、分布式、基于内存的缓存工具,通过网络连接提供Key-Value式的缓存服务。

特性

  • 分布式缓存

  • 内存存储

  • 持久化

  • 高可用架构搭配

  • 缓存穿透、击穿、雪崩

  • 分布式锁

  • 队列

1.1、下载安装

1.1.1、window版本

        是这样的,redis的开发者没有提供redis的windows版本,但是有大佬在github提供啦window版本的redis,所以就先说一下哦window版的下载安装,下载地址Releases · tporadowski/redis (github.com),然后解到你指定的目录就可以。

        然后启动的话可以直接双击,先启动redis的服务端,然后是访客端。也可以使用命令的方式,在当前目录下打开命令行窗口。  

D:\Redis>redis-server.exe redis.windows.conf

        然后访客端的启动

#没有修改配置文件中的代码的启动方式
redis-cli -h localhost -p 6379
#修改后
redis-cli -h localhost -p 6379 -a 123456

        端口号其实可以不指定,默认也是6379,这里的-a就是你修改配置文件中指定的密码,想要修改密码的话可以打开配置文件。

1.1.2、linux版本

        然后linux系统的安装有一定的前置条件,比如拥有gcc编译程序,查看当前系统是否拥有gcc编译程序,使用命令gcc -v查看 。

 这里已经安装了,如果是centos7应该是内置的叭,然后如果没有的话可以安装gcc,使用以下命令。

[root@localhost redis]# yum -y install gcc-c++

        然后就是linux版本的下载和安装,下载地址Download | Redis,下载后上传到你的linux系统,这里建议弄一个统一的目录去管理你所安装的软件:

将上传的文件解压到你指定的目录

[root@localhost redis]# tar -zxvf redis-7.2.3.tar.gz 

切换到你解压后的文件

[root@localhost redis]# cd redis-7.2.3/

 然后编译安装

[root@localhost redis-7.2.3]# make && make install

查看安装后的目录:  

cd usr/loacl/bin

  • redis-benchmark:性能测试工具

  • redis-check-aof:修复有问题的aof文件

  • redis-check-dump:修复有问题的dump.rdp文件

  • redis-cli:redis的客户端

  • redis-setinel:redis集群使用

  • redis-server:redis的服务器启动命令

修改配置文件:

        这里不建议直接在原本的配置文件中修改数据,我们可以在当前的文件夹下创建一个存放我们配置文件的地方,然后将原本的配置文件复制一份然后进行数据的修改。

#创建目录  
mkdir redisconf

#复制文件
cp redis.conf redisconf

接下来就是修改配置文件了,redis.conf配置文件,改完后确保生效,记得重启,记得重启

  • 1 默认daemonize no 改为 daemonize yes

  • 2 默认protected-mode yes 改为 protected-mode no

  • 3 默认bind 127.0.0.1 改为 直接注释掉(默认bind 127.0.0.1只能本机访问)或改成本机IP地址,否则影响远程IP连接

  • 4 添加redis密码 改为 requirepass 你自己设置的密码

这里要使用vim编辑器,使用中的可能会用到的命令

#显示行号
set nu

#快速查找
/ 查找的关键字

#对于查询结果的查看
使用 快捷键 n/N 两个都可以,一个向上一个向下

修改过后,然后就是启动测试

#这里的配置文件是要我们指定,就是刚刚修改后的配置文件
[root@localhost redisconf]# redis-server /software/redis/redis-7.2.3/redisconf/redis.conf 

#查看启动情况
ps -ef|grep redis|grep -v grep

#然后启动客户端 这里端口可以不指定,然后ip的话,我刚刚指定的是自己ip
redis-cli -a 密码 -p 6379 -h 192.168.200.88

#当然不指定-a 后的密码的话,也可以进入界面,但是执行操作的时候会显示没有权限,然后可以使用
auth 密码 来进行认证!

#测试
ping
#输出PONG,ok!!!

#客户端退出命令
exit

#单实例关闭
redis-cli -a 密码 shutdown

#多实例关闭,指定端口关闭
redis-cli -p 6379 shutdown
1.1.3、卸载

        卸载就很简单,首先关闭服务,然后就是删除/usr/local/bin 下的所有关于redis的文件

rm -rf /usr/local/bin redis*

2、redis中的数据类型

首先要明白的是,redis中的数据类型指的是value,对于key的话只有一个String类型,先总体的了解一下!

2.1、redis字符串

string是redis最基本的类型,一个key对应一个value。string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象 。一个redis中字符串value最多可以是512M。

操作命令

2.1.1、set、setnx、get

        SET 命令用于设置给定 key 的值。如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。

例子:

set key value

        setnx命令在指定的 key 不存在时,为 key 设置指定的值。如果存在则失败

例子

setnx k1 v1
#ok
​
setnx k1 v11
#integer 1

        get命令返回 key 的值,如果 key 不存在时,返回 nil。 如果 key 不是字符串类型,那么返回一个错误。

例子

get key
2.1.2、mset、mget、msetnx

        mset命令用于同时设置一个或多个 key-value 对,就是很牛如果 key 已经存储其他值, SET 就覆写旧值,且无视类型。就是每一次都是ok!!!

例子:

Mset k1 v1 k2 v2
Mset k1 v1111 k3 v3
​
#查询
get k1 是v1111

        Mget 命令返回所有(一个或多个)给定 key 的值。 如果给定的 key 里面,有某个 key 不存在,那么这个 key 返回特殊值 nil。

例子

mget k1 k2

        msetnx所有给定 key 都不存在时,同时设置一个或多个 key-value 对。如果批量中有已经存在的key,那么这次批量就都不成功

例子

msetnx k1 v1 k2 v2
#返回ok
msetnx k1 v11 k3 v3
#返回(integer) 0
2.1.3、getrange、setrange

        Getrange 命令用于获取存储在指定 key 中字符串的子字符串。字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内),当start为0,end 为-1的时候取全部的字符串。

语法: GETRANGE KEY_NAME start end

例子

SET mykey "This is my test key"
​
getrange 0 3
#输出This
​
getrange 0 -1
#输出This is my test key

        Setrange 命令用指定的字符串覆盖给定 key 所储存的字符串值,覆盖的位置从偏移量 offset 开始。

语法:SETRANGE KEY_NAME OFFSET VALUE

例子

SET mykey "This is my test key"
​
#假设想让my替换成you
setrange 8 you
​
> get mykey
This is youtest key
2.1.4、incr、incrby、incrbyfloat

        incr命令将 key 中储存的数字值增一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。

语法:INCR KEY_NAME

例子:

> set num 1
OK
> incr num
2
> incr num
3
​
#非数值
> set num2 sss
OK
> incr num2
ERR value is not an integer or out of range

        Incrby 命令将 key 中储存的数字加上指定的增量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCRBY 命令。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。

语法: INCRBY KEY_NAME INCR_AMOUNT

例子

> incrby num 50
53
​
#不存在
> incrby num3 50
50
​
#不是数值
> incrby num2 50
ERR value is not an integer or out of range

        incrbyfloat命令为 key 中所储存的值加上指定的浮点数增量值。如果 key 不存在,那么 INCRBYFLOAT 会先将 key 的值设为 0 ,再执行加法操作。

语法:INCRBYFLOAT KEY_NAME INCR_AMOUNT

例子

> incrbyfloat mun4 0.1
0.1
2.1.5、decr、decrby

        Decr 命令将 key 中储存的数字值减一。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。

语法:DECR KEY_NAME

例子

# 对存在的数字值 key 进行 DECR
redis> SET failure_times 10
OK
redis> DECR failure_times
(integer) 9
 
# 对不存在的 key 值进行 DECR
redis> EXISTS count
(integer) 0
redis> DECR count
(integer) -1
 
# 对存在但不是数值的 key 进行 DECR
redis> SET company YOUR_CODE_SUCKS.LLC
OK
redis> DECR company
(error) ERR value is not an integer or out of range

        Decrby 命令将 key 所储存的值减去指定的减量值。如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECRBY 操作。如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。本操作的值限制在 64 位(bit)有符号数字表示之内。

语法:DECRBY KEY_NAME DECREMENT_AMOUNT

例子

# 对已存在的 key 进行 DECRBY
 
redis> SET count 100
OK
 
redis> DECRBY count 20
(integer) 80
 
 
# 对不存在的 key 进行DECRBY
 
redis> EXISTS pages
(integer) 0
 
redis> DECRBY pages 10
(integer) -10

2.1.6、其他特殊命令

        Strlen命令用于获取指定 key 所储存的字符串值的长度。当 key 储存的不是字符串值时,返回一个错误。

语法:STRLEN KEY_NAME

例子:

> strlen mykey
19

        Redis Append 命令用于为指定的 key 追加值。如果 key 已经存在并且是一个字符串, APPEND 命令将 value 追加到 key 原来的值的末尾。如果 key 不存在, APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。

语法:APPEND KEY_NAME NEW_VALUE

例子

> get mykey
This is youtest key
> append mykey aaa
22
> append mykey 哈哈哈哈
34
> append mykey1 啊啊啊啊
12
> get mykey
This is youtest keyaaa哈哈哈哈
> get mykey1
啊啊啊啊

        Getset 命令用于设置指定 key 的值,并返回 key 旧的值。 当 key 没有旧值时,即 key 不存在时,返回 nil 。

当 key 存在但不是字符串类型时,返回一个错误。

语法:GETSET KEY_NAME VALUE

例子:

> getset num 224
53
​
> getset num22 224
null

2.2、redis列表

        Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)它的底层实际是个双端链表,最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

        主要功能有push/pop等,一般用在栈、队列、消息队列等场景。left、right都可以插入添加,如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。

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

2.2.1、lpush、rpush、lpushx、rpushx

        Redis Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。执行 LPUSH 命令后返回的是列表的长度。

语法:LPUSH KEY_NAME VALUE1.. VALUEN

例子:

> lpush num 1 2 3 4 5 6
6
> lrange num 0 -1
6
5
4
3
2
1

        Redis Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。执行 RPUSH 操作后,返回的是列表的长度。

语法:RPUSH KEY_NAME VALUE1..VALUEN

例子:

> rpush letter a b c d e
5
> lrange letter  0 -1
a
b
c
d
e

        Redis Lpushx 将一个或多个值插入到已存在的列表头部,列表不存在时操作无效。执行成功放回的是列表的长度

语法:LPUSHX KEY_NAME VALUE1.. VALUEN

例子:

> lpushx num1 1 2 3
0
> keys *
letter
num

        Redis Rpushx 命令用于将一个或多个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。执行成功返回的是列表的长度。

语法: RPUSHX KEY_NAME VALUE1..VALUEN

例子:

> rpushx num1 1 2 3
0
> keys *
letter
num
2.2.2、lindex、linsert 、lset

        Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。返回列表中下标为指定索引值的元素。 如果指定索引值不在列表的区间范围内,返回 nil 。

语法:LINDEX KEY_NAME INDEX_POSITION

例子:

> lrange num 0 -1
6
5
4
3
2
1
> lindex num 0
6
> lindex num -1
1

        Redis Linsert 命令用于在列表的元素前或者后插入元素。 当指定元素不存在于列表中时,不执行任何操作。 当列表不存在时,被视为空列表,不执行任何操作。 如果 key 不是列表类型,返回一个错误。如果命令执行成功,返回插入操作完成之后,列表的长度。 如果没有找到指定元素 ,返回 -1 。 如果 key 不存在或为空列表,返回 0 。

语法:LINSERT KEY_NAME BEFORE|AFTER EXISTING_VALUE NEW_VALUE

例子:

> rpush word 你 好 呀 臭 狗 屎
6
> LINSERT word after 呀 !
7
> lrange word 0 -1
你
好
呀
!
臭
狗
屎
> LINSERT word before 臭 臭
8
> lrange word 0 -1
你
好
呀
!
臭
臭
狗
屎

        Redis Lset 通过索引来设置元素的值。当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。操作成功返回 ok

语法: LSET KEY_NAME INDEX VALUE

语法:

> lrange word 0 -1
你
好
呀
!
臭
臭
狗
屎
> lset word 7 狗
OK
> lrange word 0 -1
你
好
呀
!
臭
臭
狗
狗
2.2.3、lpop、rpop、ltrim、lrem、rpoplpush

        Redis Lpop 命令用于移除并返回列表的第一个元素。 当列表 key 不存在时,返回 nil 。

语法:LPOP KEY_NAME

例子:

> lrange num 0 -1
5
4
3
2
1
> lpop num
5
> lpop num
4
> lrange num 0 -1
3
2
1

        Redis Rpop 命令用于移除并返回列表的最后一个元素。当列表不存在时,返回 nil 。

语法:RPOP KEY_NAME

例子:

> rpop letter
e
> lrange letter 0 -1
a
b
c
d

        Redis Ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。命令执行成功时,返回 ok 。下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

语法:LTRIM KEY_NAME START STOP

例子:

> lrange word 0 -1
你
好
呀
!
臭
臭
狗
狗
> ltrim word 0 3
OK
> lrange word 0 -1
你
好
呀
!

        Redis Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。

COUNT 的值可以是以下几种:

  • count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。

  • count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。

  • count = 0 : 移除表中所有与 VALUE 相等的值。

语法: LREM KEY_NAME COUNT VALUE

例子:

> rpush list 1 1 1 1 2 2 3 3 3 4 5 6 6 6 1 1 1 3 3 3 4 4
​
#前
> lrem list 2 1
2
> Lrange  list 0 -1
1 1 2 2 3 3 3 4 5 6 6 6 1 1 1 3 3 3 4 4 
#后
> lrem list -2 1
2
> Lrange  list 0 -1
1 1 2 2 3 3 3 4 5 6 6 6 1 3 3 3 4 4
​
#所有
> lrem list 0 1
3
> Lrange  list 0 -1
2 2 3 3 3 4 5 6 6 6 3 3 3 4 4

        Redis Rpoplpush 命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。返回值是被弹出的元素。

语法:RPOPLPUSH SOURCE_KEY_NAME DESTINATION_KEY_NAME

例子:

> rpush  list 1 2 3 4 5
5
> rpush list1 6 7 8 9
4
> lrange list 0 -1
1
2
3
4
5
> lrange list1 0 -1
6
7
8
9
> rpopLpush list list1
5
> lrange list 0 -1
1
2
3
4
> lrange list1 0 -1
5
6
7
8
9
2.2.4、其他的操作

        Redis Llen 命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。

语法:LLEN KEY_NAME

例子:

> llen list
4

2.3、redis哈希表

        Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。Redis 中每个 hash 可以存储 2^32 - 1 键值对(40多亿)。

2.3.1、hset、hget、hmset、hmget、hgetall、hsetnx

        Redis Hset 命令用于为哈希表中的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,旧值将被覆盖。

语法:HSET KEY_NAME FIELD VALUE

        Redis Hget 命令用于返回哈希表中指定字段的值,返回给定字段的值。如果给定的字段或 key 不存在时,返回 nil 。

语法:HGET KEY_NAME FIELD_NAME

例子:

> hset user name 张三
1
> hset user name 李四
0
> hget user name
李四
> hget user age
null

        Redis Hmset 命令用于同时将多个 field-value (字段-值)对设置到哈希表中。此命令会覆盖哈希表中已存在的字段。如果哈希表不存在,会创建一个空哈希表,并执行 HMSET 操作。

语法:HMSET KEY_NAME FIELD1 VALUE1 ...FIELDN VALUEN

        Redis Hmget 命令用于返回哈希表中,一个或多个给定字段的值。如果指定的字段不存在于哈希表,那么返回一个 nil 值。返回的是一个包含多个给定字段关联值的表,表值的排列顺序和指定字段的请求顺序一样。

语法: HMGET KEY_NAME FIELD1...FIELDN

例子:

> hmset user name 王五 age 25 sex 男
OK
> hmget user name age sex
王五
25
男

        Redis Hgetall 命令用于返回哈希表中,所有的字段和值。在返回值里,紧跟每个字段名(field name)之后是字段的值(value),所以返回值的长度是哈希表大小的两倍。 若 key 不存在,返回空列表。

语法:HGETALL KEY_NAME

例子:

> hgetall user
name
王五
age
25
sex
男
> hgetall student
 

        Redis Hsetnx 命令用于为哈希表中不存在的的字段赋值 。如果哈希表不存在,一个新的哈希表被创建并进行 HSET 操作。如果字段已经存在于哈希表中,操作无效。如果 key 不存在,一个新哈希表被创建并执行 HSETNX 命令。设置成功,返回 1 。 如果给定字段已经存在且没有操作被执行,返回 0 。

语法:HSETNX KEY_NAME FIELD VALUE

例子:

#key不存在
> hsetnx student name 小狗
1
#key存在但是字段
> hsetnx student name 大狗
0
#key存在但是字段不存在
> hsetnx student age 23
1
> hgetall student
name
小狗
age
23

2.3.2、hexists、hlen、hvals、hkeys、hdel

        Redis Hexists 命令用于查看哈希表的指定字段是否存在。如果哈希表含有给定字段,返回 1 。 如果哈希表不含有给定字段,或 key 不存在,返回 0 。

语法:HEXISTS KEY_NAME FIELD_NAME

例子:

> hexists user email
0
> hexists user name
1

        Redis Hlen 命令用于获取哈希表中字段的数量。哈希表中字段的数量。 当 key 不存在时,返回 0 。

语法:HLEN KEY_NAME

例子:

> hlen goods
0
> hlen user
3

        Redis Hvals 命令返回哈希表所有字段的值,一个包含哈希表中所有值的表。 当 key 不存在时,返回一个空表。

语法:HVALS KEY_NAME

例子:

> hvals user
王五
25
男

        Redis Hkeys 命令用于获取哈希表中的所有字段名。包含哈希表中所有字段的列表。 当 key 不存在时,返回一个空列表。

语法:HKEYS KEY_NAME

例子:

> hkeys user
name
age
sex

        Redis Hdel 命令用于删除哈希表 key 中的一个或多个指定字段,不存在的字段将被忽略。被成功删除字段的数量,不包括被忽略的字段。

语法:HDEL KEY_NAME FIELD1.. FIELDN

例子:

> hmset letter 1 啊 2 喔 3 额
OK
> hdel letter 2 3
2
> hgetall letter
1
啊
2.3.3、hincrby、hincrbyfloat

        Redis Hincrby 命令用于为哈希表中的字段值加上指定增量值。增量也可以为负数,相当于对指定字段进行减法操作。如果哈希表的 key 不存在,一个新的哈希表被创建并执行 HINCRBY 命令。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。对一个储存字符串值的字段执行 HINCRBY 命令将造成一个错误。本操作的值被限制在 64 位(bit)有符号数字表示之内。

语法:HINCRBY KEY_NAME FIELD_NAME INCR_BY_NUMBER

例子:

> hmset num a 1 b 2 c 3 d 4
OK
> hincrby num e 2
2
> hgetall num
a
1
b
2
c
3
d
4
e
2
> hincrby num a 2
3
> hset num f 你好
1
> hincrby num f 2
ERR hash value is not an integer

        Redis Hincrbyfloat 命令用于为哈希表中的字段值加上指定浮点数增量值。如果指定的字段不存在,那么在执行命令前,字段的值被初始化为 0 。执行 Hincrbyfloat 命令之后,哈希表中字段的值。

语法:HINCRBYFLOAT KEY_NAME FIELD_NAME INCR_BY_NUMBER

例子:

> hmset float a 1.2 b 2
OK
> hincrbyfloat float 1 0.1
0.1
> hincrbyfloat float a 0.1
1.3
> hincrbyfloat float b 0.1
2.1

3、redis的操作命令

3.1、通用操作命令

命令描述
keys *查询所有的key
type key返回 key 所储存的值的类型。
exist key检查给定 key 是否存在
del key该命令用于在 key 存在的时候删除 key
unlink key非阻塞式删除,只是将key从keyspace元数据中删除,真正的删除会在异步中菜操作
expire key为给定 key 设置过期时间
ttl key以秒为单位,返回给定 key 的剩余生存时间,-1代表永不过期,-2代表已过期
move key dbindex (0-15)将当前的数据库中的key移动到指定的数据库中
select dbindex切换数据库(0-15),默认是0
dbsize查看当前数据库中key的数量
flushdb清空当前库
flushall清空全部库
help @类型帮助命令,用于查看命令的使用方式

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

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

相关文章

步进电机为什么叫步进电机,内部结构是什么,工作原理是什么,有什么特点,什么用途。

问题描述&#xff1a;步进电机为什么叫步进电机&#xff0c;内部结构是什么&#xff0c;工作原理是什么&#xff0c;有什么特点&#xff0c;什么用途。 问题解答&#xff1a; "步进"一词表示电机按照固定的步进角度运动。步进电机以控制脉冲信号来驱动转子按照一定的…

Vue2中使用echarts,并从后端获取数据同步

一、安装echarts npm install echarts -S 二、导入echarts 在script中导入&#xff0c;比如&#xff1a; import * as echarts from "echarts"; 三、查找要用的示例 比如柱状图 四、初始化并挂载 <template><div id"total-orders-chart" s…

三天吃透Java基础面试八股文

给大家分享我整理的Java高频面试题&#xff0c;有小伙伴靠他拿到字节offer了。 Java基础面试题 Java的特点Java 与 C 的区别JDK/JRE/JVM三者的关系Java程序是编译执行还是解释执行&#xff1f;面向对象和面向过程的区别&#xff1f;面向对象有哪些特性&#xff1f;数组到底是…

适用于电脑的 8 款文件/软件迁移软件 – 快速安全地更换电脑!

将文件/软件从一台设备传输到另一台设备已成为我们日常生活的重要组成部分&#xff0c;无论是出于个人目的还是出于职业目的。在当今快节奏的世界中&#xff0c;我们经常需要在不同设备之间传输大文件&#xff0c;例如视频、照片、文档等。虽然云服务提供了一种共享文件的好方法…

关于Python里xlwings库对Excel表格的操作(二十四)

这篇小笔记主要记录如何【如何使用xlwings库中的“api”类设置单元格边界线型、粗细、颜色】。前面的小笔记已整理成目录&#xff0c;可点链接去目录寻找所需更方便。 【目录部分内容如下】【点击此处可进入目录】 &#xff08;1&#xff09;如何安装导入xlwings库&#xff1b;…

Android--Jetpack--Paging详解

不尝世间醋与墨&#xff0c;怎知人间酸与苦。 择一业谋食养命&#xff0c;等一运扭转乾坤。 你见过哪些令你膛目结舌的代码技巧&#xff1f; 文章目录 不尝世间醋与墨&#xff0c;怎知人间酸与苦。择一业谋食养命&#xff0c;等一运扭转乾坤。你见过哪些令你膛目结舌的代码技…

【GoLang】Go语言几种标准库介绍(三)

文章目录 前言几种库debug 库 (各种调试文件格式访问及调试功能)相关的包和工具&#xff1a;示例 encoding (常见算法如 JSON、XML、Base64 等)常用的子包和其主要功能&#xff1a;示例 flag(命令行解析)关键概念&#xff1a;示例示例执行 总结专栏集锦写在最后 前言 上一篇&a…

【ArcGIS微课1000例】0085:甘肃省白银市平川区4.9级地震震中位置图件制作

据中国地震台网正式测定,12月31日22时27分在甘肃白银市平川区发生4.9级地震,震源深度10公里,震中位于北纬36.74度,东经105.00度。 文章目录 一、白银市行政区划图1. 县级行政区2. 乡镇行政区二、4.9级地震图件制作1. 震中位置2. 影像图3. 震中三维地形一、白银市行政区划图…

【JavaFX】基于JavaFX11 构建可编辑、对象存储、修改立即保存、支持条件过滤的TableView

文章目录 效果设计思路二、使用步骤1. 创建实体类2.读取本地文件数据3. 定义表格TableView总结效果 如图所示,这是一个存储application.properties内容的表格。这里的文件application.properties是从Linux服务器上获取来的。 当点击检索按钮,并输入条件匹配字符时,TableVie…

初识SpringBoot(2023最后一篇文章)

初识SpringBoot 1、SpringBoot概述 Spring是什么&#xff1f; Spring是一个于2003 年兴起的一个轻量级开源Java开发框架&#xff0c;由Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》。Spring是为了解决企业级应用开发的复杂性而创建的&#xff0c;使…

「微服务」微服务架构中的数据一致性

在微服务中&#xff0c;一个逻辑上原子操作可以经常跨越多个微服务。即使是单片系统也可能使用多个数据库或消息传递解决方案。使用多个独立的数据存储解决方案&#xff0c;如果其中一个分布式流程参与者出现故障&#xff0c;我们就会面临数据不一致的风险 - 例如在未下订单的情…

Linux-------rm命令超详解(狠狠爱住)

目录 rm 命令用于在Linux系统中删除指定的文件或目录 基本语法&#xff1a; 常用选项&#xff1a; 示例用法&#xff1a; 放在文末的话&#xff1a; 补充&#xff1a; rm 命令用于在Linux系统中删除指定的文件或目录 基本语法&#xff1a; rm [选项] 文件名/目录名 常用…

一个有趣的MOSFET电路-触摸调光电路

来源 刷B站视频&#xff0c;看到一个很新奇的“触摸调光电路”&#xff0c;电路图如下&#xff1a; 视频在这里&#xff0c;只使用了3个元件。 刚好最近在学模拟电路的 MOSFET&#xff0c;我之前的理解是 MOSFET 的控制电压应该加在 Gate 和 Source 之间&#xff0c;也就是 栅…

【算法】运用滑动窗口方法解决算法题(C++)

文章目录 1. 滑动窗口 介绍2. 滑动窗口算法引入209.长度最小的子数组 3. 使用滑动窗口解决算法题3.无重复字符的最长子串1004.最大连续1的个数III1658.将x减到0的最小操作数904.水果成篮LCR015.找到字符串中所有字母异位词30.串联所有单词的子串76.最小覆盖子串 1. 滑动窗口 介…

6个火爆全网的AI开源项目,用上月10万+

标题月10万可能说的有点夸张和含糊&#xff0c;10万具体指的是你可以利用这些开源项目实现&#xff1a; 访问量10万 收入10万 用户10万 …… 开源项目只是免费的工具&#xff0c;具体怎么实现还需要你根据自己需求去深入运营。这里只是给你推荐一些比较热门的开源项目&…

搞定Apache Superset

踩雷了无数次终于解决了Superset的一系列问题 现在是北京时间2023年12月27日&#xff0c;亲测有效。 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用&#xff0c;可对接各种数据源&#xff0c;包括很多现代的大数据分析引擎&#xff…

MyBatis多表映射

1. 多表映射概念 MyBatis 思想是&#xff1a;数据库不可能永远是你所想或所需的那个样子。 我们希望每个数据库都具备良好的第三范式或 BCNF 范式&#xff0c;可惜它们并不都是那样。 如果能有一种数据库映射模式&#xff0c;完美适配所有的应用程序查询需求&#xff0c;那就太…

二叉树详解(深度优先遍历、前序,中序,后序、广度优先遍历、二叉树所有节点的个数、叶节点的个数)

目录 一、树概念及结构(了解) 1.1树的概念 1.2树的表示 二、二叉树概念及结构 2.1概念 2.2现实中的二叉树&#xff1a; 2.3数据结构中的二叉树&#xff1a; 2.4特殊的二叉树&#xff1a; 2.5 二叉树的存储结构 2.51 顺序存储&#xff1a; 2.5.2 链式存储&…

【快速全面掌握 WAMPServer】09.如何在 WAMPServer 中安装 Composer

网管小贾 / sysadm.cc WAMPServer 的大名想必应该有不少人特别是新手小白们略有耳闻吧。 它是出自法国大神之手的一款 PHP 开发环境集成包&#xff0c;工作于 Windows 环境&#xff0c;类似于它这样的集成包在 Linux 平台上反正我是没找到&#xff0c;所以它应该算是对使用 Wi…

sparkstreamnig实时处理入门

1.2 SparkStreaming实时处理入门 1.2.1 工程创建 导入maven依赖 <dependency><groupId>org.apache.spark</groupId><artifactId>spark-streaming_2.12</artifactId><version>3.1.2</version> </dependency> <dependency…