Redis 字符串操作实战(全)
目录
SET 存入键值对
SETNX
SETEX
SETBIT
SETRANGE
MSET 批量存入键值对
MSETNX
PSETEX
BITCOUNT 计算值中1的数量
BITOP 与或非异或操作
DECR 减1
DECRBY
APPEND 追加
INCR 自增
INCRBY
INCRBYFLOAT
GET 取值
GETBIT
GETRANGE
GETSET 取旧值赋新值
MGET 批量取值
STRLEN 计算值的长度
SET 存入键值对
SET key value [EX seconds | PX milliseconds | EXAT timestamp | PXAT milliseconds-timestamp | KEEPTTL ] [NX|XX]
- EX seconds: 设置键的过期时间为 second 秒。 SET key value EX second 效果等同于 SETEX key second value
- PX milliseconds: 设置键的过期时间为 millisecond 毫秒。 SET key value PX millisecond 效果等同于 PSETEX key millisecond value
- EXAT timestamp:指定过期时间为Unix时间,单位是秒
- PXAT milliseconds-timestamp:指定过期时间为Unix时间,单位是毫秒
- KEETTTL:保存ttl时间
- NX: 只在键不存在时,才对键进行设置操作,常用于添加。 SET key value NX 效果等同于 SETNX key value
- XX: 只在键已经存在时,才对键进行设置操作,常用于更新
存入字符串键值对
如果 key 已经持有其他值, set 就覆写旧值,无视类型。
对于某个原本带有生存时间(TTL)的键来说, 当 set 命令成功在这个键上执行时, 这个键原有的 TTL 将被清除。
127.0.0.1:6379> set time '2023-09-14'
OK
127.0.0.1:6379> get time
"2023-09-14"
# 设置过期时间EX 5 单位是秒
127.0.0.1:6379> set time '2023-09-14' EX 5
OK
127.0.0.1:6379> get time
"2023-09-14"
# 过5秒之后time已过期,获取不到
127.0.0.1:6379> get time
(nil)
# 设置过期时间PX 5000 单位是毫秒
127.0.0.1:6379> set time '2023-09-14' PX 5000
OK
127.0.0.1:6379> get time
"2023-09-14"
# 过5000毫秒之后time已过期,获取不到
127.0.0.1:6379> get time
(nil)
127.0.0.1:6379> set time '2023-09-14' NX
OK
# NX:key为time已存在,设置失败
127.0.0.1:6379> set time '2023-09-14' NX
(nil)
# XX:key为time已存在,设置成功
127.0.0.1:6379> set time '2023-09-14' XX
OK
# XX:key为time1不存在,设置失败
127.0.0.1:6379> set time1 '2023-09-14' XX
(nil)
时间复杂度为O(1)。
SET 成功时才返回OK。
SETNX
SETNX key value(set if not exists的简写):将 key 的值设为 value ,当且仅当 key 不存在。若给定的 key 已经存在,则 SETNX 不做任何动作。
127.0.0.1:6379> set name lisi
OK
127.0.0.1:6379> setnx name zhangsan
(integer) 0
127.0.0.1:6379> set name zhangxan nx
(nil)
127.0.0.1:6379> get name
"lisi"
时间复杂度为O(1)。成功返回OK,否则返回0。
SETEX
SETEX key seconds value:将值 value 关联到 key ,并将 key 的生存时间设为 seconds (以秒为单位)。如果 key 已经存在, SETEX 命令将覆写旧值。
该命令相当于以下两条命令 set key value; expire key seconds; 两条命令。
SET key value
EXPIRE key seconds # 设置生存时间
不同的是,SETEX是一个原子操作。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> setex name 10 xxian
OK
127.0.0.1:6379> get name
"xxian"
127.0.0.1:6379> get name
(nil)
时间复杂度为O(1)。
成功返回OK,seconds不合法时,报错ERR value is not an integer or out of range。
SETBIT
SETBIT key offset value:对 key 所储存的字符串值,设置或清除指定偏移量上的位(bit)。
位的设置或清除取决于 value 参数,可以是 0 也可以是 1 。key不存在时生一个新的字符串值。
字符串会进行伸展(grown)以确保它可以将 value 保存在指定的偏移量上。当字符串值进行伸展时,空白位置以 0 填充。
offset 参数必须大于或等于 0 ,小于 2^32 (bit 映射被限制在 512 MB 之内)。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> setbit bit 1 1
(integer) 0
127.0.0.1:6379> setbit bit 3 1
(integer) 0
127.0.0.1:6379> setbit bit 5 1
(integer) 0
127.0.0.1:6379> setbit bit 7 0
(integer) 0
127.0.0.1:6379> setbit bit 9 0
(integer) 0
127.0.0.1:6379> getbit bit 1
(integer) 1
127.0.0.1:6379> getbit bit 7
(integer) 0
127.0.0.1:6379> getbit bit 2
(integer) 0
时间复杂度为O(1)。
成功返回0,offset有错或value有错时报错。
SETRANGE
SETRANGE key offset value:用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始。不存在的 key 当作空白字符串处理。
MSET 批量存入键值对
MSET key value [key value ...]:批量存储字符串键值对(同时设置一个或多个 key-value 对),如果某个给定 key 已经存在,那么mset会用新值覆盖原来的旧值。
127.0.0.1:6379> mset name 'xxjava' age 25 address '贵州'
OK
127.0.0.1:6379> mget name age address
1) "xxjava"
2) "25"
3) "\xe8\xb4\xb5\xe5\xb7\x9e"
注:mset 是一个原子性(atomic)操作,所有给定 key 都会在同一时间内被设置,某些给定 key 被更新而另一些给定 key 没有改变的情况,不可能发生。
时间复杂度为O(N), N 为要设置的 key 数量。
MSET 不可能失败,所以总是返回OK。
MSETNX
MSETNX key value [key value ...]:同时设置一个或多个 key-value 对,当且仅当所有给定 key 都不存在。
即使只有一个给定 key 已存在, MSETNX 也会拒绝执行所有给定 key 的设置操作。(MSETNX是原子性)
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> msetnx a 1 b 2 c 3 d 4
(integer) 1
127.0.0.1:6379> mget a b c d
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> msetnx a 1 e 5 f 6 g 7
(integer) 0
# 不成功是因为key为a 的已经厦
时间复杂度O(N),N为KEY的数量。
成功返回1,否则返回0(至少有一个key已经存在)。
PSETEX
PSETEX key milliseconds value:与 SETEX 命令相似。
不同之处
- SETEX是以秒为单位设置 key 的生存时间
- PSETEX是以毫秒为单位设置 key 的生存时间
BITCOUNT 计算值中1的数量
BITCOUNT key [start] [end]:计算给定字符串中,被设置为 1 的比特位的数量。
一般情况下,给定的整个字符串都会被进行计数,通过指定额外的 start 或 end 参数,可以让计数只在特定的位上进行。
start 和 end 可以是负数::比如 -1 表示最后一个位,而 -2 表示倒数第二个位,以此类推。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> setbit bit 1 1
(integer) 0
127.0.0.1:6379> setbit bit 3 1
(integer) 0
127.0.0.1:6379> setbit bit 5 1
(integer) 0
127.0.0.1:6379> setbit bit 7 0
(integer) 0
127.0.0.1:6379> setbit bit 9 0
(integer) 0
127.0.0.1:6379> getbit bit 1
(integer) 1
127.0.0.1:6379> getbit bit 7
(integer) 0
127.0.0.1:6379> getbit bit 2
(integer) 0
127.0.0.1:6379> bitcount bit
(integer) 3
时间复杂度为O(N)。
返回被设置为1的数量。
BITOP 与或非异或操作
BITOP operation destkey key [key ...]:对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。
有四种操作:
- AND: BITOP AND destkey key [key ...] ,对一个或多个 key 求逻辑并,并将结果保存到 destkey 。
- OR:BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey。
- XOR:BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。
- NOT:BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey。
注:多key的情况,短的key补0,空key全补0。
求逻辑并 AND操作 和 求逻辑或 OR 操作:
127.0.0.1:6379> flushdb
OK# 设置xx1为1100
127.0.0.1:6379> setbit xx1 0 1
(integer) 0
127.0.0.1:6379> setbit xx1 1 1
(integer) 0# 设置xx2为0011
127.0.0.1:6379> setbit xx2 2 1
(integer) 0
127.0.0.1:6379> setbit xx2 3 1
(integer) 0# and 求逻辑并 xx1 and xx2 = 1100 and 0011 = 0000
127.0.0.1:6379> bitop and destkey xx1 xx2
(integer) 1
127.0.0.1:6379> getbit destkey 0
(integer) 0
127.0.0.1:6379> getbit destkey 1
(integer) 0
127.0.0.1:6379> getbit destkey 2
(integer) 0
127.0.0.1:6379>
127.0.0.1:6379> getbit destkey 3
(integer) 0# or 求逻辑或 xx1 or xx2 = 1100 or 0011 = 1111
127.0.0.1:6379> bitop or destkey xx1 xx2
(integer) 1
127.0.0.1:6379> getbit destkey 0
(integer) 1
127.0.0.1:6379> getbit destkey 1
(integer) 1
127.0.0.1:6379> getbit destkey 2
(integer) 1
127.0.0.1:6379> getbit destkey 3
(integer) 1
求逻辑异或 XOR操作 和 求逻辑非 NOT 操作
127.0.0.1:6379> flushdb
OK# 设置k1 为1001
127.0.0.1:6379> setbit k1 0 1
(integer) 0
127.0.0.1:6379> setbit k1 1 0
(integer) 0
127.0.0.1:6379> setbit k1 2 0
(integer) 0
127.0.0.1:6379> setbit k1 3 1
(integer) 0# 设置k2 为0011
127.0.0.1:6379> setbit k2 0 0
(integer) 0
127.0.0.1:6379> setbit k2 1 0
(integer) 0
127.0.0.1:6379> setbit k2 2 1
(integer) 0
127.0.0.1:6379> setbit k2 3 1
(integer) 0# XOR 求逻辑异或 k1 xor k2 = 1001 xor 0011 = 1010
127.0.0.1:6379> bitop xor destkey k1 k2
(integer) 1
127.0.0.1:6379> getbit destkey 0
(integer) 1
127.0.0.1:6379> getbit destkey 1
(integer) 0
127.0.0.1:6379> getbit destkey 2
(integer) 1
127.0.0.1:6379> getbit destkey 3
(integer) 0# 对 k1 求逻辑非 not 1001 = 0110
127.0.0.1:6379> bitop not destkey k1
(integer) 1
127.0.0.1:6379> getbit destkey 0
(integer) 0
127.0.0.1:6379> getbit destkey 1
(integer) 1
127.0.0.1:6379> getbit destkey 2
(integer) 1
127.0.0.1:6379> getbit destkey 3
(integer) 0
时间复杂度为O(N),N为max(len(k1), len(k2))的值。
返回到destkey中。
DECR 减1
DECR key:将 key 中储存的数字值减一。
- 如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 DECR 操作。
- 若值不为数字类型,则返回错误。
- 本操作的值限制在 64 位(bit)有符号数字表示之内。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> decr age
(integer) 99
127.0.0.1:6379> get age
"99"# key不存在
127.0.0.1:6379> decr name
(integer) -1# key不为数字
127.0.0.1:6379> set name 'cxian'
OK
127.0.0.1:6379> decr name
(error) ERR value is not an integer or out of range
时间复杂度为O(1)。
返回执行命令DECR后的值。
当值不为数字则报错。
DECRBY
DECRBY key decrement:将 key 所储存的值减去减量 decrement 。
- 若key不存在,则新给key赋值为0,然后再执行DECRBY操作
- 若key的值不为数字,则返回错误;
- 本操作的值限制在 64 位(bit)有符号数字表示之内。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> DECRBY age 30
(integer) 70# key不存在
127.0.0.1:6379> DECRBY name 30
(integer) -30
127.0.0.1:6379> set name 'cxian'
OK# key不为数字
127.0.0.1:6379> DECRBY name 30
(error) ERR value is not an integer or out of range
127.0.0.1:6379>
时间复杂度为O(1)。返回执行命令DECRBY后的值。当值不为数字则报错。
APPEND 追加
APPEND key value:如果 key 已经存在并且是一个字符串,APPEND 命令将 value 追加到 key 原来的值的末尾;如果 key 不存在,APPEND 就简单地将给定 key 设为 value ,就像执行 SET key value 一样。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379> set name 'xiao'
OK
127.0.0.1:6379> APPEND name ' xian'
(integer) 9
127.0.0.1:6379> get name
"xiao xian"
时间复杂度为O(1)。
返回追加后字符串的长度。
相关命令:
- STRLEN key: 输出key的值的长度
- GETRANGE key start end: 返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
- SETRANGE key offset value: 用 value 参数覆写(overwrite)给定 key 所储存的字符串值,从偏移量 offset 开始
INCR 自增
INCR key:将 key 中储存的数字值增一。
- 若key不存在,则新给key赋值为0,然后再执行 INCR 操作
- 若key的值不为数字,则返回错误
- 本操作的值限制在 64 位(bit)有符号数字表示之内。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> keys *
(empty array)# key不存在
127.0.0.1:6379> incr age
(integer) 1# key存在
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> incr age
(integer) 101
时间复杂度为O(1)。
返回INCR命令后key的值。
INCRBY
INCRBY key increment:所DECR相似,不同在于DECRBY是减,而INCRBY是相加。
INCRBYFLOAT
INCRBYFLOAT key increment:对key 对应的值转为浮点数加上浮点数增量 increment。
- 如果 key 不存在,那么 INCRBYFLOAT 会先给 key 赋值为0 ,再执行加法操作。
- 如果命令执行成功,那么 key 的值会被更新为(执行加法之后的)新值,并且新值会以字符串的形式返回给调用者。
- key的值和increment都可以用指数符号形式表示(如2.0e7 、 3e5 、 90e-2等)
127.0.0.1:6379> flushdb
OK
# key不存在
127.0.0.1:6379> incrbyfloat age 2.55
"2.55"# key存在
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> incrbyfloat age 2.55
"102.55"# key的值不为数字类型
127.0.0.1:6379> set name 'cxian'
OK
127.0.0.1:6379> incrbyfloat name 2.55
(error) ERR value is not a valid float
时间复试度O(1)。
返回执行INCRBYFLOAT命令后的值。
GET 取值
GET key:返回 key 所关联的字符串值。
- key 不存在,返回nil
- key 的值不为字符串,返回一个错误(GET只处理字符串)
127.0.0.1:6379> flushdb
OK# key不存在
127.0.0.1:6379> get age
(nil)
127.0.0.1:6379> set age '100'
OK
127.0.0.1:6379> get age
"100"# key对应的值不为字符串get报错
127.0.0.1:6379> lpush fruits apple banana orange
(integer) 3
127.0.0.1:6379> get fruits
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度O(1)。
返回key对应的值。
GETBIT
GETBIT key offset:对 key 所储存的字符串值,获取指定偏移量上的位(bit)。
- 当 offset 比字符串值的长度大,或者 key 不存在时,返回 0
127.0.0.1:6379> flushdb
OK# 设code的值为1001
127.0.0.1:6379> setbit code 0 1
(integer) 0
127.0.0.1:6379> setbit code 1 0
(integer) 0
127.0.0.1:6379> setbit code 2 0
(integer) 0
127.0.0.1:6379> setbit code 3 1
(integer) 0# 取位置3的值
127.0.0.1:6379> getbit code 3
(integer) 1
# 取位置2的值
127.0.0.1:6379> getbit code 2
(integer) 0
# 取位置1的值
127.0.0.1:6379> getbit code 1
(integer) 0
# 取位置0的值
127.0.0.1:6379> getbit code 0
(integer) 1# 取offset比key的值长度大
127.0.0.1:6379> getbit code 64
(integer) 0# 取不存在的
key127.0.0.1:6379> get id
(nil)
127.0.0.1:6379> getbit id 0
(integer) 0
时间复杂度O(1)。
返回字符串值指定偏移量上的位(bit)
GETRANGE
GETRANGE key start end:返回 key 中字符串值的子字符串,字符串的截取范围由 start 和 end 两个偏移量决定(包括 start 和 end 在内)。
- 负数偏移量表示从字符串最后开始计数, -1 表示最后一个字符, -2 表示倒数第二个,以此类推
- 通过保证子字符串的值域(range)不超过实际字符串的值域来处理超出范围的值域请求。
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> SET address "shuangshuangguiyang"# 返回过引0-3的字符串,包括3
127.0.0.1:6379> getrange address 0 3
"shua"# 返回-3~-1 即 倒数第三个~最后一个(属从左往右,正常返回)
127.0.0.1:6379> getrange address -3 -1
"ang"# 返回-1~-3 即 最后一个~倒数第三个(属从右往左,返回空串)
127.0.0.1:6379> getrange address -1 -3
""
# 返回3~0 即 第四个~第一个(属从右往在,返回空串)
127.0.0.1:6379> getrange address 3 0
""# 不在key的值的长度范围之外的部分返回空串
127.0.0.1:6379> getrange address 10 100
"ngguiyang"
时间复杂度为O(N)(N为返回字符串的长度)。
返回截取得同的子字符串。
GETSET 取旧值赋新值
GETSET key value:将给定 key 的值设为 value ,并返回 key 的旧值。
- 若key不存在,则设置key的值为value,返回nil
- 若key存在且不为字符串,返回错误
127.0.0.1:6379> flushdb
OK# key不存在
127.0.0.1:6379> getset name 'cxian'
(nil)
127.0.0.1:6379> get name
"cxian"# key存在且为字符串
127.0.0.1:6379> getset name lisi
"cxian"# key存在且不为字符串
127.0.0.1:6379> lpush fruits apple banana orange
(integer) 3
127.0.0.1:6379> getset fruits 123
(error) WRONGTYPE Operation against a key holding the wrong kind of value
时间复杂度为O(1)。
返回给定key的旧值。
- 当key不存在返回nil
- 当key旧值不为字符串报错
MGET 批量取值
MGET key [key ...]:依次返回所有(一个或多个)给定 key 的值。
- 当key不存在 或key的值不为字符串,返回nil
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set age 88
OK
127.0.0.1:6379> lpush fruits apple banana orange pear
(integer) 4# fruits为集合和name不存在,返回nil
127.0.0.1:6379> mget age fruits name
1) "88"
2) (nil)
3) (nil)
时间复杂度O(N),N为key的数量。
返回一个包含所有给定 key 的值的列表。
STRLEN 计算值的长度
STRLEN key:返回 key 所储存的字符串值的长度。
- 当key不存在是,返回0
- 当key的值不为字符时报错
127.0.0.1:6379> flushdb
OK
127.0.0.1:6379> set age 100
OK
127.0.0.1:6379> lpush fruits apple banana orange pear
(integer) 4# key存在返回对应值的长度
127.0.0.1:6379> strlen age
(integer) 3# key不存在返回0
127.0.0.1:6379> strlen name
(integer) 0# key存在但不为字符串,报错
127.0.0.1:6379> strlen fruits
(error) WRONGTYPE Operation against a key holding the wrong kind of value
相关文章:

Redis 字符串操作实战(全)
目录 SET 存入键值对 SETNX SETEX SETBIT SETRANGE MSET 批量存入键值对 MSETNX PSETEX BITCOUNT 计算值中1的数量 BITOP 与或非异或操作 DECR 减1 DECRBY APPEND 追加 INCR 自增 INCRBY INCRBYFLOAT GET 取值 GETBIT GETRANGE GETSET 取旧值赋新值 MGET …...

python LeetCode 88 刷题记录
题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并…...

基于 Socket 网络编程
基于 Socket 网络编程 前言一、基于Socket的网络通信传输(传输层)二、UDP 的数据报套接字编程1、UDP 套接字编程 API2、使用 UDP Socket 实现简单通信 三、TCP 流套接字编程1、TCP 流套接字编程 API2、使用 TCP Socket 实现简单通信3、使用 Tcp 协议进行…...

关于C#.Net网页跳转的7种方法
一、目前在ASP.NET中页面传值共有这么几种方式:1.Response.Redirect("http://www.hao123.com",false); 目标页面和原页面可以在2个服务器上,可输入网址或相对路径。后面的bool值为是否停止执行当前页。 跳转向新的页面,原窗口被代…...

使用acme.sh申请免费ssl证书(Cloudflare方式API自动验证增加DNS Record到期证书到期自动重新申请)
下载acme.sh curl https://get.acme.sh | sh -s emailmyexample.comcd ~/.acme.sh/获取Cloudflare密钥 Preferences | Cloudflare 登录选择账户详情选择API Token选择创建令牌选择区域DNS模板,并设置编辑写入权限生成并复制令牌备用回到首页概览界面下部获取账号…...

