【Redis学习】Redis10大数据类型

2023-11-02

总体概述

在这里插入图片描述

在这里插入图片描述

这里说的数据类型是value的数据类型,key的类型都是字符串。

redis字符串(String)

string是redis最基本的类型,一个key对应一个Tvalue。

string类型是二进制安全的,意思是redis的string可以包含任何数据,比如jpg图片或者序列化的对象。

string类型是Redis最基本的数据类型,一个redis中字符串value最多可以是512M

redis列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

它的底层实际是个双端链表,最多可以包含2^32- 1个元素(4294967295,每个列表超过40亿个元素)

redis哈希表(Hash)

Redis hash是一个string类型的field(字段)和 value(值)的映射表,hash 特别适合用于存储对象。

Redis中每个hash可以存储2个32-1键值对(40多亿)

redis集合(Set)

Redis的Set是String类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据,集合对象的编码可以是intset或者hashtable。

Redis中Set集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。

集合中最大的成员数为2^32-1(4294967295,每个集合可存储40多亿个成员)

redis有序集合(ZSet、Sorted Set)

Redis zset和 set一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数,redis正是通过分数来为集合中的成员进行从小到大的排序。

zset的成员是唯一的,但分数(score)却可以重复。

zset集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。集合中最大的成员数为2^32-1(40亿)

redis地理空间(GEO)

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

    添加地理位置的坐标。

    获取地理位置的坐标。

    计算两个位置之间的距离。

    根据用户给定的经纬度坐标来获取指定范围内的地理位置集合。

redis基数统计(HyperLogLog)

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

在 Redis里面,每个HyperLogLog键只需要花费12 KB内存,就可以计算接近2^64个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

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

redis位图(Bitmap)

Bit arrays (or simply bitmaps,我们可以称之为位图)

在这里插入图片描述

由0和1状态表现的二进制位的bit数组

redis位域(Bitfield)

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

说白了就是通过bitfield命令我们可以一次性对多个比特位域进行操作。

redis流(Stream)

Redis Stream是 Redis 5.0版本新增加的数据结构。

Redis Stream主要用于消息队列(MQ,Message Queue),Redis本身是有一个Redis 发布订阅(pub/sub)来实现消息队列的功能,但它有个缺点就是消息无法持久化,如果出现网络断开、Redis宕机等,消息就会被丢弃。

简单来说发布订阅(pub/sub)可以分发消息,但无法记录历史消息。

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

命令查阅

官网英文

中文

key操作命令

keys * #查看当前库所有的key
exists key #判断某个key是否存在
type key # 查看key的类型
del key # 删除指定的key数据
unlink key #非阻塞删除,仅仅将keys从keyspace元数据中删除,真正的删除会在后续异步中操作。
ttl key # time to live,查看还有多少秒过期,-1表示永不过期,-2表示已过期
expire key <秒钟> # 为给定的key设置过期时间
move key dbindex【0-15】 # 将当前数据库的key移动到给定的数据库db当中
select dbindex【0-15】# 切换数据库【0-15】,默认为0
dbsize # 查看当前数据库key的数量
flushdb # 清空当前库
flushall # 通杀全部库(慎用!!!)

大小写和帮助命令

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

帮助命令,help @类型

help @string

help @list

help @hash

help @hyperloglog

string

最常用

set key value

在这里插入图片描述

get key # 获取值
mset k1 v1 k2 v2 [...] && mget k1 k2 [...]  # 同时设置/获取多个键值
msetnx k1 v1 k2 v2 [...] # 如果有一个键已存在,则整条命令执行失败(事务的原子性)
getrange k1 start end # 获取指定区间范围内的值,相当于java中的substring方法,获取范围是闭区间[start,end]
# 数值增减(要求value必须能转换成整数)
incr k1 #每执行一次,k1 的值增加1
incrby k1 increment # 每执行一次,k1 的值增加increment
decr k1 # 每执行一次,k1 的值减少1
decrby k1 decrement # 每执行一次,k1 的值减少decrement
# 获取字符串长度和内容追加
strlen k1 # 获取k1的值的长度
append k1 value # 向k1的末尾追加字符串value
# getset(先get再set)
getset k1 value # 返回k1的值,然后将k1 的值设置为value

应用场景:短视频、公众号文章点赞

list

简单说明

list是一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景left、right都可以插入添加;

如果键不存在,创建新的链表;如果键已存在,新增内容;

