redis---持久化和数据类型的基本操作

目录

1.redis持久化

2.redis数据类型


1.redis持久化

【1】RDB

启用rdb,查看是否有对应文件生成

1.进入配置文件,修改配置

[root@client ~]# vim /etc/redis.conf

save 60 5                                # 自动出发机制(60秒内进行5次操作,就会拍快照)

dir /usr/local/redis-stable/    # 存储rdb文件的位置

2.启动redis数据库服务

[root@client ~]# systemctl restart redis

3.看看是否有配置文件生成

[root@client ~]# ll /usr/local/redis-stable/dump.rdb 
-rw-r--r--. 1 root root 89 Jul 24 13:58 /usr/local/redis-stable/dump.rdb

1进入数据库,写入数据

127.0.0.1:6379> lpush l1 1
(integer) 1
127.0.0.1:6379> lpush l1 2
(integer) 2
127.0.0.1:6379> lpush l1 3
(integer) 3
127.0.0.1:6379> lpush l1 4
(integer) 4
127.0.0.1:6379> lpush l1 5
(integer) 5
127.0.0.1:6379> lpush l1 6
(integer) 6
2.杀掉进程(原因是如果关闭数据库时,系统会自动拍快照,这样就会看不到现象)

[root@client ~]# ps -ef | grep 6379
root        1703       1  0 13:58 ?        00:00:00 /usr/local/bin/redis-server 127.0.0.1:6379
root        1731    1562  0 14:02 pts/1    00:00:00 grep --color=auto 6379
[root@client ~]# kill -9 1703
[root@client ~]# ps -ef | grep 6379
root        1736    1562  0 14:03 pts/1    00:00:00 grep --color=auto 6379

3.看看rdb文件时间和大小是否改变

[root@client ~]# ll /usr/local/redis-stable/dump.rdb 
-rw-r--r--. 1 root root 118 Jul 24 14:02 /usr/local/redis-stable/dump.rdb

4.启动redis数据库,进行查看

[root@client ~]# systemctl restart redis.service

[root@client ~]# redis-cli

127.0.0.1:6379> LRANGE l1 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"

由此可以发现,拍快照和关闭数据库之间的数据丢失

【2】AOF

1.修改配置文件

[root@client ~]# vim /etc/redis.conf

appendonly yes

2.启动redis数据库

[root@client ~]# systemctl restart redis.service

3.看看是否有配置文件生成

[root@client ~]# ll /usr/local/redis-stable/appendonlydir/
total 8
-rw-r--r--. 1 root root 89 Jul 24 14:56 appendonly.aof.1.base.rdb
-rw-r--r--. 1 root root  0 Jul 24 14:56 appendonly.aof.1.incr.aof
-rw-r--r--. 1 root root 88 Jul 24 14:56 appendonly.aof.manifest

2.redis数据类型

【1】key操作命令

1. KEYS/RENAME/DEL/EXISTS/MOVE/RENAMENX:
192.168.111.30:6379> set sk1 2
OK
# 根据参数中的模式,获取当前数据库中符合该模式的所有key
192.168.111.30:6379> keys *
1) "sk1"
2) "z1"
# 将当前数据库中的z1键移入到ID为1的数据库中,从结果可以看出已经移动成功
192.168.111.30:6379> move z1 1
(integer) 1
# 打开ID为1的数据库。相当于MySQL中的use
192.168.111.30:6379> select 1
OK
# 查看一下刚刚移动过来的Key是否存在,从返回结果看已经存在了
192.168.111.30:6379[1]> exists z1
(integer) 1
# 将z1改名为zk1
192.168.111.30:6379> rename z1 zk1
OK
192.168.111.30:6379> zrange z1 0 -1
(empty list or set)
192.168.111.30:6379> zrange zk1 0 -1
1) "three"
# 由于s1已经存在,因此该命令未能成功执行
192.168.111.30:6379> set s1 3
OK
192.168.111.30:6379> renamenx sk1 s1
(integer) 0
# 查看s1的值,发现它也没有被renamenx覆盖
192.168.111.30:6379> get s1
"3"
# 删除键
192.168.111.30:6379> del zk1
(integer) 12.PERSIST/EXPIRE/TTL/TYPE/RANDOMKEY/SORT:
# 将该键的超时设置为20秒
192.168.111.30:6379> expire s1 20
(integer) 1
# 通过ttl命令查看一下还剩下多少秒
192.168.111.30:6379> ttl s1
(integer) 18
# 立刻执行persist命令,该存在超时的键变成持久化的键,即将该Key的超时去掉
192.168.111.30:6379> persist s1
(integer) 1
# ttl的返回值告诉我们,该键已经没有超时了
192.168.111.30:6379> ttl s1
(integer) -1
# s1的值是字符串类型,因此返回string
192.168.111.30:6379> type s1
string
# 返回数据库中的任意键
192.168.111.30:6379> randomkey 
"sk1"

