【Redis】Redis十大类型

文章目录

  • 前言
  • 一、string字符串类型
  • 二、List列表类型
  • 三、 Hash表
  • 四、 Set集合
  • 五、 ZSet有序集合
  • 六、 GEO地理空间
  • 七、 HyperLogLog基数统计
  • 八、Bitmap位图
  • 九、bitfield位域
  • 十、 Stream流
    • 10.1 队列指令
    • 10.2 消费组指令
    • 10.3 ACK机制


前言

redis是k-v键值对进行存储,key的类型都是字符串,而数据类型是value的数据类型

Tip:命令不区分大小写,而key的值是区分大小写的

Key常用命令

keys *  		//当前库的所有key
exists key      //判断某个key是否存在,可以同时判断多个key,返回几就是存在几个
type key        //查看你的key是什么类型

// 删除
del key         //是原子操作,删除指定的key数据
unlink key      //常用于多线程时,非阻塞删除,仅仅将keys从keyspace元数据中删除,没真正的删除,会在后续异步中操作

// 过期时间
ttl key         // 查看还有多少秒过期 -1表示永不过期 -2 表示已过期
expire key 秒    // 给key设置过期时间

// 数据库操作
move key dbindex [0-15]   // 将当前数据库的key移动到指定的数据库中  redis默认是有16个数据库的
select dbindex [0-15]   // 切换数据库[0-15],默认为0
dbsize   			// 查看当前数据库key的数量

flushdb         		// 清空当前库
flushall 			// 清空16个数据库 慎用

help @+数据类型 会出现命令提示 比如 help @string
在这里插入图片描述


一、string字符串类型

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

1. set命令

