当前位置: 首页 > news >正文

Redis 8种基本数据类型及常用命令和数据类型的应用场景

小伙伴们好,欢迎关注,一起学习,无限进步
文章内容为学习的一些笔记及工作中遇到的一些问题

文章目录

    • Redis 五大数据类型
      • key
      • String
      • List
      • Set
      • Hash
      • Sorted Set
    • 三种特殊类型
      • Geospatial 地理位置
      • Hyperloglog
      • Bitmap

Redis 五大数据类型

redis 官方网张:https://redis.io/

redis 常用命令:https://www.redis.net.cn/order/

使用 SpringBoot。Jedis 连接的方法也是这些命令

key

# 验证 redis 服务密码
127.0.0.1:6379> auth 123456
# 查看 redis 节点信息
127.0.0.1:6379> info replication
# 测试是否连接 redis
127.0.0.1:6379> ping
# 查看所有的key
127.0.0.1:6379> keys * 
#关闭redis 
127.0.0.1:6379> shutdown
# 退出
127.0.0.1:6379> exit  
# 切换数据库
127.0.0.1:6379> select 3
# 查看DB大小
127.0.0.1:6379> DBSIZE  
# 清除当前数据库
127.0.0.1:6379> flushdb
# 清除全部数据库的内容
127.0.0.1:6379> flushall
# 判断当前的key是否存在
127.0.0.1:6379> exists name
127.0.0.1:6379> set name
# 移动key到第一个数据库
127.0.0.1:6379> move name 1
# 设置key的过期时间,单位是秒
127.0.0.1:6379> expite name 10
# 查看当前 key 的剩余时间
127.0.0.1:6379> ttl name  
# 查看当前key的一个类型
127.0.0.1:6379> type name

String

# 设置值
127.0.0.1:6379> set k1 v1  
# 获取值
127.0.0.1:6379> get k1  
# 获取所有的 key
127.0.0.1:6379> keys *
# 判断一个 key 是否存在
127.0.0.1:6379> exists k1
# 获取字符串的长度
127.0.0.1:6379> STRLEN key1
# 追加字符串,如果当前 key 不存在,就相当于set key
127.0.0.1:6379> APPEND k1 ",Hello"
# 初始浏览量为 0
127.0.0.1:6379> set views 0
# 自增1 浏览量变为1
127.0.0.1:6379> incr views
# 自减1  浏览量-1
127.0.0.1:6379> decr views
# 可以设置步长,指定增加10
127.0.0.1:6379> incrby views 10 
# 可以设置步长,指定减小10
127.0.0.1:6379> decrby views 10 
# 设置 k1 的值
127.0.0.1:6379> set k1 "hello,world"
# 截取字符串 [0,3]
127.0.0.1:6379> getrange k1 0 3
# 获取全部的字符串和 get key 是一样的
127.0.0.1:6379> getrange k1 0 -1
# 设置 k2 的值 "12345678"
127.0.0.1:6379> set k2 "12345678"
# 替换指定位置开始的字符串
127.0.0.1:6379> SETRANGE k2 1 xx# setex (set with expire)  # 设置过期时间
# setnx (set if not exist)  # 不存在在设置 (在分布式锁中会常常使用!)
# 设置key3 的值为 hello,30秒后过期
127.0.0.1:6379> setex k3 30 "hello" 
# 查看 k3 过期时间
127.0.0.1:6379> ttl k3
# 如果 k3 不存在,创建 k3
127.0.0.1:6379> setnx k3 "haha"
# 清除当前数据库的所有 key
127.0.0.1:6379> flushdb
# 同时设置多个值
127.0.0.1:6379> mset k1 v1 k2 v2 k3 v3  
# 同时获取多个值
127.0.0.1:6379> mget k1 k2 k3# msetnx 是一个原子性的操作,要么一起成功,要么一起失败 结果返回 0
127.0.0.1:6379> msetnx k1 v1 k4 v4# 对象 set user:1 {name:zhangsan,age:3}  设置一个user:1 对象值为 json 字符来保存一个对象
# 这里的key是一个巧妙的设计: user:{id}:{filed} , 如此设计在Redis中是完全OK了
127.0.0.1:6379> mset user:1:name zhangsan user:1:age 2
# 获取对象中的值
127.0.0.1:6379> mget user:1:name user:1:age# getset  先get然后在set
# 如果不存在值,则返回 nil
127.0.0.1:6379> getset db redis
# 如果存在值,获取原来的值,并设置新的值
127.0.0.1:6379> getset db mongodb