【2】string类型及操作

1. SET/GET/APPEND/STRLEN:
# 判断该键是否存在,存在返回1,否则返回0
192.168.111.30:6379> exists sk1
(integer) 0
# 该键并不存在,因此append命令返回当前Value的长度
192.168.111.30:6379> append sk1 'helllo'
(integer) 6
# 再次查看该键值是否存在,这是就会返回1
192.168.111.30:6379> exists sk1
(integer) 1
# 该键已经存在,因此返回追加后Value的长度
192.168.111.30:6379> append sk1 ' world'
(integer) 12
# 通过get命令获取该键,以判断append的结果
192.168.111.30:6379> get sk1
"helllo world"
# 通过set命令为键设置新值,并覆盖原有值
192.168.111.30:6379> set sk1 'this is redis'
OK
192.168.111.30:6379> get sk1
"this is redis"
# 获取指定Key的字符长度,等效于C库中strlen函数
192.168.111.30:6379> strlen sk1
(integer) 132. INCR/DECR/INCRBY/DECRBY/DEL:
# 如果该Key不存在,其初始值为0,在incr之后其值为1
192.168.111.30:6379> incr sk2
(integer) 1
192.168.111.30:6379> get sk2
"1"
# 如果该Key不存在,其初始值为0,在decr之后其值为-1
192.168.111.30:6379> decr sk3
(integer) -1
192.168.111.30:6379> get sk3
"-1"
# 如果该Key不存在, 其初始值为0,在decrby之后其值为-decrement
192.168.111.30:6379> decrby sk2 3
(integer) -2
# 如果该Key不存在, 其初始值为0,在incrby之后其值为+decrement
192.168.111.30:6379> incrby sk3 3
(integer) 2
192.168.111.30:6379> incrby sk2 -3
(integer) -5
# DEL命令用于删除已存在的键。不存在的 key 会被忽略。返回值是被删除key的数量
192.168.111.30:6379> del sk3
(integer) 1
# 将该键的Value设置为不能转换为整型的普通字符串,执行递增操作时,Redis将报告错误信息
192.168.111.30:6379> incr sk1
(error) ERR value is not an integer or out of range3.GETSET
# 用于设置指定key的值,并返回key的旧值,当key没有旧值时,即key不存在时,返回 nil
192.168.111.30:6379> getset db redis
(nil)
192.168.111.30:6379> getset db mysql
"redis"4.SETEX:是设置该Key的值为指定字符串,同时设置该Key在Redis服务器中的存活时间(秒数)
# 设置指定Key的过期时间为20秒
192.168.111.30:6379> setex sk2 20 redis
OK
# 通过ttl命令查看一下指定Key的剩余存活时间(秒数),-2表示已经过期,-1表示永不过期
192.168.111.30:6379> ttl sk2
(integer) 14
# 在该键的存活期内我们仍然可以获取到它的Value
192.168.111.30:6379> get sk2
"redis"
# 该ttl命令的返回值显示,该Key已经过期
192.168.111.30:6379> ttl sk2
(integer) -2
# 获取已过期的Key将返回nil
192.168.111.30:6379> get sk2
(nil)5.SETNX:如果指定的Key不存在,则设定该Key持有指定字符串Value,此时其效果等价于SET命令。相反,如果该Key已经存在,该命令将不做任何操作并返回
# 该键并不存在,因此该命令执行成功
192.168.111.30:6379> setnx sk2 'redis'
(integer) 1
# 该键已经存在,因此本次设置没有产生任何效果
192.168.111.30:6379> setnx sk2 'mysql'
(integer) 0
# 从结果可以看出,返回的值仍为第一次设置的值
192.168.111.30:6379> get sk2
"redis"6.MSET/MGET
# 批量设置了sk1和sk2两个键
192.168.111.30:6379> mset sk1 redis sk2 mongodb
OK
192.168.111.30:6379> mget sk1 sk2
1) "redis"
2) "mongodb"