【C语言】进阶——结构体+枚举+联合
①前言: 在之前【C语言】初阶——结构体 ,简单介绍了结构体。而C语言中结构体的内容还有更深层次的内容。 一.结构体 结构体(struct)是由一系列具有相同类型或不同类型的数据项构成的数据集合,这些数据项称为结构体的成员。 1.结构体的声明 …...

Socket编程基础(1)
目录 预备知识 socket通信的本质 认识TCP协议和UDP协议 网络字节序 socket编程流程 socket编程时常见的函数 服务端绑定 整数IP和字符串IP 客户端套接字的创建和绑定 预备知识 理解源IP和目的IP 源IP指的是发送数据包的主机的IP地址,目的IP指的是接收数据包…...

无线通信——Mesh自组网的由来
阴差阳错找到了一个工作,是做无线通信的,因为无线设备采用Mesh,还没怎么接触过,网上搜索下发现Mesh的使用场景不多,大部分都是用在家里路由器上面。所以写了片关于Mesh网的文档。Mesh网可应用在无网络区域的地方&#…...

LRU、LFU 内存淘汰算法的设计与实现
1、背景介绍 LRU、LFU都是内存管理淘汰算法,内存管理是计算机技术中重要的一环,也是多数操作系统中必备的模块。应用场景:假设 给定你一定内存空间,需要你维护一些缓存数据,LRU、LFU就是在内存已经满了的情况下&#…...