String类似的使用场景:value 除了是字符串还可以是数字

  • 用户token
  • 计数器
  • 统计多单位的数量
  • 粉丝数
  • 对象缓存存储

List

基本的数据类型,列表,在redis里面,list 是一种比较灵活的链表数据结构,可以充当栈、队列、阻塞队列

list 列表是链表型的数据结构,所以它的元素是有序的,而且列表内的元素是可以重复的。意味着它可以根据链表的下标获取指定的元素和某个范围内的元素集。

# 将一个值或者多个值,插入到列表头部 (左)
127.0.0.1:6379> lpush list one
127.0.0.1:6379> lpush list one two three
# 获取 list 中的所有值
127.0.0.1:6379> lpush list 0 -1
# 通过区间获取具体的值
127.0.0.1:6379> lrange lisr 0 1
# 将一个值或者多个值,插入到列表位部 (右)
127.0.0.1:6379> rpush list righr# 通过下标获得 list 中的某一个值
127.0.0.1:6379> lindex list 1
# 返回 list 列表的长度
127.0.0.1:6379> llen list# 移除list的第一个元素
127.0.0.1:6379> lpop list
# 移除list的最后一个元素
127.0.0.1:6379> rpop list  
# 移除list集合中指定个数的value,精确匹配
127.0.0.1:6379> lrem list 1 one # trim 修剪 
# 新建一个 newlist 集合
127.0.0.1:6379> lpush newlist "hello" "hello1" "hello2" "hello3" "hello4"
# 通过下标截取指定的长度,这个list已经被改变了,截断了只剩下截取的元素
127.0.0.1:6379> ltrim newlist 1 2# rpoplpush 移除列表的最后一个元素,将他移动到新的列表中
127.0.0.1:6379> rpush newlist "hello1"
# 移除列表的最后一个元素,将他移动到新的列表中
127.0.0.1:6379> rpoplpush another anotherlist
# 查看目标列表中,确实存在改值
127.0.0.1:6379> lrange anotherlist 0 -1 # lset 将列表中指定下标的值替换为另外一个值,更新操作
127.0.0.1:6379> exists list
# 如果不存在列表更新机会报错,更新前先检查列表是否存在(0表示下表索引)
127.0.0.1:6379> lset list 0 item
# 如果下标不存在,则会报错
127.0.0.1:6379> lset list 10 other# linsert 将某个具体的 value 插入到列表中某个元素的前面或者后面
127.0.0.1:6379> rpush list "hello"
127.0.0.1:6379> rpush list "world"
# 把 other 添加到 world 前面
127.0.0.1:6379> linsert list before "world" "other"
# 把 another 添加到 world 后面
127.0.0.1:6379> linsert list after "world" "another"

List 是一个链表,before , after , left,right 都可以插入值,在两边插入或者改动值,效率最高! 中间元素,相对来说效率会低一点

使用场景:

  • 消息队列
  • 排行榜
  • 最新列表

Set

Sets: 不重复且无序的字符串元素的集合。

set 类型是 string 类型的集合,其特点是集合元素无序且不重复,每个集合最多可以存储 232 - 1 个元素(40多亿)

所有的 set 命令都是 s 开始