【3】hash类型及操作

1. HSET/HGET/HDEL/HEXISTS/HLEN/HSETNX:
# 给键值为hk1的键设置字段为f1,值为a1
192.168.111.30:6379> hset hk1 f1 a1
(integer) 1
192.168.111.30:6379> hset hk1 f2 a2
(integer) 1
# 获取键值为hk1,字段为f1的值
192.168.111.30:6379> hget hk1 f1
"a1"
192.168.111.30:6379> hget hk1 f2
"a2"
# 获取myhash键的字段数量
192.168.111.30:6379> hlen hk1
(integer) 2
# 通过hsetnx命令给hk1添加新字段f1,因为该字段已经添加成功,所以该命令不做任何操作
192.168.111.30:6379> hsetnx hk1 f1 10
(integer) 0
192.168.111.30:6379> hget hk1 f1
"a1"
# 删除hk1键中字段名为f1的字段,删除成功返回1
192.168.111.30:6379> hdel hk1 f1
(integer) 1
# 判断hk1键中是否存在f1字段,由于上一条命令已经将其删除,因为返回0
192.168.111.30:6379> hexists hk1 f1
(integer) 02.HMSET/HMGET
192.168.111.30:6379> hmset hk2 f1 1 f2 2
OK
192.168.111.30:6379> hmget hk2 f1 f2
1) "1"
2) "2"3.HGETALL/HKEYS/HVALS
# 获取键的所有值
192.168.111.30:6379> hvals hk2	
1) "1"
2) "2"
# 获取键的所有字段
192.168.111.30:6379> hkeys hk2
1) "f1"
2) "f2"
# 获取键的所有字段和对应的值
192.168.111.30:6379> hgetall hk2
1) "f1"
2) "1"
3) "f2"
4) "2"4.HINCRBY
192.168.111.30:6379> hincrby hk2 f1 9
(integer) 10
192.168.111.30:6379> hincrby hk2 f1 -5
(integer) 5

 【4】list类型及操作