// 常用命令
set key value [NX|XX][GET][EX seconds|PX milliseconds|EXAT unix-time-seconds|PXAT unix-time-milliseconds|KEEPTTLJ

// 设置过期时间,秒为单位
set key1 value1 EX 3 // 过期时间为3秒

// 设置键存在时的键值(即覆盖作用),并返回原来的值
set key1 value2 get

// 将key1进行修改时,继续使用之前的过期时间(因为默认修改时是直接设置为永不过期了)
set key1 value1 keepttl // 过期时间为3秒

SET命令有NX、XX、EX、PX以及KEEPTTL五个可选参数,

  • NX:键不存在的时候设置键值(NX可以理解为not exit)
  • XX:键存在的时候设置键值
  • GET:返回指定键原本的值,若键不存在时返回nil
  • EX seconds:以秒为单位设置过期时间
  • PX milliseconds:以毫秒为单位设置过期时间
  • EXAT timestamp:设置以秒为单位的UNIX时间戳所对应的时间为过期时间
  • PXAT milliseconds-timestamp:设置以毫秒为单位的UNIX时间戳所对应的时间为过期时间
  • KEEPTTL:保留设置前指定键的生存时间

2. mset同时设置多个键值对

MSET [key1] [value1] [key2] [value2] [key3] [value3]  // 同时设置一个或多个键值对
MGET [key1] [key2] [key3]  // 同时获取多个key的值
MSETNX [key1] [value1] [key2] [value2]  // 同时设置一个或多个 key-value 对  必须保证key都不存在才能成功

3. 获取键的指定区间的值

GETRANGE [key] 0 -1  // 获取这个key的值的全部
GETRANGE [key] 0 2   // 获取这个key的值索引0到索引2之间的值
SETRANGE [key] 1 xxx  // 设置指定区间范围内的值

// 获取key1的0-3的值,类似于获取字符串的子字符串
getrange key1 0 3

// 将key1从1索引开始设置为aayy
setrange key1 aayy

4. 数值增减
key键对应的value类型必须为数字

INCR [key]    // 递增数字 +1
INCRBY [key] [increment]   // 增加指定的整数  +increment 
DECR [key]   // 递减数字 -1
DECRBY [key] [increment]   // 减少指定的整数  -increment 

5. 获取字符串长度和内容相加

STRLEN [key]        // 获取key对应的值的长度
APPEND [key] [vale]   // 添加字符串内容

// 向key1中追加aaaa
append key1 aaaa

6. 分布式锁

setnx/setex [key] [过期时间] [value]  // 设置带过期时间的key,动态设置
setnx [key] [value] // 只有在 key 不存在时设置 key 的值。
// 一般是两个命令连用,写成lua脚本连用,具体在Redis高级分布式锁中使用

7. getset

getset [key] [value]  // 给定 key 的值设为 value ,并返回 key 的旧值
// 类似于 set [key] [value] get

应用

  • dy点赞某个视频或商品,点一次加一次
    • 使用incr key 获得多少人喜欢
  • 对于文章是否喜欢
    • 使用incr key 获得多少人喜欢

二、List列表类型

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

主要功能有push/pop等,一般用在栈、队列、消息队列等场景

  • left、right都可以插入添加;
  • 如果键不存在,创建新的链表
  • 如果键已存在,新增内容
  • 如果键全移除,对应的键也就消失了

常见命令

lpush [key] [value] ...  // 往 列表头部(左边)放入元素
Rpush [key] [value] ...  // 往 列表(右边)放入元素
lrange [key] 0 -1      // 从左边开始遍历列表  只能从左边遍历
lpop [key]           // 最左边的出栈 也就是lrange遍历的第一个
rpop [key]           // 最右边的出栈 也就是lrange遍历的最后一个
lindex [key] [index]  // 通过索引值获取值
llen [key]    // 获得元素个数
lrem [key] [num] [value]  // 从左往右删除 num个值为 value的值(因为list允许有重复的值)
lrem [key] 0 [value]  // 从左往右删除所有值为value的值
ltrim [key] [开始] [结束] // 截取指定范围的值后再赋给[key],也就是删除这个区间外的值
RPOPLPUSH [key1] [key2]  //移除key1列表的最后一个元素(也即R端),并将该元素添加到另一个key2列表的第一个(L端)并返回这个元素的值
lset [key] [index] [value]   //将key的第 index 个索引值改为value
linsert [key] before/after [value1] [value2] // 在list某个已有值的前后再添加具体值

在这里插入图片描述

应用场景
公众号的订阅的消息

  • 关注的人发布文章,就会到本人的列表中 List,进行Ipush操作: lpush likearticle:id 文章id
  • 查看自己订阅的文章 lrange likearticle:id 0 9

三、 Hash表

  • Hash是一个string类型的 field(字段)和 value(值)的映射表,Hash特别适合用于存储对象。
  • 它也是k-v 模式不变,但v是一个键值对 => Map<String,Map<Object,Object>>
  • Redis 中每个hash可以存储2个32-1键值对(40多亿)|

常用命令
hset/hget/hmset/hmget/hgetall/hdel
在这里插入图片描述

hlen   // 获取在某个key内的全部数量
hexists [key] [k1]   // 看key中是否有k1这个键
hkeys [key]    // 获取key里面的所有key
hvals [key]    // 获取key里面的所有value
hincrby [key] k1 [num] // key里面k1的值增长num 整数
hincrbyfloat [key] k1 [num] // key里面k1的值增长num 小数
hsetnx [key] k1 [value] // 不存在赋值,存在了无效\

四、 Set集合

  • 单值多value,也就是无重复。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是intset或者hashtable。
  • Redis 的 Set 是String类型的无序集合
  • Redis 中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
  • 集合中最大的成员数为2^32- 1(4294967295,每个集合可存储40多亿个成员)

常用命令

SADD key [member ...]   // 添加元素,有重复值时,自动去重
SMEMBERS key      // 遍历集合中所有元素
SISMEMBER key member    // 判断元素是否在集合中
SREM key [member ...]     // 删除元素
SCARD  key          // 获取集合长度
SRANDMEMBER key m   //set集合里面随机取出m个元素展示,不会删除  如果超过最大数量就全部取出   如果写的值是负数,比如-3 ,表示需要取出3个,但是可能会有重复值
SPOP key m   // 从集合中随机弹出一个元素,会删除
SMOVE key1 key2 value1  // 将key1的已存在的某个值value1迁移给key2,key1中value1便没有了

集合运算

SDIFF keyA keyB     // A - B  属于A但不属于B的元素构成的集合
SUNION keyA keyB    // A U B  属于A或者属于B的元素合并后的
SINTER keyA keyB    // A ∩ B  属于A同时属于B
SINTERCARD numkeys keyA keyB [LIMIT limit] // 不返回结果集,只返回结果的基数(即个数)

应用场景
抽奖小程序

  • 将所有抽奖用户 sadd key 用户ID
  • 显示多少人参加 SCARD key
  • 从set中任意选取N个中奖人
  • SRANDMEMBER key 2 随机抽奖两个人,元素不删除
  • SPOP key 2 随机抽奖两个人,元素会删除

朋友圈点赞

  • 新增点赞 SADD pub:msgID 点赞用户Id1 点赞用户Id2
  • 取消点赞 SREM pub:msgID 点赞用户Id
  • 展现所有点赞过的用户 SMEMBERS pub:msgID
  • 点赞用户统计 SCARD pub:msgID
  • 判断某个朋友是否对楼主点赞过 SISMEMBER pub:msgID 用户Id

可能认识的人

  • 求两个人的差集 SDIFF user1 user2

五、 ZSet有序集合

  • zset和 set一样也是string类型元素的集合,且不允许重复的成员
    • zset k1 score1 v1 score2 v2
  • zset和set的区别,就是在set的基础上加了一个score分数值,redis正是通过分数来为集合中的成员进行从小到大的排序
  • zset的成员是唯一的,但分数(score)却可以重复
  • zset集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。
  • 集合中最大的成员数为2^32 -1

常用命令

ZADD key score member [score member ] // 添加元素
ZRANGE key start stop [WITHSCORES] // 返回元素分数从小到大的顺序   返回索引从start到stop之间的所有元素,0 -1是返回全部
ZREVRANGE key 0 - 1 [WITHSCORES]   // 反序,WITHSCORES参数表示显示分数
ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count] // 获取指定分数范围的元素,在min或max前加"("时,表示开区间   limit是返回限制,返回多少个 
// 实例:ZRANGEBYSCORE key (60 90 limit 0 1  // 表示在key中筛选一个分数在(60,90]区间中的值