# 清空当前数据库
127.0.0.1:6379> flushdb
# set 集合中添加几个值
127.0.0.1:6379> sadd myset "1"
127.0.0.1:6379> sadd myset "1" "2" "3" "4" "5" "6" "7" "8" "9" "0"
# 查看指定 set 的所有值
127.0.0.1:6379> smembers myset
# 判断某一个值是不是在 set 集合中
127.0.0.1:6379> sismember myset# 获取 set 集合中的内容元素个数
127.0.0.1:6379> scard myset
# 移除 set 集合中的指定元素
127.0.0.1:6379> srem myset 3# 随机抽选出一个元素,set 无序不重复集合。抽随机
127.0.0.1:6379> srandmember myset
# 随机抽取2个
127.0.0.1:6379> srandmember myset 2# 随机删除 myset 中的值
127.0.0.1:6379> spop myset# 将一个指定的值,移动到另外一个set集合
127.0.0.1:6379> sadd "hello"
127.0.0.1:6379> sadd "world"
127.0.0.1:6379> smove myset newset "hello"# 数字集合类 - 差集 sdiff - 交集 sinter - 并集 sunion
127.0.0.1:6379> sadd key1 "a" "b" "c"
127.0.0.1:6379> sadd key2 "c" "e" "f"
# 差集—— key1 在 key2 中没有的值
127.0.0.1:6379> sdiff key1 key2
# 交集—— key1 和 key2 共同拥有的值
127.0.0.1:6379> sinter key1 key2
# 并集—— key1 和 key2 所有的值
127.0.0.1:6379> sunion key1 key2

Set使用场景:

  • 共同关注,共同爱好,推荐好友,共同好友,共同喜好,二度好友,共同粉丝,微信点赞同好友可看,感兴趣的人集合
  • 兴趣标签,相同爱好的为一个标签
  • 统计网站的独立IP。利用set集合当中元素不唯一性,可以快速实时统计访问网站的独立IP。
  • 安全提示,群聊拉人的时候,新人入群的提示,如果被拉进群聊的新人除了拉取人之外,和其他群友都不是好友关系或者跟不超过N个人是好友关系的时候,就可以给一个安全提示。此时用到的是SISMEMBER

Hash

Map集合,key-maps 时候这个值是一个map集合! 本质和String类型没有太大区别,还是一个简单的key-vlaue!

有点像 HashMap 的 value 又套了个HashMap

所有 hash 的命令都是 h 开头

# set一个具体 key-vlaue
127.0.0.1:6379> hset myhash field "hello
# 获取一个字段值
127.0.0.1:6379> hget myhash field
# set 多个 key-vlaue 返回 OK
127.0.0.1:6379> hmset myhash field1 "hello" field2 "world"
# set 多个 key-vlaue 返回成功的数量
127.0.0.1:6379> hset myhash field3 "hello" field4 "world"
# 获取多个字段值
127.0.0.1:6379> hmget myhash field1 field2
# 获取全部的数据
127.0.0.1:6379> hgetall myhash# 获取hash表的字段数量
127.0.0.1:6379> hlen myhash
# 判断hash中指定字段是否存在
127.0.0.1:6379> hexists myhash field1# 只获得所有 field
127.0.0.1:6379> hkeys myhash
# 只获得所有value
127.0.0.1:6379> hvals myhash# 指定增量
127.0.0.1:6379> hset myhash field5 5
127.0.0.1:6379> hincrby myhash field5 5
127.0.0.1:6379> hincrby myhash field5 -2# 如果不存在则可以设置,存在则不能设置
127.0.0.1:6379> hsetnx myhash field6 "hello"
# 删除指定的 field
127.0.0.1:6379>hdel myhash field# 返回 hash 指定 field 的 value 的字符串长度,field 不存在返回 0
127.0.0.1:6379> hstrlen myhash field1

hash变更的数据 user name age,尤其是是用户信息之类的,经常变动的信息! hash 更适合于对象的存储,String更加适合字符串存储

购物车的实现:field (商品id),hincrby (商品数量,添加增量会返回总数),hdel(删除),hgetall(全选),hlen(购物车车数量),key(用户id)

Hash 结构优点:

  • 同类数据归类整合存储,方便数据管理
  • 相比 String 操作消耗内存与 cpu 更小
  • 相比 String 储存更节省空间

缺点:

  • 过期功能不能使用在 field 上,只能用在 key 上
  • Redis 集群架构下不适合大规模使用

Sorted Set

Sorted-Set和Set类型极为相似,它们都是字符串的集合,都不允许重复的成员出现在一个Set中。它们之间的主要差别是Sorted-Set中的每一个成员都会有一个分数(score)与之关联,Redis正是通过分数来为集合中的成员进行从小到大的排序。然而需要额外指出的是,尽管Sorted-Set中的成员必须是唯一的,但是分数(score)却是可以重复的