如果值全移除,对应的键也就消失了。

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

在这里插入图片描述

lpush/rpush/lrange # 从左压入、从右压入、从左遍历
lpop/rpop # 从左弹出、从右弹出
lindex # 按照索引下标获得元素(从上到下)
llen # 获取列表中元素的个数
lrem key 数字N 给定值v1 # 删除N个值等于v1的元素
ltrim key开始index 结束index # 截取指定范围的值后再赋值给key,类似string的substring截取字串方法
rpoplpush 源列表 目的列表 # 将源列表最后一个元素取出,插入目标列表的头部
lset key index value # 将列表的索引为index的元素设置为value
linsert key before/after 已有值 插入的新值 # 在已有值的前/后插入新的值

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

hash

说明

hash的kv模式不变,但v是一个键值对(此时k相当于哈希表的名称)

类似Java中的Map<String,Map<String,String>>类型。

hset/hget/hmset/hmget/hgetall/hdel # 设置、获取、多项设置、多项获取、获取全部、删除
hlen # 获取某个key内的全部数量
hexists key # 判断某个key是否存在
hkeys/hvals # 获取全部的key/value
hincrby/hincrbyfloat # 增加(整形/浮点型)
hsetnx # 不存在时设置

应用场景:中小型系统购物车设计

set

SADD key member [member ...] # 添加元素
SMEMBERS key # 遍历集合中的所有元素
SISMEMBER key member # 判断元素是否在集合中
SREM key member [member ...] # 删除元素
SCARD # 获取集合里面的元素个数,cardinary基数
SRANDMEMBER key [数字] # 从集合中随机展现设置的数字个数元素,元素不删除
SPOP key [数字] # 从集合中随机弹出一个元素,出一个删一个
SMOVE key1 key2 member # 将key1里已存在的某个值member赋给key2
# 集合运算
SDIFF key member [member ...] # 求差集
SUNION key member [member ...] # 求并集
SINTER key member [member ...] # 求交集
SINTERCARD numkeys key [key ...][LIMIT limit] # redis7新命令,它不返回结果集,而只返回结果的基数。返回由所有给定集合的交集产生的集合的基数

应用场景:微信抽奖小程序、微信朋友圈点赞查看同赞朋友、QQ内推可能认识的人。

zset

说明

在set基础上,每个val值前加一个score分数值。之前set是k1 v1 v2 v3,现在zset是k1 (score1 v1) (score2 v2)

为了命令设计得简便,Sorted Set别名为ZSet,这样可以使用Z为首字母的一系列命令。

# 向有序集合中加入一个元素和该元素的分数
ZADD key score member [score member ...] # 添加元素,每一组score和member为一个对象
ZRANGE key start stop [WITHSCORES] # 按照元素分数从小到大的顺序,返回索引从start到stop之间的所有元素
ZREVRANGE # 逆序,即reversal range
ZRANGEBYSCORE key min max [WITHSCORES][LIMIT offset count] # 获取指定分数范围的元素,withscores,"("表示不包含,添加在min或max的左侧,limit作用是返回限制
ZSCORE key member # 获取元素的分数
ZCARD key # 获取集合中元素的数量
ZREM key member # 删除元素
ZINCRBY key increment member # 增加某个元素的分数
ZCOUNT key min max # 获得指定分数范围内的元素个数
ZMPOP numkeys key [key ...] MIN|MAX [COUNT count] # 从键名列表中的第一个非空排序集中弹出一个或多个元素,它们是成员-分数对
ZRANK key values值 # 获得下标值
ZREVRANK key values值 # 逆序获得下标值

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

bitmap

定义

由0和1状态表示的二进制位的bit数组。

说明

在这里插入图片描述

用String类型作为底层数据结构实现的一种统计二值状态的数据类型。

位图本质是数组,它是基于String数据类型的按位的操作。该数组由多个二进制位组成,每个二进制位都对应一个偏移量(我们称之为一个索引)。

Bitmap支持的最大位数是2个32位,它可以极大的节约存储空间,使用512M内存就可以存储多达42.9亿的字节信息(2^32 = 4294967296)

用途

用于状态统计,Y/N,类似AtomicBoolean。