ZSCORE key member     // 获取元素的分数
ZCARD key             // 获取集合中元素的数量
ZREM key 某score下对应的value值   // 删除元素
ZINCRBY key increment member    // 增加某个元素的分数
ZCOUNT key min max     // 获得指定分数范围内的元素个数
ZRANK key value     // 获得value下标
ZREVRANK key values    // 逆序获得下标
ZMPOP numkeys key [key …] <MIN | MAX> [COUNT count] // 弹出元素,弹出后删除
  • numkeys 表示几个key
  • <MIN | MAX> 小 | 大
  • [COUNT count] count num 弹出num个
    在这里插入图片描述
    在myzset集合中,有元素:(1,one),(2,two),(3,three)
    以上命令意思是,在myzset这一个键中,取出最小的一个(分数,值)这样的‘分数-值’对

应用场景
根据商品销售对商品进行排序显示

  • 思路:定义商品销售排行榜(sorted set集合),key为goods:sellsort,分数为商品销售数量。
  • 商品编号1001的销量是9,商品编号1002的销量是15
    • zadd goods:sellsort 9 1001 15 1002
  • 有一个客户又买了2件商品1001,商品编号1001销量加2
    • zincrby goods:sellsort 2 1001
  • 求商品销量前10名
    • ZRANGE goods:sellsort 0 9 withscores

六、 GEO地理空间

Redis GEO主要用于存储地理位置信息,并对存储的信息进行操作,包括

  • 添加地理位置的坐标。
  • 获取地理位置的坐标。
  • 计算两个位置之间的距离。
  • 根据用户给定的经纬度坐标来获取指定范围内的地理位置集合

经纬度去地图上直接复制