1. LPUSH/LPUSHX/LRANGE:
# lk1键并不存在,该命令会创建该键及与其关联的List,之后在将参数中的values从左到右依次插入
192.168.111.30:6379> lpush lk1 a b c d
(integer) 4
# 取链表中的全部元素,其中0表示第一个元素,-1表示最后一个元素
192.168.111.30:6379> lrange lk1 0 -1
1) "d"
2) "c"
3) "b"
4) "a"
# lk2键此时并不存在,因此该命令将不会进行任何操作,其返回值为0
192.168.111.30:6379> lpushx lk2 e
(integer) 0
# lk1键此时已经存在,所以该命令插入成功,并返回链表中当前元素的数量
192.168.111.30:6379> lpushx lk1 e
(integer) 52.LPOP/LLEN:
# 返回并弹出指定Key关联的链表中的第一个元素,即头部元素
192.168.111.30:6379> lpop lk1
"e"
192.168.111.30:6379> lpop lk1
"d"
# 在执行lpop命令两次后,链表头部的两个元素已经被弹出,此时链表中元素的数量是3
192.168.111.30:6379> llen lk1
(integer) 33. LREM/LSET/LINDEX/LTRIM:
# 为后面的示例准备测试数据
192.168.111.30:6379> lpop lk1
"c"
192.168.111.30:6379> lrange lk1 0 -1
1) "b"
2) "a"
192.168.111.30:6379> lpush lk1 a b c d b d a c a d d c
(integer) 14
# 删除前 count个值等于value的元素。如果count大于0,从头向尾遍历并删除,如果count小于0,则从尾向头遍历并删除。如果count等于0, 则删除链表中所有等于value的元素。如果指定的Key不存在,则直接返回0
192.168.111.30:6379> lrange lk1 0 -11) "c"2) "d"3) "d"4) "a"5) "c"6) "a"7) "d"8) "b"9) "d"
10) "c"
11) "b"
12) "a"
13) "b"
14) "a"
192.168.111.30:6379> lrem lk1 3 d
(integer) 3
192.168.111.30:6379> lrange lk1 0 -11) "c"2) "a"3) "c"4) "a"5) "b"6) "d"7) "c"8) "b"9) "a"
10) "b"
11) "a"
192.168.111.30:6379> lrem lk1 -3 a
(integer) 3
192.168.111.30:6379> lrange lk1 0 -1
1) "c"
2) "a"
3) "c"
4) "b"
5) "d"
6) "c"
7) "b"
8) "b"
192.168.111.30:6379> lrem lk1 0 b
(integer) 3
192.168.111.30:6379> lrange lk1 0 -1
1) "c"
2) "a"
3) "c"
4) "d"
5) "c"
192.168.111.30:6379> lrem lk1 0 e
(integer) 0
# 获取索引值为2(头部的第三个元素)的元素值
192.168.111.30:6379> lindex lk1 2
"c"
# 将索引值为2(头部的第三个元素)的元素值设置为新值e
192.168.111.30:6379> lset lk1 2 e
OK
# 查看是否设置成功
192.168.111.30:6379> lindex lk1 2
"e"
# 仅保留索引值0到2之间的3个元素,注意第0个和第2个元素均被保留
192.168.111.30:6379> ltrim lk1 0 2
OK
192.168.111.30:6379> lrange lk1 0 -1
1) "c"
2) "a"
3) "e"4.LINSERT:
192.168.111.30:6379> linsert lk1 before e a1
(integer) 4
192.168.111.30:6379> lrange lk1 0 -1
1) "c"
2) "a"
3) "a1"
4) "e"
192.168.111.30:6379> linsert lk1 after c b1
(integer) 5
192.168.111.30:6379> lrange lk1 0 -1
1) "c"
2) "b1"
3) "a"
4) "a1"
5) "e"5.RPUSH/RPUSHX/RPOP/RPOPLPUSH:
192.168.111.30:6379> rpush lk2 a b c 
(integer) 3
192.168.111.30:6379> lrange lk2 0 -1
1) "a"
2) "b"
3) "c"
192.168.111.30:6379> rpushx lk3 a b c 
(integer) 0
192.168.111.30:6379> rpushx lk2 d
(integer) 4
192.168.111.30:6379> lrange lk2 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
192.168.111.30:6379> rpop lk2 
"d"
192.168.111.30:6379> rpoplpush lk2 lk1
"c"
192.168.111.30:6379> lrange lk2 0 -1
1) "a"
2) "b"
192.168.111.30:6379> lrange lk1 0 -1
1) "c"
2) "c"
3) "b1"
4) "a"
5) "a1"
6) "e"

【5】Set 类型及操作