SETBIT key offset val # 给指定key的第offset位赋值val 
GETBIT key offset # 获取指定key的第offset位
BITCOUNT key [start end] # 返回指定key中[start,end]中为1的数量,默认为全部范围
STRLEN key # 返回key的长度(Byte为单位)
BITOP operation destkey key # 对不同的二进制存储数据进行位运算(AND、OR、NOT、XOR)

val的值只能是0或1;
Bitmap的偏移量是从0开始计算的,这和数组索引一致。

应用场景

一年365天,全年天天登陆占用多少字节?

  • 按年去存储一个用户的签到情况,365天只需要365/8 ≈ 46 Byte,1000W用户量一年也只需要 440 MB就足够了。

  • 假如是亿级的系统,每天使用1个1亿位的Bitmap约占12MB的内存(10个8/8/1024/1024),10天的Bitmap的内存开销约为120MB,内存压力不算太高。

  • 此外,在实际使用时,最好对Bitmap设置过期时间,让Redis自动删除不再需要的签到记录,以节省内存开销。

Hyperloglog

说明

Redis 在2.8.9版本添加了HyperLogLog结构。

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

在Redis 里面,每个HyperLogLog键只需要花费12KB内存,就可以计算接近2*64个不同元素的基数,这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。

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

HyperLogLog相当于是给Set提供了一个辅助的统计功能。

基数统计

去重复统计功能的基数估计算法-就是HyperLogLog。

基数是一种数据集,表示一个集合去重复后的元素真实个数,基数统计用于统计一个集合中不重复的元素个数,就是对集合去重复后剩余元素的计算。

即去重"脱水"后的真实数据。

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

应用场景

UV统计

什么是UV:Unique Visitor,独立访客,一般理解为客户端IP,需要去重考虑

用户搜索网站关键词的数量,统计用户每天搜索不同词条个数

天猫网站首页亿级uv的Redis统计方案。

GEO

geo本质上是一个zset(有序集合)。

GEOADD key 经度(longitude)、纬度(Iatitude)、位置名称(member) [...] # 将位置(经度和纬度)和名称添加到指定的key中
GEOPOS key member # 从键里面返回所有给定位置元素的位置(经度和纬度)
GEODIST key member1 member2 [M|KM] # 返回两个给定位置之间的距离,可指定距离单位。
GEORADIUS key longitude latitude radius M|KM # 以给定的经纬度为中心,返回与中心的距离不超过给定最大距离的所有位置元素。
GEORADIUSBYMEMBER key memeber radius M|KM # 跟GEORADIUS类似
GEOHASH key member [...] # 返回一个或多个位置元素的Geohash表示(二维转一维)

如何处理中文乱码问题

redis-cli -a 123456 --raw

raw参数表示get key 时显示原始数据,不会转换成十六进制的转义字符。

Stream

介绍

redis5.0之前的痛点:

  • redis消息队列的两种方案

    1. List 实现消息队列 —— List实现方式其实就是点对点的模式

    2. (Pub/Sub)

Redis5.0版本新增了一个更强大的数据结构——Stream

Stream可以理解为Redis版的MQ消息中间件+阻塞队列。

功能

实现消息队列,它支持消息的持久化、支持自动生成全局唯一ID、支持ack确认消感的模式、支持消费组模式等,让消息队列更加的稳定和可靠。

底层结构和原理说明

在这里插入图片描述

在这里插入图片描述

队列相关指令

XADD key *|id field value [...]  # 添加消息到队列末尾,消息的值为JSON格式,*表示系统默认分配id
XTRIM key MAXLEN | MINID # 限制Stream的长度,如果已经超长会进行截取,maxlen表示从头开始截取限定长度,MINID表示从指定id开始截取到Stream末尾
XDEL # 删除消息
XLEN # 获取Stream中的消息长度
XRANGE # 获取消息列表(可以指定范围),忽略删除的消息
XREVRANGE # 和XRANGE相比区别在于反向获取,ID从大到小
XREAD [COUNT count] [BLOCK 毫秒数] STREAMS key... id... # 获取消息(阻塞/非阻塞),返回大于指定ID的消息

Stream和list的对比

在这里插入图片描述

消费组相关指令

XGROUP CREATE # 用于创建消费者组
XREADGROUP GROUP # ">" 表示从第一条尚未被消费的消息开始读取,消费组groupA内的消费者consumer1从mystream消息队列中读取;不同消费组的消费者可以消费同一条消息(消费组间的指针相互独立);消费组的目的是为了隔离不同的消费者
XPENDING # 查询每个消费组内所有消费者「已读取、但尚未确认」的消息;查看某个消费者具体读取了哪些数据
XACK # 向消息队列确认消息处理已完成
XINFO # 用于打印stream\Consumer\Group的详细信息