// 多个经度(longitude)、纬度(latitude)、位置名称(member) 添加到指定的key中
GEOADD key longitude latitude member [经度 纬度 名称 ...]

// 从键里面返回所有给定位置元素的位置(经度和纬度)
GEOPOS key member [...]

GEODIST 返回两个给定位置之间的距离。
GEORADIUS 以给定的经纬度为中心,返回与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUSBYMEMBER 跟GEORADIUS类似

// 返回一个或多个位置元素的Geohash表示
GEOHASH key member [...] 

在这里插入图片描述

  • GEORADIUS
    在这里插入图片描述
    应用场景
  • 美团附近的饭店、酒店
  • 高德地图附近的店

七、 HyperLogLog基数统计

HyperLogLog是用来做基数统计的算法。

  • 去重复统计功能的基数估计算法就是 HyperLogLog
    • 基数:是一种数据集,去重复后的真实个数
    • 基数统计:用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算
  • 只需要花费12KB内存,就能记录 2的64次方=18446744073709551616 个不同元素的基数

HyperLogLog的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定且是很小的。

HyperLogLog类型的本质是string类型。但是,因为 HyperLogLog只会根据输入元素来计算基数,而不会储存输入元素本身,所以HyperLogLog不能像集合那样,返回输入的各个元素。(即不能用get)

PFADD key element [element ...]  // 添加指定元素到 HyperLogLog 中。
PFCOUNT key [key ...]  // 返回给定HyperLogLog的基数估算值。
PFMERGE destkey sourcekey [sourcekey ...]  // 将多个HyperLogLog合并为一个HyperLogLog

在这里插入图片描述

应用场景

  • 统计某个网页的UV、某个文章的UV
  • UV Unique Visitor 独立访客,一般理解为客户端IP,需要去重
  • 用户搜索网站关键词数量
  • 统计用户每天搜索不同词条个数

八、Bitmap位图

由0和1状态表现的二进制位的bit数组
在这里插入图片描述

  • 用String类型作为底层数据结构实现的一种统计二值状态(Y/N)的数据类型
  • 位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。
  • 一个键对应的位图类型应该是8的整数倍。
  • Bitmap支持的最大位数是2^32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2的32次方 = 4294967296)

常用命令

SETBIT key offset value    // 将key键中的第offset的值设为value  value只能是0或1  offset 从0开始
GETBIT key offset        // 获得第offset位的值
STRLEN key              // 得出占多少字节 超过8位后自己按照8位一组一byte再扩容
BITCOUNT key         // 得出该key里面含有几个1
BITOP and destKey key1 key2 // 对一个或多个 key 求逻辑并,并将结果保存到 destkey 
BITOP or destKey key1 key2 // 对一个或多个 key 求逻辑或,并将结果保存到 destkey 
BITOP XOR destKey key1 key2 // 对一个或多个 key 求逻辑异或,并将结果保存到 destkey 
BITOP NOT destKey key // 对key 求逻辑非,并将结果保存到 destkey 

应用场景
做签到很适合位图

  • 每天使用1个1亿位的Bitmap约占12MB的内存(10^8/8/1024/1024),10天的Bitmap的内存开销约为120MB,内存压力不算太高。
  • 在实际使用时,最好对Bitmap设置过期时间,让Redis自动删除不再需要的签到记录以节省内存开销。
  • 对于电影和广告是否被点击播放过也可以用位图

九、bitfield位域

通过bitfield命令可以一次性操作多个比特位域(指的是连续的多个比特位),它会执行一系列操作并返回一个响应数组,这个数组中的元素对应参数列表中的相应操作的执行结果。

十、 Stream流

Redis Stream主要用于消息队列(MQ,Message Queue)