1. SADD/SMEMBERS/SCARD/SISMEMBER:
# 插入测试数据,由于该键myset之前并不存在,因此参数中的三个成员都被正常插入
192.168.111.30:6379> sadd sk1 a b c
(integer) 3
# 判断c是否已经存在,返回值为1表示存在
192.168.111.30:6379> sismember sk1 c
(integer) 1
# 获取Set集合中元素的数量
192.168.111.30:6379> scard sk1
(integer) 3
# 通过smembers命令查看插入的结果,从结果可以,输出的顺序和插入顺序无关
192.168.111.30:6379> smembers sk1
1) "b"
2) "c"
3) "a"2.SPOP/SREM/SRANDMEMBER/SMOVE:
192.168.111.30:6379> sadd sk1 1 2 3
(integer) 3
# 随机的返回了某一成员
192.168.111.30:6379> srandmember sk1 
"2"
192.168.111.30:6379> smembers sk1
1) "b"
2) "c"
3) "1"
4) "a"
5) "3"
6) "2"
# Set中的成员3被移出并返回,事实上3并不是之前插入的第一个或最后一个成员
192.168.111.30:6379> spop sk1
"3"
# 从Set中移出a、1二个成员,只有a和d两个成员被移出,返回为2
192.168.111.30:6379> srem sk1 a 1
(integer) 2
# 将b从sk1移到sk2,从结果可以看出移动成功
192.168.111.30:6379> smove sk1 sk2 b
(integer) 1
192.168.111.30:6379> smembers sk1
1) "2"
192.168.111.30:6379> smembers sk2
1) "b"3.SDIFF/SDIFFSTORE/SINTER/SINTERSTORE/SUNION/SUNIONSTORE:
# 为后面的命令做准备
192.168.111.30:6379> sadd s1 a b c d e
(integer) 5
192.168.111.30:6379> sadd s2 c
(integer) 1
192.168.111.30:6379> sadd s3 a c e
(integer) 3
# m1和m2相比,a、b、e和d四个成员是两者之间的差异成员。再用这个结果继续和myset3进行差异比
较,b和d是s3不存在的成员
192.168.111.30:6379> sdiff s1 s2 s3
1) "b"
2) "d"
# 将3个集合的差异成员存在在sk1关联的Set中,并返回插入的成员数量
192.168.111.30:6379> sdiffstore sk1 s1 s2 s3
(integer) 2
192.168.111.30:6379> smembers sk1
1) "b"
2) "d"
# 将3个集合中的交集成员显现出来
192.168.111.30:6379> sinter s1 s2 s3
1) "c"
# 将3个集合中的交集成员存储到与sk2关联的Set中,并返回交集成员的数量
192.168.111.30:6379> sinterstore sk2 s1 s2 s3
(integer) 1
192.168.111.30:6379> smembers sk2
1) "c"
# 获取3个集合中的成员的并集
192.168.111.30:6379> sunion s1  s2 s3
1) "b"
2) "c"
3) "d"
4) "e"
5) "a"
# 将3个集合中成员的并集存储到sk3关联的set中,并返回并集成员的数量
192.168.111.30:6379> sunionstore sk3 s1 s2 s3
(integer) 5
192.168.111.30:6379> smembers sk3
1) "b"
2) "c"
3) "d"
4) "e"
5) "a"

 【6】Zset类型和操作

# 添加单个元素
127.0.0.1:6379> zadd z1 10 openlab
(integer) 1
# 添加多个元素
127.0.0.1:6379> zadd z1 9 redhat 8 mysql
(integer) 2
# 返回值
127.0.0.1:6379> zrange z1 0 -1
1) "mysql"
2) "redhat"
3) "openlab"
127.0.0.1:6379> zrange z1 0 -1 withscores
1) "mysql"
2) "8"
3) "redhat"
4) "9"
5) "openlab"
6) "10"
127.0.0.1:6379> zadd z1 7 redis 6 mongodb
(integer) 2
127.0.0.1:6379> zadd z1 5 sql
(integer) 1# 删除单个元素
127.0.0.1:6379> zrem z1 openlab
(integer) 1
# 删除多个元素
127.0.0.1:6379> zrem z1 redhat mysql
(integer) 2# 返回 member 成员的 score 值
127.0.0.1:6379> zscore z1 mongodb
"6"# 为有序集 key 的成员 member 的 score 值加上增量 increment
127.0.0.1:6379> zincrby z1 300 redis
"307"# 获取有序集合的成员数
127.0.0.1:6379> zcard z1
(integer) 3# 计算在有序集合中指定区间分数的成员数
127.0.0.1:6379> zcount z1 5 8
(integer) 2

【7】HyperLogLog

# 添加指定元素到 HyperLogLog 中
127.0.0.1:6379> pfadd p1 redis
(integer) 1
127.0.0.1:6379> pfadd p1 mongodb
(integer) 1
127.0.0.1:6379> pfadd p1 mysql
(integer) 1
127.0.0.1:6379> pfadd p2 redhat 
(integer) 1
127.0.0.1:6379> pfadd p2 openlab
(integer) 1# 返回给定 HyperLogLog 的基数估算值
127.0.0.1:6379> pfcount p1
(integer) 3
127.0.0.1:6379> pfcount p2
(integer) 2
127.0.0.1:6379> pfcount p1 p2
(integer) 5# 将多个 HyperLogLog 合并为一个HyperLogLog
127.0.0.1:6379> pfmerge p1 p2
OK
127.0.0.1:6379> pfcount p1
(integer) 5
127.0.0.1:6379> pfcount p2
(integer) 2

 【8】Bitmaps 类型和操作

