redis用法(二)
文章目录
- 02-redis数据类型篇
- 生产环境下的redis实况图
- 1.全局命令
- redis数据存储格式
- set设置k-v
- 查看当前redis的key的数量
- 危险命令,新手请在于超老师陪同下执行
- 为什么危险?
- 如何正确搜索redis的key
- 查看库下有多少个key
- 查询redis库信息
- 切换redis库
- 查看key是否存在
- 删除key
- key过期设置
- 网站身份cookieredis的对应关系
- 查看过期时间
- 取消过期时间
- 开发和运维的redis对接
- 查看key对应的value的类型
- redis所有的数据类型图解
- 危险命令,清空所有key
- 2.字符串类型
- String字符串
- 字符串相关的命令
- string实践
- String企业级使用场景
- 3.列表List
- 列表命令
- list实践
- lpush左边压入数据
- lpop左边删除第一个元素
- lindex命令
- rpush右边压入数据
- 继续测试lpush
- 继续测试rpush
- 一次性写入list多个值lpush
- 一次性rpush多个值
- 再次测试rpush和lpush
- 删除list元素
- type查看制定key名对应的值的类型
- 指定索引获取值
- 删除列表整个key
- 生产应用场景
- 4.集合set
- 任务
- set相关的命令
- set创建
- set和list区别
- 交集sinter
- 差集sdiff
- myset1有,而myset2没有的
- Myset2有,而myset1没有的
- 并集sunion
- 企业应用场景
- 5.HASH散列
- 命令执行
- 图解hash类型玩法
- redis缓存mysql数据
- mysql表
- 存储为redis的hash类型
- 1.设置redis数据
- 2.查询某个用户的信息
- 3.查询某个用户所有信息
- 4.redis数据更新
- 生产用法
- 6.Zset有序集合
- 命令实践
- 王者巅峰拍赛的有序集合榜
- 生产用法
02-redis数据类型篇
redis数据类型官网资料,https://redis.io/docs/manual/data-types/
生产环境下的redis实况图
任务,学会五大数据类型,知道一个产品,再使用redis的时候,写入的key是多少个,以及写入的key都是什么类型
以及有什么作用
1.全局命令
redis数据存储格式
key : value
键 : 值
set设置k-v
set是专门用于设置 字符串类型的 key语法提示
set key value [expiration EX seconds|PX milliseconds] [NX|XX]先不用后面的额外选项# set,get是用于字符串类型的 key读写命令# 直接定义key,以及赋值value的值
# 程序用法也是一样,调用set写入值,调用get,查询字符串类型的值127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> set k2 v2
OK
127.0.0.1:6379>
# 对同一个key,重新set,覆盖原有的值127.0.0.1:6379> set k2 v3
OK
127.0.0.1:6379>
127.0.0.1:6379> set k3 v3
OK
127.0.0.1:6379>
127.0.0.1:6379> dbsize
(integer) 3
127.0.0.1:6379> # 读取数据
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379>
127.0.0.1:6379> get k2
"v2222"
127.0.0.1:6379>
127.0.0.1:6379> get k3
"v3"
127.0.0.1:6379> # python客户端,模拟数据读写,字符串# 查看单
查看当前redis的key的数量
127.0.0.1:6379> dbsize
(integer) 0这是一个常用命令#查看当前实例下的所有key 数量
10.0.0.51:6379> dbsize
(integer) 5
10.0.0.51:6379> keys *
1) "k2"
2) "k3"
3) "user1_session"
4) "user2_session"
5) "k1"dbsize其他的命令scan扫描命令,替代keys *
scan命令是小范围,基于名字正则搜索,不会全局搜索,keys * 全局搜索,给redis带来很大压力
危险命令,新手请在于超老师陪同下执行
线上,生产环境服务器,严禁随意执行该命令keys * 对key名的通配符扫描,单线程卡主,其他任务全部暂停执行,业务夯住,卡死,崩溃。网站直接5005000 100万个key数量
来看看一堆运维的聊天记录
为什么危险?
如果是非线上redis环境,你执行也还凑活
但是为什么生产redis服务器,禁止呢?看官方解释,keys *的意思Available since 1.0.0.
Time complexity: O(N) with N being the number of keys in the database, under the assumption that the key names in the database and the given pattern have limited length.
Returns all keys matching pattern.While the time complexity for this operation is O(N), the constant times are fairly low. For example, Redis running on an entry level laptop can scan a 1 million key database in 40 milliseconds.
Warning: consider KEYS as a command that should only be used in production environments with extreme care. It may ruin performance when it is executed against large databases. This command is intended for debugging and special operations, such as changing your keyspace layout. Don’t use KEYS in your regular application code. If you’re looking for a way to find keys in a subset of your keyspace, consider using SCAN or sets.大致意思就是
keys 命令是扫描redis所有的key,且速度非常快,大约是40ms 100万个key。
在生产环境下,应该极少的情况下,再去用keys命令,否则会导致如超过千万key数量的实例出现灾难性宕机的问题。
如何正确搜索redis的key
先看错误玩法,一个萌新运维,作死执行的命令。
可见,该7号库下,有1200W个key基于keys OemToken*这样的模糊搜索,执行了1.35秒,大约100ms扫描100万个key,这个速度是远慢于官方的搜索指标的。这是因为该服务器不能只跑redis啊,其他的进程都在抢夺CPU,因此redis这里就慢了么。根本原因在于
1. redis是k-v类型的数据库,以hash结构存储,因此可以根据key,超高速的查询value值。2. 但是基于* 这样的模糊key搜索,redis只能进行全库扫描,并且redis是单线程执行命令,同一时间只能有一个命令在运行,如果你这里keys * 卡了半天,导致其他redis的key读写命令全部等待,数据库就废了。set xxx xxx
set xx xxx40万key / s 如何改进基于scan命令替代keys命令听懂keys * 的一个生产故障的案例分享,以及用scan命令 代替kyes * 刷1111
查看库下有多少个key
dbsize
查询redis库信息
# info命令,用于查看redis所有的信息,包括后续学习的 主从,哨兵,集群都可以去看
info # 快捷列出,所有的区块的名字# info 后面支持制定某个 区段信息
10.0.0.51:6379>
10.0.0.51:6379> info keyspace
# Keyspace
db0:keys=6,expires=0,avg_ttl=0
[root@db-51 ~]#redis-cli info | grep -E '^#'
# Server
# Clients
# Memory
# Persistence
# Stats
# Replication
# CPU
# Cluster
# Keyspace
切换redis库
# redis默认有16个 DB库可以用
# 0 ~ 15号库,可以存储key# 刷111127.0.0.1:6379[15]> set key_15 v15
OK
127.0.0.1:6379[15]>
127.0.0.1:6379[15]>
127.0.0.1:6379[15]> info keyspace
# Keyspace
db0:keys=6,expires=0,avg_ttl=0
db1:keys=1,expires=0,avg_ttl=0
db15:keys=1,expires=0,avg_ttl=0# 每一个库,存储自己独立的key信息# 看懂111127.0.0.1:6379> select 15
OK
查看key是否存在
127.0.0.1:6379> EXISTS k1
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379> EXISTS kkkk
(integer) 0支持查找多个key,返回存在的key的数量127.0.0.1:6379> EXISTS k1 k2 k3 k4 k5 k6 k7
(integer) 3
删除key
127.0.0.1:6379> del kkkk
(integer) 0
127.0.0.1:6379> del kkkk k1
(integer) 1
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> del k1 k2 k3 k4 k5 k6
(integer) 2
127.0.0.1:6379> del 支持删除单个,多个key,完整的key名字返回删除的key个数
看懂111
key过期设置
- 验证码
- 随机验证 6464 60s后过期
- 红包
- 短视频类的app红包,60s就结束了
- 二维码,短暂出现一会
- 秒刷活动
- 付款码
- 网站登录的cookie,session信息
session和cookie和redis的关系谷歌浏览器,首次登录百度后,百度服务器,在我的浏览器里面写入cookie,对应到redis里的key,session
"BIDUPSID=7EB588F5BE8B62FC533F3C8B42B35DC8; PSTM=1655802804;"
网站身份cookieredis的对应关系
查看过期时间
# 先设置过期时间
# 设置过期时间成功127.0.0.1:6379> EXPIRE user1 180
(integer) 1# 用TTL命令,查看key的过期时间,剩余多少
# -1 表示永不过期127.0.0.1:6379> ttl user1
(integer) -1# 查看key的过期倒计时
127.0.0.1:6379> ttl user1
(integer) 154
127.0.0.1:6379> ttl user1
(integer) 154
取消过期时间
1. 重新设置即可,又是永不过期,除非数据丢失,或者主从del删除
127.0.0.1:6379> set user1 linux0224
OK
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> ttl user1
(integer) -12.取消过期时间
-2 表示这个key是不存在的,是专用于 ttl命令的 过期时间查看127.0.0.1:6379> ttl user1
(integer) -2
开发和运维的redis对接
11.00继续
查看key对应的value的类型
127.0.0.1:6379> type dianzan
string# 看懂111
redis所有的数据类型图解
key就是字符串,数据类型的区别,是在于值的表现
危险命令,清空所有key
清空当前所在库下的所有key,看懂111127.0.0.1:6379> FLUSHDB
OK127.0.0.1:6379[15]> keys *
1) "key_15"
127.0.0.1:6379[15]> # 清空所有库的key
127.0.0.1:6379[15]> flushall
OK
127.0.0.1:6379[15]>
2.字符串类型
String字符串
String是redis中最基本的数据类型,一个key对应一个value。
- 图例
下图是一个String类型的实例,其中键为hello,值为world
# 单个定义的字符串,key,value
# 语法, set key value ,单个值设置127.0.0.1:6379> set name linux0224
OK
127.0.0.1:6379>
127.0.0.1:6379> set address 北京
OK
127.0.0.1:6379> set hobby 学习
OK# 一次性设置多 k,v
127.0.0.1:6379> mset name2 linux0224 address2 北京2 hobby2 学习2
OK# 单个查询 ,查看中文value --raw参数#多个查询
[root@db-51 ~]#redis-cli --raw get name
linux0224
[root@db-51 ~]#redis-cli --raw get address
北京
[root@db-51 ~]#redis-cli --raw get hobby
学习
[root@db-51 ~]#
[root@db-51 ~]#
[root@db-51 ~]#redis-cli
127.0.0.1:6379>
[root@db-51 ~]#
[root@db-51 ~]#
[root@db-51 ~]#
[root@db-51 ~]#redis-cli --raw mget name2 address2 hobby2
linux0224
北京2
学习2
[root@db-51 ~]## 看懂字符串类型,set,get mset,mget 刷222
[root@db-51 ~]#
[root@db-51 ~]#
字符串相关的命令
- 命令使用
命令 | 简述 | 使用 |
---|---|---|
GET | 获取存储在给定键中的值 | GET name |
SET | 设置存储在给定键中的值 | SET name value |
DEL | 删除存储在给定键中的值 | DEL name |
INCR | 将键存储的值加1 | INCR key |
DECR | 将键存储的值减1 | DECR key |
INCRBY | 将键存储的值加上整数 | INCRBY key amount |
DECRBY | 将键存储的值减去整数 | DECRBY key amount |
- 命令使用
删除3个key
127.0.0.1:6379> del name address hobby
(integer) 3# 设置字符串类型的key,value可以是 数字,但是本质
# 只要用set设置的 k-v,value就是字符串类型,看懂1111
# redis的字符串支持计算,底层自动转为数字后,计算,再转为字符串 set dianzan 0# 循环,刷计数器的值
[root@db-51 ~]#redis-cli get dianzan
"1005"
[root@db-51 ~]#for i in {1..1000};do redis-cli incr dianzan;echo "ok $i";done# 扣除500个赞
for i in {1..500};do redis-cli decr dianzan;echo "ok $i";done# 直接对值添加整数
[root@db-51 ~]#redis-cli
127.0.0.1:6379>
127.0.0.1:6379> INCRBY dianzan 500000
(integer) 500505
127.0.0.1:6379>
127.0.0.1:6379> get dianzan
"500505"
127.0.0.1:6379> # 扣除点赞数 (排行,一周清空一次,榜一,每周都得充钱)
127.0.0.1:6379> DECRBY dianzan 300000
(integer) 200505
string实践
…
String企业级使用场景
1.学会 关于string类型的,key,value的操作命令
2.知道,它用在哪
1. 数据缓存
经典用法,把经常要读取的如mysql里的url、字符串、音视频等字符串信息,存储到redis里。
redis作为缓存层,加速数据读取,mysql作为数据持久化层,降低mysql的访问压力。提示:音视频等信息存储在mysql里,一般存储的是如url,或者路径,便于查找访问。而非直接存储二进制数据,并不合适。
听懂给111
mysql是如何存储 音视频,图片,gif信息,早起,直接存入 mysql,以二进制数据类型存储
一个视频,4k ,10G视频,存储到cdn服务器,拿到
https://cdn.aliyun.com/xxx/4k.mp4
视频url都会被代码,前端js加密处理2.计数器
redis是单线程模式,一个命令结束才会执行下一个命令,因此可以实现计数器的作用,确保多进程访问redis的数据,也能确保数据源正确性。
(使用场景,如微博的博文阅读量,你可以理解为你可以直接修改key的值,修改阅读量为99999)3.用作网站用户的登录会话存储
存储session,或者token等信息
3.列表List
Redis中的List其实就是链表(Redis用双端链表实现List)。
使用List结构,我们可以轻松地实现最新消息排队功能(比如新浪微博的TimeLine)。
列表命令
list实践
lpush左边压入数据
lpop左边删除第一个元素
lpop 从列表的左边,删除第一个元素,且返回元素的值信息
lindex命令
语法
lindex key_name 索引标号 ,取出对应的值的结果
rpush右边压入数据
继续测试lpush
继续测试rpush
一次性写入list多个值lpush
一次性rpush多个值
再次测试rpush和lpush
删除list元素
# 直接干掉 整个列表
del my_list# 或者只能从,左边,右边,lpop,rpop剔除元素
type查看制定key名对应的值的类型
127.0.0.1:6379> lrange my_list 0 -1
1) "bingcheng"
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> type my_list
list
127.0.0.1:6379>
指定索引获取值
lindex my_list 索引号 lindex my_list 0 第一个元素
lindex my_list -1 最后一个元素
删除列表整个key
del my_list
生产应用场景
- 微博,知乎等博文的timeline
- 用户发表的文章,用lpush加入时间轴,微博最新的文章列表。
- 订单系统、物流系统的消息队列
- 生产消费者,订单生成,订单处理
4.集合set
Redis 的 Set 是 String 类型的无序集合。
集合成员是唯一的,这就意味着集合中不能出现重复的数据。
Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。
任务
1.搞清楚redis五大数据类型,各个类型,对应的redis命令操作玩法
2. 以及具体的使用场景
set相关的命令
1. 添加集合成员,创建集合 sadd
2. 返回集合内有多少个成员 scard
3. 列出集合内所有成员 smembers
4. 判断某值,是否是集合内的成员 sismember 5. 集合存在一个特性,多个集合之间的关系
set创建
127.0.0.1:6379[14]> sadd myset liangliang wenjie songlin
(integer) 3# 兴林,超哥,要求加入组织
sadd myset xinling
sadd myset chaoge# 返回集合内有多少个成员
127.0.0.1:6379[14]> scard myset
(integer) 5# 列出myset所有成员
# 无须集合127.0.0.1:6379[14]> SMEMBERS myset
1) "songlin"
2) "chaoge"
3) "xinling"
4) "liangliang"
5) "wenjie"# 判断 laoliu是否是myset集合的成员
# 结果为0不存在该成员,为1,该成员存在,看懂111127.0.0.1:6379[14]>
127.0.0.1:6379[14]>
127.0.0.1:6379[14]> SISMEMBER myset laoliu
(integer) 0
127.0.0.1:6379[14]>
127.0.0.1:6379[14]> SISMEMBER myset wenjie
(integer) 1
127.0.0.1:6379[14]> SISMEMBER myset chaoge]
(integer) 0
127.0.0.1:6379[14]>
127.0.0.1:6379[14]>
127.0.0.1:6379[14]> SISMEMBER myset chaoge
(integer) 1
set和list区别
- list可以存储重复元素,set天然去重,应该存储不得重复的数据
- list按元素写入方式,进行先后存储、set无序存储
交集sinter
127.0.0.1:6379[14]> sinter myset myset2
1) "yongfei"
2) "chaoge"
3) "xinling"
差集sdiff
myset1有,而myset2没有的
Myset2有,而myset1没有的
并集sunion
大家公有的,去重的所有数据
127.0.0.1:6379[14]> SUNION myset myset2
1) "songlin"
2) "zhangxin"
3) "yongfei"
4) "chaoge"
5) "bingcheng"
6) "xinling"
7) "liangliang"
8) "wenjie"
企业应用场景
- 微信,微博,等社交APP的标签功能
- 你,我,他都关注了美女板块的视频动态
- 系统根据标签选择给这一类的用户,较高比重的推送美女视频。
- 用户收藏夹
- 利用set去重功能,实现不会重复收藏,重复性点赞,踩,一类的功能
5.HASH散列
Redis hash 是一个 string 类型的 field(字段) 和 value(值) 的映射表,hash 特别适合用于存储对象。
命令执行
HSET | 添加键值对 | HSET hash-key sub-key1 value1 |
---|---|---|
HGET | 获取指定散列键的值 | HGET hash-key key1 |
HGETALL | 获取散列中包含的所有,键值对 | HGETALL hash-key |
HDEL | 如果给定键存在于散列中,那么就移除这个键 | HDEL hash-key sub-key1 |
HMSET | 一次性添加多个键值对 | |
HMGET | 一次性查询多个key-value |
# 利用hash存储学生信息# wenjiehset key名 字段名 字段对应的值127.0.0.1:6379[14]>
127.0.0.1:6379[14]> hget wenjie_info hometown
"yunnan"
127.0.0.1:6379[14]> hget wenjie_info name
"liwenjie"
127.0.0.1:6379[14]> HGETALL wenjie_info
1) "name"
2) "liwenjie"
3) "age"
4) "18"
5) "hometown"
6) "yunnan"
127.0.0.1:6379[14]>
127.0.0.1:6379[14]> HGETALL wenjie_info 127.0.0.1:6379[14]>
127.0.0.1:6379[14]> hdel wenjie_info age hometown
(integer) 2
127.0.0.1:6379[14]> HGETALL wenjie_info
1) "name"
2) "liwenjie"
127.0.0.1:6379[14]> # 一次性,设置多个键值对
# 一次性查询多个键值对# 加入一个 songlin的信息# 执行14号db库,查询songlin 这个key的多个字段值
[root@db-51 ~]#redis-cli -n 14 --raw hmget songlin name age hobby
yangsonglin
18
富婆
图解hash类型玩法
redis缓存mysql数据
mysql表
存储为redis的hash类型
1.设置redis数据
2.查询某个用户的信息
3.查询某个用户所有信息
4.redis数据更新
生产用法
比起string类型存储数据,更直观,更高效,更省空间。
如存储用户信息
存储一篇帖子的阅读数、评论数各类信息。
6.Zset有序集合
Redis 有序集合和集合一样也是 string 类型元素的集合,且不允许重复的成员。
不同的是每个元素都会关联一个 double 类型的分数。
redis 正是通过分数来为集合中的成员进行从小到大的排序。
命令实践
无序集合的命令
sadd
有序集合的命令
王者巅峰拍赛的有序集合榜
2440 songlin
2100 chaoge
600 wenjie
300 jiaqiang
170 liangliang
# 看语法127.0.0.1:6379> ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
# zadd key名 分数 成员名 分数 成员名 分数 成员名
# 看懂111127.0.0.1:6379> ZADD kings 2440 songlin 2100 chaoge 600 wenjie 300 jiaqiang 170 liangliang
(integer) 5zadd 创建有序集合,进行分数添加 ,也支持一次性添加多个zrange 列出有序集合的元素 ,默认是从小到大排序
语法# 只显示排行榜的名字
127.0.0.1:6379> zrange key start stop [WITHSCORES]
127.0.0.1:6379> zrange kings 0 -1
1) "liangliang"
2) "jiaqiang"
3) "wenjie"
4) "chaoge"
5) "songlin"# 显示排行榜,以及分数
zrange kings 0 -1 WITHSCORESzrem 移除xx元素
127.0.0.1:6379> zrem kings liangliang
(integer) 1
127.0.0.1:6379> zrem kings lianglianggg
(integer) 0
127.0.0.1:6379> zrem kings liangliang
(integer) 0zcard 列出集合元素个数127.0.0.1:6379> ZCARD kings
(integer) 4zscore 查看某成员的分数# 查查巅峰召唤师 chaoge分数
127.0.0.1:6379> ZSCORE kings chaoge
"2100"zrank ,查看成员的索引下标
# 看看 wenjie的排名
127.0.0.1:6379> help zrankZRANK key membersummary: Determine the index of a member in a sorted setsince: 2.0.0group: sorted_setzrevrange 逆序显示集合元素,从大到小
127.0.0.1:6379> zrevrange kings 0 -1 withscores
1) "songlin"
2) "2440"
3) "chaoge"
4) "2100"
5) "wenjie"
6) "600"
7) "jiaqiang"
8) "300"ZINCRBY 给某个元素,修改分数,添加具体数值。。zincrby
生产用法
相关文章:

redis用法(二)
文章目录 02-redis数据类型篇生产环境下的redis实况图 1.全局命令redis数据存储格式set设置k-v查看当前redis的key的数量危险命令,新手请在于超老师陪同下执行为什么危险?如何正确搜索redis的key 查看库下有多少个key查询redis库信息切换redis库查看key是…...

Python-利用os,tkinter库编写一个伪恶意程序文件(Pro版)
前言:上一期我们简单学习了如何编写一个多次弹窗警告用户的exe伪恶意文件。我们知道了把Python初始文件编译为exe文件后,程序在没有Python环境的情况下也能正常运行。我们上次编写的程序仅仅只是伪造系统正在执行关机命令前的倒计时的假象,实…...

Oracle视频基础1.4.4练习
1.4.4 [dbs] 删干净上次创建的bbk ll rm -f *dbf ll rm -f spfilebbk.ora clear ll创建bbk的pfile,准备对应的目录 ll strings spfilewilson.ora | more strings spfilewilson.ora > initbbk.ora :%s/wilson/bbk :%s/*\.//g :wq ll vi initbbk.ora####### 创…...

GOF的C++软件设计模式的分类和模式名称
“GOF” 指的是 “Gang of Four”,即“四人帮”,他们是指 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides。这四位作者在其著作《Design Patterns: Elements of Reusable Object-Oriented Software》中定义了23种设计模式,这些…...

有向图的完全可达性(有向图搜索全路径的问题) C#DFs
在考察输入输出方面我觉得是道难题了 第一次遇见邻接表的数据结构该怎么声明 卡码网105 在力扣没找见完全相同的题 感觉需要多练习多复习这种类型的题 105. 有向图的完全可达性 题目描述 给定一个有向图,包含 N 个节点,节点编号分别为 1&…...

前端开发实现自定义勾选/自定义样式,可复选,可取消勾选
基于后端返回数组实现多选、复选 以下代码基于vue2,如果有需要React/Vue3或者其他框架代码的,可以通过国内直连GPT4o进行代码转换,转换正确率99% 前端代码如下(直接拷贝到你的vue代码即可): <!-- CustomCheckboxList.vue --&g…...

鸿蒙-promptAction.showToast基于PC屏幕底部提示
PC端app缩小,右击出菜单后,点菜单项 菜单关闭,并弹promptAction.showToast提示,但提示是基于PC底部弹提示的,需要的是基于app底部弹提示 原因是UIContext是右击菜单的UIContext,需要拿到菜单下面UI的UICont…...

Vert.x,应用监控 - 全链路跟踪,基于Zipkin
关于Zipkin Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),能够收集服务间调用的时序数据,提供调用链路的追踪。Zipkin每一个调用链路通过一个trace id来串联起来,通过trace id,就能够直接定位到这次调…...

Rust常用数据结构教程 序列
文章目录 一、Vec1.Vec与堆栈2.什么时候需要Vec3.get()方法4.与枚举的结合 二、VecDeque1.什么情况适合VecDeque2.VecDeque的方法 三、LinkedList1.什么时候用LinkedList 参考 一、Vec 可变数组(vector)数组存储在heap上,在运行时(runtime)可以增加或减少数组 长度 有人把Ve…...

智慧城市路面垃圾识别系统产品介绍方案
方案介绍 智慧城市中的路面垃圾识别算法通常基于深度学习框架,这些算法因其在速度和精度上的优势而被广泛采用。这些模型能够通过训练识别多种类型的垃圾,包括塑料袋、纸屑、玻璃瓶等。系统通过训练深度学习模型,使其能够识别并定位多种类型…...

网络安全:构建坚固的数字堡垒
网络安全:构建坚固的数字堡垒 在当今数字化时代,网络安全已经成为企业和个人不可忽视的重要议题。随着互联网的普及和信息技术的快速发展,网络攻击、数据泄露和隐私侵犯等问题日益严重,给企业和个人带来了巨大的风险和损失。本文…...

LeetCode题练习与总结:打乱数组--384
一、题目描述 给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是 等可能 的。 实现 Solution class: Solution(int[] nums) 使用整数数组 nums 初始化对象int[] reset() 重设数组到它的初始状态并返回int[]…...

科技改变生活:最新智能开关、调光器及插座产品亮相
根据QYResearch调研团队的最新力作《欧洲开关、调光器和插座市场报告2023-2029》显示,预计到2029年,欧洲开关、调光器和插座市场的规模将攀升至57.8亿美元,并且在接下来的几年里,将以4.2%的复合年增长率(CAGRÿ…...

传统RAG流程;密集检索器,稀疏检索器:中文的M3E
目录 传统RAG流程 相似性搜索中:神经网络的密集检索器,稀疏检索器 密集检索器 BGE系列模型 text-embedding-ada-002模型 M3E模型 稀疏检索器 示例一:基于TF-IDF的稀疏检索器 示例二:基于BM25的稀疏检索器 稀疏检索器的特点与优势 传统RAG流程 相似性搜索中:神经…...

基于统计方法的语言模型
基于统计方法的语言模型 基于统计方法的语言模型主要是指利用统计学原理和方法来构建的语言模型,这类模型通过分析和学习大量语料库中的语言数据,来预测词、短语或句子出现的概率。 N-gram模型:这是最基础的统计语言模型之一,它基…...

Flux comfyui 部署笔记,整合包下载
目录 comfyui启动: 1、下载 Flux 模型 2、Flux 库位置 工作流示例: Flux学习资料免费分享 comfyui启动: # 配置下载模型走镜像站 export HF_ENDPOINT="https://hf-mirror.com" python3 main.py --listen 0.0.0.0 --port 8188 vscode 点击 port 映射到本地,…...

高性能分布式缓存Redis-数据管理与性能提升之道
一、持久化原理 Redis是内存数据库,数据都是存储在内存中,为了避免进程退出导致数据的永久丢失,需要定期将Redis中的数据以某种形式(数据或命令)从内存保存到硬盘;当下次Redis重启时,利用持久化文件实现数据恢复。除此…...

BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测
BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测 目录 BO-CNN-LSTM回归预测 | MATLAB实现BO-CNN-LSTM贝叶斯优化卷积神经网络-长短期记忆网络多输入单输出回归预测效果一览基本介绍模型搭建程序设计参考资料 效果一览 …...

DataWind将字符串数组拆出多行的方法
摘要: 可视化建模中先将字符串split为array再用explode(array)即可 可视化建模 进入“可视化建模”页面 1.1 新建任务 如果团队内没有可视化建模任务。请点击“新建任务”,输入名称并确定。 1.2 建立数据连接 在左边栏中选择“数据连接”,…...

try...catch 和then...catch的异同点分析
try…catch 和 then…catch 的异同点分析 在现代 JavaScript 编程中,异常处理和 Promise 的处理是非常常见的两种方式。try...catch 语句主要用于同步代码的异常处理,而 .then().catch() 是 Promise 中的异步处理方法。 1. 基础概念 1.1 try…catch …...

Mit6.S081-实验环境搭建
Mit6.S081-实验环境搭建 注:大家每次做一些操作的时候觉得不太保险就先把虚拟机克隆一份 前言 qemu(quick emulator):这是一个模拟硬件环境的软件,利用它可以运行我们编译好的操作系统。 准备一个Linux系统…...

以太网交换安全:MAC地址漂移
一、什么是MAC地址漂移? MAC地址漂移是指设备上一个VLAN内有两个端口学习到同一个MAC地址,后学习到的MAC地址表项覆盖原MAC地址表项的现象。 MAC地址漂移的定义与现象 基本定义:MAC地址漂移发生在一个VLAN内的两个不同端口学习到相同的MAC地…...

STM32实现串口接收不定长数据
原理 STM32实现串口接收不定长数据,主要靠的就是串口空闲(idle)中断,此中断的触发条件与接收的字节数无关,只有当Rx引脚无后续数据进入时(串口空闲时),认为这时候代表一个数据包接收完成了&…...

AAA 数据库事务隔离级别及死锁
目录 一、事务的四大特性(ACID) 1. 原子性(atomicity): 2. 一致性(consistency): 3. 隔离性(isolation): 4. 持久性(durability): 二、死锁的产生及解决方法 三、事务的四种隔离级别 0 .封锁协议 …...

外接数据库给streamlit等web APP带来的变化
之前我采用sreamlit制作了一个调查问卷的APP, 又使用MongoDB作为外部数据存储,隐约觉得外部数据库对于web APP具有多方面的意义,代表了web APP发展的趋势之一,似乎是作为对这种趋势的响应,streamlit官方近期开发了st.c…...

Gitpod: 我们正在离开 Kubernetes
原文:Christian Weichel - 2024.10.31 Kubernetes 似乎是构建远程、标准化和自动化开发环境的显而易见选择。我们也曾这样认为,并且花费了六年时间,致力于打造最受欢迎的云开发环境平台,并达到了互联网级的规模。我们的用户数量达…...

1.每日SQL----2024/11/7
题目: 计算用户次日留存率,即用户第二天继续登录的概率 表: iddevice_iddate121382024-05-03232142024-05-09332142024-06-15465432024-08-13523152024-08-13623152024-08-14723152024-08-15832142024-05-09932142024-08-151065432024-08-131123152024-…...

普通一本大二学生,软件工程,想考研985,想知道哪个大学的软件工程好,又不至于完全考不起的?
竞争难度适中:相较于顶尖985院校,重庆大学作为实力派985高校,其竞争烈度较为温和,考研难度适中偏易,为追求高性价比深造路径的考生提供了理想之选。 考试难度友好:重庆地区考研评分标准相对宽松࿰…...

「QT」几何数据类 之 QMatrix4x4 4x4矩阵类
✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...

让Apache正确处理不同编码的文件避免中文乱码
安装了apache2.4.39以后,默认编码是UTF-8,不管你文件是什么编码,统统按这个来解析,因此 GB2312编码文件内的中文将显示为乱码。 <!doctype html> <html> <head><meta http-equiv"Content-Type" c…...