在这里插入图片描述

使用建议

Stream还是不能100%等价于Kafka、RagbitMQ来使用的,生产案例少,慎用。

bitfield

了解即可

介绍

BITFIELD命令可以将一个Redis字符串看作是一个由二进制位组成的数组,并对这个数组中任意偏移进行访问。可以使用该命令对一个有符号的5位整型数的第1,2,3,4位设置指定值,也可以对一个31位无符号整型数的第4,5,6,7位进行取值。类似地,本命令可以对指定的整数进行自增和自减操作,可配置的上溢和下溢处理操作。

用途

BITFIELD命令的作用在于它能够将很多小的整数储存到一个长度较大的位图中,又或者将一个非常庞大的键分割为多个较小的键来进行储存,从而非常高效地使用内存,使得 Redis 能够得到更多不同的应用——特别是在实时分析领域:BITFIELD能够以指定的方式对计算溢出进行控制的能力,使得它可以被应用于这一领域。

hello 等价于 0110100001100101011011000110110001101111

将一个Redis字符串看作是一个由二进制位组成的数组,并能对变长位宽和任意没有字节对齐的指定整型位域进行寻址和修改。

在这里插入图片描述

命令

BITFIELD key [GET type offset] # type中 i8表示有符号8位,u4表示无符号4位
BITFIELD key [SET type offset value]
BITFIELD key [INCRBY type offset increment] # 默认情况下,INCRBY使用WRAP参数
# 益出控制OVERFLOW [WRAP|SAT|FAIL] :
# WRAP:使用回绕(wrap around)方法处理有符号整数和无符号整数的溢出情况(取模)
# SAT:使用饱和计算(saturation arithmetic)方法处理溢出,下溢计算的结果为最小的整数值,而上溢计算的结果为最大的整数值(i8最小为-128,最大为127)
# FAIL:命令将拒绝执行那些会导致上溢或者下溢情况出现的计算,并向用户返回空值表示计算未被执行(nil)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Redis学习】Redis10大数据类型 的相关文章

  • 如何在实时添加对象时从 Redis 中弹出对象?

    我想让 Node js 进程运行 因为它正在检查 Redis 服务器是否有任何新的弹出内容 另一个进程将偶尔进行推送 而 Node 进程将尝试弹出任何进来的内容 Node 进程将保持运行 有人能给我指出一个好的方向吗 我正在尝试找出如何监听
  • 如何在redis中创建自己的数据库?

    There are 0 to 15 databases in redis 我想使用 redis cli 创建自己的数据库 有什么命令可以实现吗 Redis 数据库并不等同于 MySQL 等 DBMS 中的数据库名称 这是一种为键创建隔离和命
  • Redis 块推送直到列表有空位

    我正在寻找类似的东西BLPUSH该命令将阻塞 直到列表的长度低于指定值max size 目的是防止生产者运行速度快于消费者时列表无限增长 功能与 python 非常相似Queue put https docs python org 3 li
  • 为什么Redis中不建议使用KEYS?

    在Redis中 建议不要使用按键命令 https redis io commands KEYS 为什么会这样呢 是因为它的时间复杂度是 O N 吗 或者是别的什么原因 我做了下面的实验来证明KEYS命令有多么危险 当带有 KEYS 的一个命
  • 如何在节点redis客户端上设置读取超时?

    在 github 上我没有看到读取超时的选项 https github com NodeRedis node redis https github com NodeRedis node redis There s connect timeo
  • 如何统计 Redis 流中未读或已确认的消息?

    使用 Redis 5 0 3 假设我们创建一个名为streamy和一个消费群体consumers XGROUP CREATE streamy consumers MKSTREAM 然后向其中添加一些消息 XADD streamy messa
  • Redis hash写入速度非常慢

    我面临一个非常奇怪的问题 使用 Redis 时 我的写入速度非常糟糕 在理想的情况下 写入速度应该接近 RAM 上的写入速度 这是我的基准 package redisbenchmark import redis clients jedis
  • Spring Data Redis - Lettuce连接池设置

    尝试在 spring data redis 环境中设置 Lettuce 连接池 下面是代码 Bean LettuceConnectionFactory redisConnectionFactory GenericObjectPoolConf
  • Spring Data Redis JedisConnectionException:流意外结束

    雷迪斯3 0 5Spring数据Redis 1 3 6绝地武士2 6 3 我们的 Web 应用程序通过 pub sub 从 Redis 接收数据 还以键 值对的形式在 Redis 上执行数据读 写 读 写发生在监听线程 独立监控线程和htt
  • Caffeine Expiry 中如何设置多个过期标准?

    我正在使用 Caffeine v2 8 5 我想创建一个具有可变到期时间的缓存 基于 值的创建 更新以及 该值的最后一次访问 读取 无论先发生什么都应该触发该条目的删除 缓存将成为三层值解析的一部分 The key is present i
  • 通过 StackExchange.Redis 连接到 Redis Servier

    我尝试使用以下方法制作一个测试项目Redis https redis io服务器 通过 Virtual Box 安装在 Linux Ubuntu 虚拟机上 Linux 机器通过 Virtual Box 的桥接适配器与本地网络连接 Virtu
  • SignalR 无法连接到 SSL 上的 Azure Redis

    我目前在 Azure 上托管我的 redis 缓存服务器 并让 signalR 依赖它作为骨干 使用以下内容 GlobalHost DependencyResolver UseRedis 服务器 端口 密码 eventKey 这可以在端口
  • 使用 Redis 命令 incr 和 expire 时的竞争条件

    根据redis文档 http redis io commands incr http redis io commands incr 在段落模式 速率限制器 2 较短的版本代码 value INCR ip IF value 1 THEN EX
  • Redis Docker compose无法处理RDB格式版本10

    我无法在 docker compose 文件中启动 redis 容器 我知道docker compose文件没问题 因为我的同事可以成功启动项目 我读到有一个删除 dump rdb 文件的解决方案 但我找不到它 我使用Windows机器 任
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • 如何使 Redis 缓存中数据层次结构(树)的部分内容无效

    我有一些产品数据 需要在 Redis 缓存中存储多个版本 数据由 JSON 序列化对象组成 获取普通 基本 数据的过程很昂贵 将其定制为不同版本的过程也很昂贵 因此我想缓存所有版本以尽可能进行优化 数据结构看起来像这样 BaseProduc
  • 想要在后台不间断地运行redis-server

    我已经下载了 redis 2 6 16 tar gz 文件并安装成功 安装后我运行 src redis server 它工作正常 但我不想每次都手动运行 src redis server 而是希望 redis server 作为后台进程持续
  • Scala 使用的 Redis 客户端库建议

    我正在计划使用 Scala 中的 Redis 实例进行一些工作 并正在寻找有关使用哪些客户端库的建议 理想情况下 如果存在一个好的库 我希望有一个为 Scala 而不是 Java 设计的库 但如果现在这是更好的方法 那么仅使用 Java 客