# setbit命令用于设置Bitmaps中某个偏移量的值(0或1),offset偏移量从0开始
127.0.0.1:6379> setbit unique:users:20220718 1 1
(integer) 0
127.0.0.1:6379> setbit unique:users:20220718 6 1
(integer) 0
127.0.0.1:6379> setbit unique:users:20220718 11 1
(integer) 0# getbit命令用于获取Bitmaps中某个偏移量的值,返回0说明没有访问过
127.0.0.1:6379> getbit unique:users:20220718 11
(integer) 1# bitcount用于统计字符串从start字节到end字节比特值为1的数量
127.0.0.1:6379> bitcount unique:users:20220718 1 10
(integer) 3# bitop这个命令是一个复合操作, 它可以做多个Bitmaps的and(交集) 、 or(并集) 、 not
(非) 、 xor(异或) 操作并将结果保存在destkey中
# 计算出两天都访问过网站的数量
127.0.0.1:6379> bitop and unique:users:04_03  unique:users:20201104 unique:users:20201104
(integer) 2

【9】 Geospatial 类型和操作

# 添加地理位置(经度,纬度,名称)
127.0.0.1:6379> geoadd china:city 121.47 31.23 shanghai
(integer) 1
127.0.0.1:6379> geoadd china:city 106.50 29.53 chongqing 114.05 22.52 shenzhen 116.38 39.90 beijing
(integer) 3# 获得指定地区的坐标值
127.0.0.1:6379> geopos china:city shanghai
1) 1) "121.47000163793563843"2) "31.22999903975783553"# 获取两个位置之间的直线距离
127.0.0.1:6379> geopos china:city beijing shanghai km
1) 1) "116.38000041246414185"2) "39.90000009167092543"
2) 1) "121.47000163793563843"2) "31.22999903975783553"
3) (nil)# 以给定的经纬度为中心,找出某一半径内的元素
127.0.0.1:6379> georadius china:city 110 30 1000 km
1) "chongqing"
2) "shenzhen"

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

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

相关文章

Java连锁门诊医院HIS信息管理系统源码

Java连锁门诊医院HIS信息管理系统源码:SaaS运维平台多医院多机构多门诊入驻强大的电子病历完整开发文档 一、系统概述 ❉采用主流成熟技术,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问前后端分离,多服务协同…

通过两种实现方式理解CANoe TC8 demo是如何判断接收的以太网报文里的字段的

假设有一个测试用例,需求是:编写一个测试用例,发送一条icmpv4 echo request报文给DUT,identifier字段设置为10。判断DUT能够回复icmpv4 echo reply报文,且identifier字段值为10。 实现:在canoe的simulation setup界面插入一个test节点,ip地址为:192.168.0.1,mac地址为…

具身智能,是机器人的“冷饭热炒”吗?

大模型正如火如荼,下一个AI风口就来了。 如果你关注2023世界人工智能大会等行业峰会,以及英伟达、微软、谷歌、特斯拉和国內科技大厂的最新发布会,除了“大模型”,应该会听到另一个高频词——具身智能。 所谓具身智能Embodied AI …

IRIS搭建docker