常用工具使用
ubuntu 1.1 ubuntu与windows 互相复制问题 方法一、 打开虚拟机 ,点击上方导航栏 ‘虚拟机’ 查看VMware Tools是否安装,安装即可 方法二、 apt-get autoremove open-vm-tools apt-get install open-vm-tools apt-get install open-vm-tools-desktop…...

HashMap源码解析_jdk1.8(一)
HashMap解析 HashMap源码解析_jdk1.8(一)哈希常用数据结构查找/插入/删除性能比较。哈希冲突 HashMap的数据结构HashMap相关变量size和capacity HashMap源码解析_jdk1.8(一) 哈希 Hash,一般翻译做“散列”࿰…...

Android最好用的日志打印库(自动追踪日志代码位置)
给大家推荐一个自己写的日志打印的库,我愿称之为最强日志打印库:BytUtilLog Byt是Big一统的缩写,大一统日志打印库,哈哈!搞个笑,很早就写好了,但后面忙起来就忘了写一篇文章推一下它了ÿ…...

面试官的哪些举动,暗示你通过了面试?
其实在求职过程中都会发现,求职者面试时间一般在20分钟以上,如果求职者较多,可能会在10分钟左右。(会在介绍以往工作上减少时间,内容主要以简单介绍,薪资要求,能力评价,到岗时间等等) 拿面试时…...

旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著想象和世界一样宽广
旅行季《乡村振兴战略下传统村落文化旅游设计》许少辉八一新著想象和世界一样宽广...

Linux学习第19天:Linux并发与竞争实例: 没有规矩不成方圆
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 先说点题外话,上周参加行业年会,停更了一周。接下来的周五就要开启国庆中秋双节模式,所以有的时候,尤其是工作以后…...

Unity添加自定义菜单按钮
如果你想在Unity编辑器中添加自定义菜单按钮,你可以使用Unity的MenuSystem API。这是一个简单的示例: 首先需要引用using UnityEditor; using UnityEngine; using UnityEditor; 两个命名空间 然后在方法前添加 [MenuItem("原菜单名/自定义名…...

PHP8的类与对象的基本操作之类的实例化-PHP8知识详解
定义完类和方法后,并不是真正创建一个对象。类和对象可以描述为如下关系。类用来描述具有相同数据结构和特征的“一组对象”,“类”是“对象”的抽象,而“对象”是“类”的具体实例,即一个类中的对象具有相同的“型”,…...

C/S架构学习之TCP服务器
TCP服务器的实现流程:一、创建套接字(socket函数):通信域选择IPV4网络协议、套接字类型选择流式; int sockfd socket(AF_INET,SOCK_STREAM,0); //通信域选择IPV4、套接字类型选择流式二、填充服务器的网络信息结构体&…...

基于微信小程序的线上教育课程付费商城(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...

Linux基础指令(五)
目录 前言1. 打包和压缩1.1 是什么1.2 为什么1.3 怎么办? 2. zip & unzip3. tar 指令结语: 前言 欢迎各位伙伴来到学习 Linux 指令的 第五天!!! 在上一篇文章 Linux基本指令(四) 当中,我们学习了 fin…...

C语言结构体的一些鲜为人知的小秘密
目录 一、结构体内存对齐规则: 1.1范例 1.2结构体内存对齐规则 1.3自定义默认对齐数 二、位段 2.1什么是位段 2.2位段的内存分配 2.3位段的不足 三、枚举和联合体 3.1枚举 3.1.1枚举类型的定义 3.1.2枚举类型的使用 3.2联合体 3.2.1联合体的定义 3.…...

kubernetes问题(一)-探究Pod被驱逐的原因及解决方法
1 k8s evicted是什么 k8s evicted是Kubernetes中的一个组件,主要用于处理Pod驱逐的情况。在Kubernetes中,当Node节点资源不够用时,为了保证整个集群的运行稳定,会按照一定的优先级和策略将其中的Pod驱逐出去。这时就需要一个组件…...

论文速览【序列模型 seq2seq】—— 【Ptr-Net】Pointer Networks
标题:Pointer Networks文章链接:Pointer Networks参考代码(非官方):keon/pointer-networks发表:NIPS 2015领域:序列模型(RNN seq2seq)改进 / 深度学习解决组合优化问题【…...

Denoising diffusion implicit models 阅读笔记
Denoising diffusion probabilistic models (DDPMs)从马尔科夫链中采样生成样本,需要迭代多次,速度较慢。Denoising diffusion implicit models (DDIMs)的提出是为了加速采样过程,减少迭代的次数,并且要求DDIM可以复用DDPM训练的网…...

【Java 基础篇】Executors工厂类详解
在多线程编程中,线程池是一项重要的工具,它可以有效地管理和控制线程的生命周期,提高程序的性能和可维护性。Java提供了java.util.concurrent包来支持线程池的创建和管理,而Executors工厂类是其中的一部分,它提供了一些…...

SpringBoot MongoDB操作封装
1.引入Jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency> 2.MongoDbHelper操作 /*** MongoDB Operation class* author Mr.Li* date 2022-12-05*…...

PyTorch 模型性能分析和优化 — 第 1 部分
一、说明 这篇文章的重点将是GPU上的PyTorch培训。更具体地说,我们将专注于 PyTorch 的内置性能分析器 PyTorch Profiler,以及查看其结果的方法之一,即 PyTorch Profiler TensorBoard 插件。 二、深度框架 训练深度学习模型,尤其是…...

Unity3D 简易音频管理器
依赖于Addressable 依赖于单例模板:传送门 using System.Collections.Generic; using System.Security.Cryptography; using System; using UnityEngine; using UnityEngine.AddressableAssets;namespace EasyAVG {public class AudioManager : MonoSingleton<…...

【李沐深度学习笔记】线性回归
课程地址和说明 线性回归p1 本系列文章是我学习李沐老师深度学习系列课程的学习笔记,可能会对李沐老师上课没讲到的进行补充。 线性回归 如何在美国买房(经典买房预测问题) 一个简化的模型 线性模型 其中, x → [ x 1 , x 2 ,…...

微信收款码费率0.38太坑了
作为一个有多年运营经验的商家,我本人在申请收款功能时曾经走过了不少弯路。我找遍了市面上的知名的支付公司,但了解到的收款手续费率通常都在0.6左右,最低也只能降到0.38。这个过程吃过不少苦头。毕竟,收款功能是我们商家的命脉&…...