随机推荐

  • C语言程序设计(谭浩强第五版)——例题

    C语言程序设计 谭浩强第五版 例题 第1章 程序设计和C语言 第2章 算法 程序的灵魂 第3章 最简单的C程序设计 顺序程序设计 第4章 选择结构程序设计 第5章 循环结构程序设计 第6章 利用数组处理批量数据 第7章 用函数实现模块化程序
  • 【算法基础】基于pytorch的BP神经网络算法代码+数据集

    实现功能 1 数据回归 基于多输入单输出数据集 2 代码最后使用matplotlib绘制了 训练次数 loss值 折线图进行训练结果展示 注 1 代码亲测可成功运行 2 以下代码通过cuda调用GPU训练 如果cuda报错则需检查GPU训练
  • python基础学习06_if条件判断(多重判断、嵌套、三目运算)

    一 条件语句 条件成立执行某些代码 条件不成立执行哪些代码 二 IF 条件判断 IF简单条件判断 多重判断 IF嵌套 三目运算符 1 if 简单条件判断 if if True print 条件成 执 的代码1 print 条件成 执 的代码
  • 微信小程序开发记录(一)弹出框和模态框介绍

    弹出框和模态框的简介和使用方法如下
  • k8s踩坑2——scheduler 、controller-manager Unhealthy

    查看master组件状态时出现错误 root k8s master kubectl get cs Warning v1 ComponentStatus is deprecated in v1 19 NAME STATUS MESSAGE E
  • ActiveMQ Redelivery Policy(消息重发策略)

    官方文档 http activemq apache org redelivery policy html 在事务控制里抛出异常 txManager会进行rollback处理 在activeMQ里 消息默认会redelivery到客户端6次
  • 教你用Mock实现复杂登陆接口下如何优雅的获取Token

    哈喽大家好 我是阿Q 背景 今天又双叒叕被抓壮丁了 被安排进了新的项目组进行任务开发 加入新项目后的第一件事 当然是先研究下同事的代码喽 在 学习 代码的过程中竟然惊奇的发现同事写了测试用例 对于一直使用PostMan来进行接口测试的我表示
  • MultipartFile中transferTo(File file)的路径问题

    今天看到layui的文件上传的控件 就尝试了一下 简单创建了一个SpringMVC项目 记得在配置文件中注入以下Bean
  • Pytorch 多GPU训练

    Pytorch 多GPU训练 目录 Pytorch 多GPU训练 1 导入库 2 指定GPU 2 1 单GPU声明 2 2 多GPU声明 3 数据放到GPU 4 把模型网络放到GPU 重要 torch nn DataParallel DP
  • Winform控件

    Winform控件 button 单选框 多选框 文本框 标签 显示图片控件 进度条属性 Halcon图片在PictureBox控件中显示 添加Halcon的引用 编写的代码如下 在PictureBox中显示图像变量HObject 先将之前
  • Android中关闭Activity

    1 知晓当前是哪个Activity 2 随时关闭所有Activity 有时我们可能会打开了很多个Activity 突然来个这样的需求 在某个页面可以关掉所有的Activity并退出程序 好吧 下面提供一个关闭所有Activity的方法 就是
  • 数据结构——堆

    堆的定义 如果有n个元素的序列 k0 k1 k2 kn 1 kn 当且仅当满足关系ki k2i且ki k2i 1 或 ki k2i且ki k2i 1 i 1 2 n 2 将满足ki k2i且ki k2i 1关系的堆称为小堆 将满足ki k2
  • Scratch模块介绍——运动(15个程序块3个数据块)

    今天 我给大家带来scratch的运动模块介绍 运动模块包含15个可执行程序块以及3个数据模块 首先 先介绍一下scratch Scratch是麻省理工学院开发的一款简易图形化编程工具 这个软件的开发团队称为 终身幼儿园团队 Lifelon
  • JavaScript 实现 reduce() 方法函数

    更新 增加递归实现的方法 更新 重构非递归实现的方法 思路 与之前两篇文章 map 的实现 filter 的实现 中的迭代方法不一样 reduce 是归并方法 reduce 接收两个参数 第一个参数是在每一项上调用的函数 该函数接收 4 个
  • QT 多国语言详细步骤

    在网上看了很多qt多国语言的实现 总感觉不够详细 因此写一篇记录下 希望对新手有用 在 Pro文档中加入需要国际化转化的语言 TRANSLATIONS English ts Chinese ts 点击更新翻译 lupdate 在你的目录文档
  • 矩阵的迹及其性质

    目录 定义 性质 定义 设 A a i j
  • java开发安卓app教程

    前言 redis简单来说 就是一个数据库 不过与传统数据库不同的是 redis 的数据是存在内存中的 所以存写速度非常快 因此 redis 被广泛应用于缓存方向 另外 redis 也经常用来做分布式锁 redis 提供了多种数据类型来支持不
  • 实习的“黄金圈法则”,你了解多少?

    美国的西蒙 斯内克 是国际著名演讲家 微软 好莱坞等机构领导力顾问 他挖掘出的那些优秀领导者和企业成功的底层逻辑 被称为黄金圈法则 黄金圈法则揭示了伟大的领袖是如何激励和影响人们的行为的 运用这个法则 无论个人 组织还是企业 都将获得极大的
  • 聚簇索引,二级索引与联合索引的概念

    1 聚簇索引 聚簇索引并不是一种单独的索引结构 而是一种数据类型 用户所有的记录全部被存放到了b 树中的叶子节点 所谓索引即数据 数据即索引 聚集索引存储的数据结构为b 树 也就是说表被创建后 在磁盘里默认生成的就是b 树的结构 B 树分为
  • 【Redis学习】Redis10大数据类型

    总体概述 这里说的数据类型是value的数据类型 key的类型都是字符串 redis字符串 String string是redis最基本的类型 一个key对应一个Tvalue string类型是二进制安全的 意思是redis的string可