之前把web实现了docker,开发或测试环境可能需要开发自己搭数据库,为了方便使用,把数据库也做一个docker。 由于原生的CentOS我还有改yum仓库,所以这次从之前lis搞的改好yum的镜像开始(从改好yum的lisnew的镜像创建lis…

【Linux】Ubuntu基本使用与配置, 以及常见问题汇总(一)

前言 大学期间,感觉很多时候学习课外知识都是被推着往前走,很多内容并没有深入去学习,知识的记录受限于所学比较片面,如今渐渐意识到似乎并没有建立起相关知识的体系架构,缺乏一个系统学习并整理的过程。本文将以Ubunt…

【LangChain】检索器之MultiQueryRetriever

MultiQueryRetriever 概要内容总结 概要 基于距离的向量数据库检索在高维空间中嵌入查询,并根据“距离”查找相似的嵌入文档。 但是,如果查询措辞发生细微变化,或者嵌入不能很好地捕获数据的语义,检索可能会产生不同的结果。有时…

grid map学习笔记1之Ubuntu18.04+ROS-melodic编译安装grid_map栅格地图及示例运行

文章目录 0 引言1 安装依赖和编译1.1 安装依赖1.2 下载编译 2 运行示例2.1 simple_demo2.2 tutorial_demo2.3 iterators_demo2.4 image_to_gridmap_demo2.5 grid_map_to_image_demo2.6 opencv_demo2.7 resolution_change_demo2.8 filters_demo2.9 interpolation_demo 0 引言 苏…

labview 多线程同步

所谓通讯的同步是指多个线程同时进行或严格按照顺序执行,数据的严格性是指发送多少数据接收多少数据,不能出现数据丢失或重复接收的现象。 labview的同步机制有事件发生、集合点、通知器、信号量。 可以这么来记忆:事急(集&…

JavaScript |(一)JavaScript简介及基本语法 | 尚硅谷JavaScript基础实战

学习来源:尚硅谷JavaScript基础&实战丨JS入门到精通全套完整版 文章目录 📚JavaScript简介🐇 实现🐇JavaScript的特点 📚基本知识🐇编写位置🔥方式一:在标签中写(不推…

独立游戏《黑夜狩猎者》

做独立游戏已经4个月了,在下作品黑夜狩猎者已经上线TapTap平台。目前正加入薪火计划, 如果你也想加入,下方链接 TapTap 薪火计划

【超全面】Linux嵌入式干货学习系列教程

文章目录 一、前言二、Linux基础篇三、数据结构与算法基础三、Linux应用篇四、Linux网络篇五、ARM篇六、Linux系统移植篇七、Linux驱动篇八、Linux特别篇九、Linux项目篇 一、前言 博主学习Linux也有几个月了,在这里为广大朋友整理出嵌入式linux的学习知识&#xff…

zookeeper-3.7.1集群

1.下载&解压安装包apache-zookeeper-3.7.1-bin.tar.gz 解压到/app/ &改名zookeeper-3.7.1 [rootnode1 app]# tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C /app/ [rootnode1 app]# mv apache-zookeeper-3.7.1-bin zookeeper-3.7.1 ---- 删除docs [rootnode1…

算法工程师-机器学习面试题总结(2)

线性回归 线性回归的基本思想是? 线性回归是一种用于建立和预测变量之间线性关系的统计模型。其基本思想是假设自变量(输入)和因变量(输出)之间存在线性关系,通过建立一个线性方程来拟合观测数据&#xff…

springboot下的mybatis缓存

一级缓存(默认开启) sqlsession级别,对于同一session中多次一模一样的查询语句只会查询一次,但由于每次查询结束后都会sqlsession都会自动关闭, 一般情况下一级缓存并不会生效,需要开启事务Transaction保证…

【2023裸辞失业后之初学RocketMQ】

目录 RocketMQ概述MQ概述常见的MQ产品常见的协议 Rocket的安装和启动基本概念系统架构安装RocketMQ和控制台 RocketMQ概述 MQ概述 Message Queue:是提供消息队列服务的中间件,提供消息生产,存储,消费的全过程。 作用&#xff1a…

矩阵svd分解和矩阵的伪逆

真该好好学习一下Latex数学公式的语法和规则了,否则,连写个博客都没法写,这叫什么事! https://blog.csdn.net/ViatorSun/article/details/82826664 直接上数学博士写的ppt图(肯定比我在这里胡说八道强的多&#xff0…

css - Media Query

使用bootstrap的grid system可以在一个较为粗糙的范围得到较好的响应性,但是通过viewport可以看到网站在具体哪个像素点处变得丑陋,再通过css media query来精细调整网页布局。 可以通过media query来提高网页移动响应能力。

[Pytorch]监督学习、无监督学习、半监督学习和自监督学习的特点和应用

监督学习 在监督学习中,所有的数据都带有标签或真值,直接对网络输出结果和标签计算损失函数,进行训练。常见的应用包括图像分类、语音识别、自然语言处理等。例如,在图像分类任务中,监督学习算法可以通过对大量带有标签…

四、运算符(2)

本章概要 关系运算符 测试对象等价 逻辑运算符 短路 字面值常量 下划线指数计数法 位运算符 关系运算符 关系运算符会通过产生一个布尔(boolean)结果来表示操作数之间的关系。如果关系为真,则结果为 true,如果关系为假&#xf…

SpringBoot日志文件

1.日志有什么用? 日志是程序的重要组成部分,如果程序报错,我们可以通过日志发现和定位问题,同样日志也可以实现以下的功能: 记录用户登录日志,方便分析用户是否是正常登录还是恶意破解用户;记…