在set的基础上,增加了一个值,set k1 v1 zset k1 score1 v1

# 添加一个值
127.0.0.1:6379> zadd myzset 1 one 
# 添加多个值
127.0.0.1:6379> zadd myzset 2 two 3 three
# zincrby 和 zadd 效果一样,最后返回结果是字符串,zadd 返回添加总数# 查看添加的值
127.0.0.1:6379> zrange myzset 0 -1
127.0.0.1:6379> zrange myzset 0 -1 withscores# 实现排序 添加三个用户
127.0.0.1:6379>	zadd salary 120 zhang 98 wang 110 li
# ZRANGEBYSCORE key min max   显示全部的用户 从小到大
127.0.0.1:6379>	zrangebyscore salary -inf +inf
# 从大到进行排序
127.0.0.1:6379>	zrevrange salary 0 -1
# 显示全部的用户并且附带成绩
127.0.0.1:6379>	zrangebyscore salary -inf +inf withscores
# 显示成绩小于 110 的所有人,升序排序
127.0.0.1:6379>	zrangebyscore salary -inf 110 withscores
# zrem 移除,移除有序集合中的指定元素
127.0.0.1:6379> zrem salary zhang# 添加值
127.0.0.1:6379> zadd myzset 2 hello 3 world
# 有序集合的元素个数, key 不存在则返回0 
127.0.0.1:6379> zcard myzset
# 获取区间成员数量
127.0.0.1:6379> zcount myzset 1 3
# 计算成员之间的数量
127.0.0.1:6379> zlexcount myzset - +
127.0.0.1:6379> zlexcount myzset [b [f# 删除一个 zset -> del myzset
127.0.0.1:6379> del myzset

ZSet 数据类型使用场景:游戏排名、微博热点话题,根据时间排序的新闻列表, 阅读排行榜,延时队列等

限流,滑动窗口是限流常见的一种策略。如果我们把一个用户的 ID 作为 key 来定义一个 zset ,member 或者 score 可以都为访问时的时间戳。我们只需统计某个 key 下在指定时间戳区间内的个数,就能得到这个用户滑动窗口内访问频次,与最大通过次数比较,来决定是否允许通过。

三种特殊类型

Geospatial 地理位置

将指定的地理空间位置(纬度、经度、名称)添加到指定的key中。这些数据将会存储到sorted set这样的目的是为了方便使用GEORADIUS或者GEORADIUSBYMEMBER命令对数据进行半径查询等操作

常用命令:

命令描述
Redis GEOHASH 命令返回一个或多个位置元素的 Geohash 表示
Redis GEOPOS 命令从key里返回所有给定位置元素的位置(经度和纬度)
Redis GEODIST 命令返回两个给定位置之间的距离
Redis GEORADIUS 命令以给定的经纬度为中心, 找出某一半径内的元素
Redis GEOADD 命令将指定的地理空间位置(纬度、经度、名称)添加到指定的key中
Redis GEORADIUSBYMEMBER 命令找出位于指定范围内的元素,中心点是由给定的位置元素决定

使用场景:

例如:微信位置共享,附近的人等地图功能

redis 127.0.0.1:6379>  GEOADD Sicily 13.361389 38.115556 "beijing" 15.087269 37.502669 "shanghai"
(integer) 2
redis 127.0.0.1:6379>  GEODIST Sicily beijing shanghai
"166274.15156960039"
redis 127.0.0.1:6379>  GEORADIUS Sicily 15 37 100 km
1) "shanghai"
redis 127.0.0.1:6379>  GEORADIUS Sicily 15 37 200 km
1) "beijing"
2) "shanghai"

Hyperloglog

使用场景:

统计注册的IP数,每日访问数,每天在线人数,搜索词条数等类似场景

命令描述
Redis Pgmerge 命令将多个 HyperLogLog 合并为一个 HyperLogLog
Redis Pfadd 命令添加指定元素到 HyperLogLog 中。
Redis Pfcount 命令返回给定 HyperLogLog 的基数估算值。

示例1:

redis 127.0.0.1:6379> PFADD mykey a b c d e f g h i j
(integer) 1
redis 127.0.0.1:6379> PFCOUNT mykey
(integer) 10

示例2:

redis 127.0.0.1:6379> PFADD hll1 foo bar zap a
(integer) 1
redis 127.0.0.1:6379> PFADD hll2 a b c foo
(integer) 1
redis 127.0.0.1:6379> PFMERGE hll3 hll1 hll2
OK
redis 127.0.0.1:6379> PFCOUNT hll3
(integer) 6

Bitmap

使用场景:

统计用户信息、活跃、不活跃、 登录 、 未登录、打卡、365打卡! 两个状态的,都可以使用 Bitmaps!

Bitmap 位图,数据结构,都是操作二进制位来进行记录,就只有0 和 1 两个状态!

365 天 = 365 bit 1字节 = 8bit 46 个字节左右!

# 使用 bitmap 记录周一到周日打卡
127.0.0.1:6379> setbit sign 0 1
127.0.0.1:6379> setbit sign 1 1
127.0.0.1:6379> setbit sign 2 1
127.0.0.1:6379> setbit sign 3 0
127.0.0.1:6379> setbit sign 4 1
127.0.0.1:6379> setbit sign 5 1
127.0.0.1:6379> setbit sign 6 1
# 查看那一天是否打卡
127.0.0.1:6379> getbit sign 3
127.0.0.1:6379> getbit sign 4# 统计这周的打卡记录,就可以看到是否有全勤
127.0.0.1:6379> bitcount sign

相关文章:

Redis 8种基本数据类型及常用命令和数据类型的应用场景

小伙伴们好,欢迎关注,一起学习,无限进步 文章内容为学习的一些笔记及工作中遇到的一些问题 文章目录 Redis 五大数据类型keyStringListSetHashSorted Set 三种特殊类型Geospatial 地理位置HyperloglogBitmap Redis 五大数据类型 redis 官方网…...

JAVA内存模型与JVM内存结构

注意区分Java内存模型(Java Memory Model,简称JMM)与Jvm内存结构,前者与多线程相关,后者与JVM内部存储相关。本文会对两者进行简单介绍。 一、JAVA内存模型(JMM) 1. 概念 说来话长,由于在不同硬件厂商和…...

双导师的中国社科院与英国斯特灵大学创新与领导力博士

自1978年恢复高考之后,很长一段时间里我国的高校系统处于人才很匮乏的状态,那个时候很多高校招聘了大量硕士学历教师(其中很多人在留校后又读了在职博士),而且都是事业编制。那么接下来小编与中国社科院与英国斯特灵大…...

OpenXR 超详细的spec--API初始化介绍

3.API 初始化 3.1 Exported Functions 实现API loader的动态链接库(so/dll)必须export all core OpenXR API functions。然而application可以通过使用xrGetInstanceProcAddr()来获取指向extension函数的指针。 3.2 Function Pointers OpenXR所有函数的指针都可以通过函数xr…...

认识通讯协议——TCP/IP、UDP协议的区别,HTTP通讯协议的理解

目录 引出认识通讯协议1、TCP/IP协议,UDP协议的区别2、HTTP通讯协议的讲解 Redis冲冲冲——缓存三兄弟:缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 认识通讯协议——TCP/IP、UDP协议的区别,HTTP通讯协议的理解 认识通讯协议 …...

谈一谈工作中的前后端功能开发范围

在BS开发中,往往都是团队开发,分为前端和后端,往往经常会遇到此处功能是前端进行功能开发还是后端进行功能开发的讨论,本文以我自己的观点进行论述。 笔者的观点是: 功能实现的优先性:您强调,无…...

Kubernetes 学习总结(46)—— Pod 不停重启问题分析与解决

我们在做性能测试的时候,往往会发现我们的pod服务,频繁重启,通过kubectl get pods 命令,我们来逐步定位问题。 现象:running的pod,短时间内重启次数太多。 定位问题方法:查看pod日志 kubectl get event …...

Vulnhub靶机:Bellatrix

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.4) 靶机:Bellatrix(10.0.2.9) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/hogwa…...

深入探讨 AutoGPT:彻底改变游戏的自主 AI