实现消息队列的三个方式

  • List实现消息队列
    在这里插入图片描述

    • 常用来做异步队列使用,将需要延后处理的任务结构体序列化成字符串塞进Redis的列表,另个线程从这个列表中轮询数据进行处理。
  • Pub/Sub 发布订阅,
    在这里插入图片描述

    • 但它有个缺点就是消息无法持久化,如果出现网络断开、Redis宕机等,消息就会被丢弃。简单来说发布订阅(pub/sub)可以分发消息,但无法记录历史消息。并且没有ACK机制保证数据的可靠性
  • Stream流 (Redis版的MQ消息中间件+阻塞队列)

    • Redis Stream提供了消息的持久化和主备复制功能,可以让任何客户端访问任何时刻的数据,并且能记住每一个客户端的访问位置,还能保证消息不丢失。

Stream底层结构
Stream底层结构

10.1 队列指令

在这里插入图片描述

XADD  // 添加消息到队列末尾
XTRIM  maxlen|minid  len|id // 限制Stream的长度,如果已经超长会进行截取
					        // maxlen  允许的最大长度,对流进行修剪限制长度,按id保留最大的len个
					        // minid 允许的最小id,从某个id值开始比该id值小的将会被抛弃
					        
XDEL key ID  // 删除消息
XLEN key  // 获取Stream中的消息长度

XRANGE key start end [count] // 获取消息列表(可以指定范围),忽略删除的消息
XREVRANGE  // 和XRANGE相比区别在于反向获取,ID从大到小

XREAD [COUNT count] [BLOCK milliseconds] key id  // 获取消息(阻塞/非阻塞),返回大于指定ID的消息
// count 最多读取几条消息,不指定时返回key中所有满足的消息
// BLOCK是否已阻塞的方式读取消息,默认不阻塞,如果milliseconds设置为0,表示永远阻塞
// id  $表示比最大ID还大的id;0-0表示从最小id获取消息

XADD 添加消息
在这里插入图片描述

  • *号表示服务器自动生成MessageID(类似mysq|里面主键auto_increment),后面顺序跟着一堆业务key/value
  • Redis对于ID有强制要求,*号的位置可以是自己指定的ID,但格式必须是时间戳-自增Id这样的方式,且后续ID不能小于前一个ID

XRANGE 获取消息

xrange - + 10  表示获取10条ID从小到大的数据

XREAD 获取消息(阻塞态)
在这里插入图片描述

Stream的基础方法,使用xadd存入消息和xread循环阻塞读取消息的方式可以实现简易版的消息队列,交互流程如下
在这里插入图片描述
在这里插入图片描述

10.2 消费组指令

创建消费组的目的:
让组内的多个消费者共同分担读取消息,所以,我们通常会让每个消费者读取部分消息,从而实现消息读取负载在多个消费者间是均衡分布的

XGROUP CREATE  key GROUP ID //创建消费者组,消费者按组创建,id为$时表示从尾部消费,为0时表示从头消费
XREADGROUP GROUP  // 读取消费者组中的消息

XACK  // ack消息,消息被标记为“已处理”
XPENDING key GROUP // 打印待处理消息的详细信息(即已读但未ack确认的消息)

XGROUP SETID  // 设置消费者组最后递送消息的ID
XGROUP DELCONSUMER  // 删除消费者组
XCLAIM  // 转移消息的归属权(长期未被处理/无法处理的消息,转交给其他消费者组进行处理)
XINFO  // 打印Stream\Consumer\Group的详细信息
XINFO GROUPS  // 打印消费者组的详细信息
XINFO STREAM  // 打印Stream的详细信息

XREADGROUP命令中

  • stream中的消息—旦被消费组里的一个消费者读取了,就不能再被该消费组内的其他消费者读取了,即同一个消费组里的消费者不能消费同一条消息。
  • 但不同消费组的消费者可以消费同一条信息。

XPENDING 打印待处理消息的详细信息
在这里插入图片描述

在这里插入图片描述

10.3 ACK机制

基于Stream 实现的消息队列,如何保证消费者在发生故障或宕机再次重启后,仍然可以读取未处理完的消息?

  • Streams 会自动使用内部队列(也称为 PENDING List)留存消费组里每个消费者读取的消息保底措施,直到消费者使用XACK命令通知Streams"消息已经处理完成"。
  • 消费确认增加了消息的可靠性,一般在业务处理完成之后,需要执行XACK命令确认消息已经被消费完成。