原文地址:Deep Dive into AutoGPT: The Autonomous AI Revolutionizing the Game 2023 年 4 月 24 日 AutoGPT 是一个功能强大的工具,它通过 API 使用 GPT-4 和 GPT-3.5,通过将项目分解为子任务并在自动循环中使用互联网和其他工具来创建完…...

Java Web之网页开发基础复习

tomcat之网页开发基础复习 **声明** :HTML标准规范 </!doctype> <html> : 根标签 <head>: 头部标签 内含<title><meta><link><style> <body>: 主体 <body></body> html标签 单标签: <标签名 \> 双标…...

华容道问题求解第一部分_详细设计(一)之棋子和游戏类_初始化部分

按&#xff1a;因为自控力和能力的原因&#xff0c;这个其实是在和代码同时进行的。 主要 类 说明 这一层是整个项目的基础&#xff0c;将对未来的算法的效率产生重要影响。为了和界面隔离&#xff0c;以及自身逻辑的清晰&#xff0c;下面的两个类是必须的&#xff0c;棋子类…...

【框架】Spring 框架重点解析

Spring 框架重点解析 1. Spring 框架中的单例 bean 是线程安全的吗&#xff1f; 不是线程安全的 Spring 框架中有一个 Scope 注解&#xff0c;默认的值是 singleton&#xff0c;即单例的&#xff1b;因为一般在 Spring 的 bean 对象都是无状态的&#xff08;在生命周期中不被…...

js中的内存泄漏

理解 内存泄漏是计算机,中由于疏忽或者错误造成程序未能释放已经不在使用的内存,知道浏览器结束 垃圾回收机制 js具有自动的垃圾回收机制,垃圾收集器会定期(周期性)的找出那些不在继续使用的变量,然后释放内存 常见的内存泄漏 意外的全局变量 function foo(){bar 123123…...

营业执照年报申报

姿势&#xff1a;营业执照年报申报 借鉴文章&#xff1a;个体工商户年报申报流程&#xff08;不要再花冤枉钱&#xff09; 1、国家企业信用信息公示系统 地址&#xff1a;https://www.gsxt.gov.cn/index.html 2、登录&#xff08;重庆的方式二简单&#xff09;...

Springboot教程(五)——单元测试

idea中一般使用JUnit进行单元测试 基本使用 我们可以在idea的test文件夹下的XXXXApplicationTests内进行单元测试&#xff1a; 可以在Test标注的方法上写测试代码&#xff1a; SpringBootTest class C0101ApplicationTests {Testfun contextLoads() {println("Hello …...

【Kotlin】函数

1 常规函数 1.1 无参函数 fun main() {myFun() }fun myFun() {println("myFun") // 打印: myFun } 1.2 有参函数 1&#xff09;常规调用 fun main() {myFun("myFun") // 打印: myFun }fun myFun(str: String) {println(str) } 2&#xff09;形参指定默…...

Unity生命周期函数解析

本文由 简悦 SimpRead 转码&#xff0c; 原文地址 mp.weixin.qq.com Unity生命周期函数解析 Unity 生命周期函数是在游戏对象的不同阶段被调用的方法&#xff0c;通过这些函数&#xff0c;我们可以在不同的时刻执行特定的代码。在这篇文章中&#xff0c;我们将一步步解析 Unit…...

【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进

【Qt】QTextEdit/QPlainTextEdit 实现 Tab 键多行缩进与反缩进 文章目录 I - 主要原理II - 代码实现2.1 - 自定义类2.2 - 实现 Tab 缩进2.3 - 实现反缩进 III - 参考链接 I - 主要原理 由于 QTextEdit 和 QPlainTextEdit &#xff0c;都无法实现多行选中缩进与反缩进&#xff…...

C++缺陷与思考

数组隐式转换为指针 size_t func(int a[10]) {return sizeof(a); }int a[100]; func(a); // 指针大小 sizeof(a); // 数组大小函数的参数看似是一个数组形式&#xff0c;但事实上他已经退化为指针了&#xff0c;也就是等价于size_t func(int* a)&#xff0c;而数组作为参数传…...

无公网ip环境使用DS file软件远程访问内网群晖NAS中储存的文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用程序具有…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...