在这里插入图片描述

下面抓图所示: consumer2已读取的消息的ID是1659430293537-0
一旦消息1659430293537-0被consumer2处理了
consumer2就可以使用XACK命令通知Streams,然后这条消息就会被删除
在这里插入图片描述
此时回复命令:
XACK mystream groupC 1659430293537-0
表示已确认

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

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

相关文章

HashMap----源码解读

源码分析&#xff1a; public class HashMap<K,V> extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable 在类的开头声明了几个常量&#xff0c;以下是较为重要的&#xff1a; /*** 定义初始容量大小为16*/ static final int DEFAULT_I…

IT运维也有自己的节日 724向日葵IT运维节,三大版本如何选?

“724运维节”&#xff0c;是2016年由开放运维联盟发起倡议&#xff0c;广大运维人员共同投票产生的属于运维人自己的节日。 对于运维人最大的印象&#xff0c;那就是工作都需要7x24小时待命&#xff0c;是名副其实的“日不落骑士”&#xff0c;这也是大家选择724这一天作为运…

STM32中断(NVIC和EXIT)

CM3 内核支持 256 个中断&#xff0c;其中包含了 16 个内核中断和 240个外部中断&#xff0c;并且具有 256 级的可编程中断设置。但STM32 并没有使用CM3内核的全部东西&#xff0c;而是只用了它的一部分。STM32有 76 个中断&#xff0c;包括16 个内核中断和 60 个可屏蔽中断&am…

Spring支持人工智能应用框架-SpringAi

简介 人工智能技术和日益成熟&#xff0c;开发企业级人工智能的应用已成为一个热门的趋势。Spring AI 是一个用于 AI 工程的应用框架&#xff0c;目的是为了简化AI应用的对接、部署、维护和扩展。 SpringAi的灵感来自LangChain和LlamaIndex&#xff0c;但是SpringAi并不是直接…

二进制补码计算

基本知识 原码&#xff08;Sign and Magnitude&#xff09;:原码是一种最简单的表示法&#xff0c;使用符号位和数值位来表示整数。 符号位&#xff1a;最高位是符号位&#xff0c;0表示正数&#xff0c;1表示负数。 数值位&#xff1a;剩下的位表示数值的大小。反码&#xf…

昇思25天学习打卡营第17天|基于MobileNetv2的垃圾分类

今天学习的内容是利用视觉图像技术&#xff0c;来实现垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中。 本章节主要包括8部分内容&#xff1a; 1、实验目的 1、了解熟悉垃圾分类应用…

协程--面试资料收集

用户态线程 用户级线程由应用程序通过线程库实现&#xff0c;所有的线程管理工作都由应用程序负责 (包括进程切换)。在用户级线程中&#xff0c;线程的切换可以再用户态下完成&#xff0c;无需操作系统的干预。用户感受得到用户级线程&#xff0c;但是操作系统却意识不到他们的…

Hvv工具推荐——IWannaGetAll

OA基本上是每次hvv中都会被突破的&#xff0c;基本上也都会爆出各种各样的0day&#xff0c;如果真的0day防不住&#xff0c;那我们必须要把1day、nday做一遍检查。 IWannaGetAll 是一款专门针对主流OA&#xff08;办公自动化&#xff09;系统的漏洞检测和利用工具。 IWannaGe…

C++:组合和继承的区别

组合介绍以及与继承对比 什么是组合 (1)composition&#xff0c;组合&#xff0c;就是在一个class内使用其他多个class的对象作为成员 (2)用class tree做案例讲解 (3)组合也是一种代码复用方法&#xff0c;本质也是结构体包含 #include <iostream> #include <vector…

二四、3d人脸构建

一、下载github项目3dmm_cnn-master https://github.com/anhttran/3dmm_cnn.git 一个使用深度神经网络从单个图像进行 3D 人脸建模的项目,端到端代码,可直接根据图像强度进行 3D 形状和纹理估计;使用回归的 3D 面部模型,从检测到的面部特征点估计头部姿势和表情。…

大模型【Qwen2-7B本地部署(WEB版)】(windows)

大模型系列文章目录 Qwen2-7B本地部署&#xff08;WEB版&#xff09; 前言 大模型是截止2024年上半年最强的AI&#xff0c;Qwen2是刚出来的号称国内最强开源大模型。这是大模型系列的第一篇文章&#xff0c;旨在快速部署看看最近出来的大模型效果怎么样&#xff0c;效果ok的话…

【Pytorch】Conda环境pack打包迁移报错处理

文章目录 Anaconda虚拟环境打包一、源电脑的环境打包1.安装conda-pack工具2.确定环境3.打包环境4.将打包环境拷贝到U盘 二、环境迁移到目标电脑上三、异常处理pip install -e. 导致无法pack→忽略管理的文件已经被删除或者被覆盖→压缩成tar注意 重新激活环境 Anaconda虚拟环境…

PHP红包拓客微信小程序系统源码

&#x1f389;红包狂欢&#xff0c;客源滚滚来&#xff01;红包拓客微信小程序&#xff0c;营销新利器&#x1f680; &#x1f9e7;一、创意红包&#xff0c;吸引眼球 你还在为如何吸引顾客而烦恼吗&#xff1f;红包拓客微信小程序来帮你&#xff01;&#x1f381; 它以创意红…

系统服务综合作业01

题目&#xff1a; 现有主机 node01 和 node02&#xff0c;完成如下需求&#xff1a; 1、在 node01 主机上提供 DNS 和 WEB 服务 2、dns 服务提供本实验所有主机名解析 3、web服务提供 www.rhce.com 虚拟主机 4、该虚拟主机的documentroot目录在 /nfs/rhce 目录 5、该目录由 no…

妙笔生词与文心一言:歌词创作的优势争锋

在当今科技赋能创作的时代&#xff0c;妙笔生词智能写歌词软件和文心一言都在写歌词领域展现出各自独特的魅力。让我们深入探究它们的优势所在&#xff0c;看看谁能更胜一筹。 妙笔生词智能写歌词软件&#xff08;veve522&#xff09;以其专业性和针对性在歌词创作中崭露头角。…

Web3学习路线图,从入门到精通

前面我们聊了Web3的知识图谱&#xff0c;内容是相当的翔实&#xff0c;要从哪里入手可以快速的入门Web3&#xff0c;本篇就带你看看Web3的学习路线图&#xff0c;一步一步深入学习Web3。 这张图展示了Web3学习路线图&#xff0c;涵盖了区块链基础知识、开发方向、应用开发等内…

vue 数据类型

文章目录 ref 创建&#xff1a;基本类型的响应式数据reactive 创建&#xff1a;对象类型的响应式数据ref 创建&#xff1a;对象类型的响应式数据ref 对比 reactive将一个响应式对象中的每一个属性&#xff0c;转换为ref对象(toRefs 与 toRef)computed (根据计算进行修改) ref 创…

【两大3D转换SDK对比】HOOPS Exchange VS. CAD Exchanger

在现代工业和工程设计领域&#xff0c;CAD数据转换工具是确保不同软件系统间数据互通的关键环节。HOOPS Exchange和CAD Exchanger是两款备受关注的工具&#xff0c;它们在功能、支持格式、性能和应用场景等方面有着显著差异。 本文将从背景、支持格式、功能和性能、应用场景等…

程序员学长 | 快速学习一个算法,GAN

本文来源公众号“程序员学长”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;快速学习一个算法&#xff0c;GAN GAN 如何工作&#xff1f; GAN 由两个部分组成&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&…

Windows电脑安装Python结合内网穿透轻松搭建可公网访问私有网盘

文章目录 前言1.本地文件服务器搭建1.1.Python的安装和设置1.2.cpolar的安装和注册 2.本地文件服务器的发布2.1.Cpolar云端设置2.2.Cpolar本地设置 3.公网访问测试4.结语 前言 本文主要介绍如何在Windows系统电脑上使用python这样的简单程序语言&#xff0c;在自己的电脑上搭建…