Redis安装及基本类型详解

目录

一、Redis概念

二、Redis的应用场景

三、Redis的特点

四、redis访问数据为什么快?

五、Ubuntu下安装redis

五、全局命令(针对任意类型value都可使用)

1、keys

(1)keys *

(2)keys pattern 

2、exists

3、del

4、expire

5、pexpire

6、ttl

7、type

六、redis的键过期策略

七、String类型下的命令

1、set命令

2、get命令

3、mget命令

4、mset命令

5、setnx

6、incr、incrby、decr、decrby、incrbyfloat命令

7、append、getrange、setrange、strlen命令

8、String内部的编码方式

9、string的应用场景

八、Hash类型下的命令

1、hset、hget命令

2、hdel、hexists命令

3、hkeys、hvals、hgetall命令

4、hmget、hlen命令

5、hsetnx、hincrby、hincrbyfloat命令

5、hash内部编码方式

6、hash应用场景

九、list类型下的命令

1、lpush、lpushx、rpush、rpushx命令

2、lrange命令

3、lpop、rpop命令

4、lindex、linsert、llen命令

5、lrem命令

6、blpop、brpop命令

7、list内部编码方式

8、list使用场景

十、set类型下的命令

1、sadd、smembers命令

2、sismember、scard命令

3、spop、smove、srem命令

4、sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore命令

5、set内部编码方式

6、set的应用场景

十一、zset类型下的命令

1、zadd、zcard、zcount

2、zrange、zrevrange、zrangebyscore

3、zpopmin、zpopmax、bzpopmin、bzpopmax

4、zrank、zrevrank

5、zscore、zrem、zincrby

6、zinterstore、zunionstore

7、zset内部编码方式

8、zset应用场景

十二、渐进式遍历

1、语法

2、使用

十三、数据库管理

一、Redis概念

Redis是一个在内存中存储数据的中间件,以键值对的形式存储数据,键为string类型,值为string、list、hash、set、zset等类型。

二、Redis的应用场景

1、可以作为一种非关系型数据库,存储数据;

2、作为数据缓存,将热数据(频繁使用的数据)存在redis中,全量数据存在mysql中,查找数据时先去缓存中查找,缓存中没有再去数据库中查找;

3、作为消息队列;

4、实现分布式锁。

三、Redis的特点

1、内存中存储数据,访问速度比硬盘中存储数据快(mysql);

2、数据持久化,将数据在硬盘中保存一份,防止数据丢失;

3、使用单线程模型在,减少线程之间的竞争开销以及避免了线程不安全问题;

4、不能存储大规模数据。

四、redis访问数据为什么快?

1、数据存储在内存中;

2、核心功能都是简单的逻辑,简单的操作内存中的数据;

3、网络上,redis采用了IO多路复用方式(epoll),使用一个线程管理多个socket(端点);

4、redis使用单线程模式,减少了不必要的线程之间的锁竞争开销。

五、Ubuntu下安装redis

1、安装redis

2、手动修改配置

3、重新启动服务器

4、使用redis自带的客户端连接服务器(命令行客户端)

ps:ctrl+d退出redis客户端

五、全局命令(针对任意类型value都可使用)

1、keys

时间复杂度为O(n)

(1)keys *

返回全部key

(2)keys pattern 

返回满足匹配样式的key

①?:匹配任意一个字符

②*:匹配0个或多个任意字符

③[mnq]匹配m,n,q字符

④[^m]排除m,其他都能匹配

⑤[m-n]匹配m-n范围内的字符,左闭右闭

2、exists

判断key是否存在,可以判定多个 key,返回结果是存在key的个数;

时间复杂度:O(1),针对单个key

3、del

删除指定key,可以删除多个,返回结果是删除key的个数;

时间复杂度:O(1),针对单个key

4、expire

给指定的key设置过期时间,时间单位是秒,过了给定时间后,key就会自动删除。

1表示设置成功 0表示设置失败

5、pexpire

给指定的key设置过期时间,时间单位是毫秒,过了给定时间后,key就会自动删除。

1表示设置成功 0表示设置失败

6、ttl

获取指定key即将过期时间,单位是秒

7、type

获取指定key对应value的类型

六、redis的键过期策略

1、定期删除

定期的抽取出一部分key,判定是否到了过期时间,到过期时间就自动删除。

2、惰性删除

对于已经过期的key暂时还不删除,当下次再次获取该key时,该访问会触发redis删除该key,并返回nil(空)。

七、String类型下的命令

redis中的字符串是按照二进制的方式存储的,可以存储文本数据、整数、文本字符串、json、xml、图片、视频、音频等。

1、set命令

设置一个key

语法:set key value [expiration EX seconds |PX milliseconds] [NX|XX]

方框里的内容可以省略。

EX:使用秒作为单位设置key的过期时间;

PX:使用毫秒作为单位设置key的过期时间;

NX:当前设置的key不存在时,才能设置成功。

XX:当前设置的key存在时,才能设置成功。

set一个文本字符串会是什么情况:

发现结果是字节,是因为redis存储字符串时是以二进制的方式存储的,每个文字是3个字节,就像'你'对应的是\xe4\xbd\xa0,如果需要显示中文,可以在启动redis中设置命令为:

2、get命令

获取key对应的value值,若key不存在返回nil,若key对应的value不是String类型,报错

时间复杂度:O(1)

3、mget命令

一次性获取多个指定的key

4、mset命令

一次性增加多个键值对

5、setnx

setnx:设定的key之前不存在;

结果:0表示设置成功 1表示设置失败

6、incr、incrby、decr、decrby、incrbyfloat命令

incr:将key对应的String表示的数字加一,如果key不存在,则视为key对应的value是0;如果key对应的string不是一个整型或者范围超过了64位有符号整型,则报错。

incrby:将key对应的String表示的数字加指定的值,如果key不存在,则视为key对应的value是0;如果key对应的string不是一个整型或者范围超过了64位有符号整型,则报错。

decr:将key对应的String表示的数字减一,如果key不存在,则视为key对应的value是0;如果key对应的string不是一个整型或者范围超过了64位有符号整型,则报错。

decrby:将key对应的String表示的数字减指定的值,如果key不存在,则视为key对应的value是0;如果key对应的string不是一个整型或者范围超过了64位有符号整型,则报错。

incrbyfloat:将key对应的String表示的浮点数加指定的值,如果key不存在,则视为key对应的value是0;如果key对应的value不是string,或者不是一个浮点数则报错。

7、append、getrange、setrange、strlen命令

append:如果key已经存在且value是string类型,则会在原来的value后追加,如果key不存在,效果等同于set命令。返回结果是指定key对应的value长度。

getrange:返回key对应的string子串,有start和end确定,左闭右闭,可以使用负数表示,-1代表倒数第一个字符,-2代表倒数第二个字符。超过范围的会根据string长度自动调整。

ps:此操作还需要注意一个问题:对于非文本类型的字符串,字节为1,进行获取子串时无影响,但对于文本字符串是三个字节,获取子串是按照字节数获取,会容易拆取到不完整的某个字符。

例如:

setrange:覆盖string的一部分,返回结果是该key对应value的长度

当偏移量超过字符串长度时,会把指定偏移量之前的内容填充为\x00

strlen:获取key对应的string的长度,当key存放的value不是string时,报错。

时间复杂度:O(1)

8、String内部的编码方式

string内部有3种编码方式:

①若value是string类型,且是8个字节的长整型,则value是int

②若value是string类型,且是小于等于39个字节的字符串,则value是embstr

③若value是string类型,且是大于39个字节的字符串,则value是raw

9、string的应用场景

(1)缓存

redis作为缓存层,mysql作为存储层,绝大部分请求的数据都是从redis中获取,若redis中没有得到用户信息,则进一步从mysql中获取对应的消息,随后写入缓存并返回。

(2)计数功能

搭配incr,实现快速计数。例如:用户每播放一次视频,相应的视频播放数就会自增1。

(3)redis集中管理session

将用户的session存储到redis中,使得即使面对分布式服务器,也可以实现session存在。

(4)手机验证码

可以给key设置过期时间,限制用户每分钟获取验证码的频率。

八、Hash类型下的命令

key对应的value又是一个哈希。但此时该哈希的value必须是string,且哈希不可以重复。

1、hset、hget命令

hset:设置hash中指定的字段(field)的值,可以一次设置多个。

时间复杂度为:O(1),针对单个field。返回结果:添加的字段个数。 

hget:获取hash中指定字段的值--field

2、hdel、hexists命令

hdel:删除hash中指定的字段,可以删除多个。

时间复杂度为:O(1)。返回结果:删除的字段个数。

hexists:判断hash中指定字段是否存在。

时间复杂度为:O(1)。返回结果:1表示存在,0表示不存在。

3、hkeys、hvals、hgetall命令

hkeys:获取hash中的所有字段

时间复杂度为:O(n)--n为field个数。

hvals:获取hash中的所有的值

hgetall:获取hash中的所有字段以及对应的值

4、hmget、hlen命令

hmget:一次获取hash中多个字段的值

hlen:获取hash中所有字段个数

5、hsetnx、hincrby、hincrbyfloat命令

hsetnx:在字段不存在的情况下,设置hash中的字段和值

时间复杂度为:O(1);返回结果是:1表示成功,0表示失败。

hincrby:将hash中字段对应的数值添加指定的值

时间复杂度为:O(1);返回结果是:字段变化后的值。

hincrbyfloat:将hash中字段对应的浮点数数值添加指定的值

5、hash内部编码方式

hash内部有2中编码方式:

(1)ziplist

压缩列表,当哈希类型元素个数小于特定值,且所有值字节小于某个特定值时,redis会使用ziplist作为哈希的内部实现。ziplist在内存方面更节省。

(2)hashtable

当哈希类型无法满足ziplist条件时,redis会使用hashtable作为哈希的内部实现。

6、hash应用场景

作为缓存存储关系型数据库的数据

例如:用户信息有userId、userName、passWord,主键可以是每个用户,对应value采用hash保存用户的具体信息。

九、list类型下的命令

key对应的value是一个list(类似于数组),它可以被用作栈,也可以被用作队列。列表元素可以重复。元素是有序的,此处有序不是指升序降序,指元素前后顺序,若两个列表元素内容相同,但是元素放的顺序不同,则认为这是两个不同的列表。

1、lpush、lpushx、rpush、rpushx命令

lpush:将一个或者多个元素从左侧放入到list中(头插)

时间复杂度为:O(1)--单个元素;返回结果为:列表的长度

lpushx:只有当key存在时,可以将一个或者多个元素从左侧放入到list中(头插)

rpush:将一个或者多个元素从右侧放入到list中(尾插)

rpushx:只有当key存在时,可以将一个或者多个元素从右侧放入到list中(尾插)

2、lrange命令

lrange:获取从start到end区间内的所有元素,左闭右闭。下标可以为负数。

对于范围,redis会自行判断。

3、lpop、rpop命令

lpop:从list左侧取出元素(头删)

时间复杂度为:O(1),返回结果为:取出元素的值,可能为nil

rpop:从list右侧取出元素(尾删)

4、lindex、linsert、llen命令

lindex:获取从左数第index位置的元素。index可以为负数。

linsert:在特定位置插入元素。

时间复杂度为:O(n);返回结果为:列表长度

ps:当存在多个一样的基准值时,操作的基准值是离左边最近的基准值。

llen:获取列表长度

5、lrem命令

lrem:删除list中多个指定的值。删除个数可以为正数、负数、0。

返回结果:删除元素个数。

删除个数为正数:进行左删,删除指定个数的指定值

删除个数为负数:进行右删,删除指定个数的指定值

删除个数为0:删除全部指定值

6、blpop、brpop命令

blpop:从list左侧取出元素(头删),当list中没有元素时,该命令会被阻塞一定时间,在时间内若有元素插入到list中,则该命令会运行返回结果;在等待元素放入列表中时,可以执行其他命令。与lpop的区别:当列表中有元素时,两者是没有区别的;当列表中没有元素时,lpop直接返回nil,而blpop会被阻塞,等待元素加入列表。

ps:该命令可以针对多个key操作,只要其中某个key获取到结果就返回结果。

返回结果:key+获取到的元素值

brpop:从list右侧取出元素(头删),当list中没有元素时,该命令会被阻塞一定时间,在时间内若有元素插入到list中,则该命令会运行返回结果;在等待元素放入列表中时,可以执行其他命令。与lpop的区别:当列表中有元素时,两者是没有区别的;当列表中没有元素时,lpop直接返回nil,而blpop会被阻塞,等待元素加入列表。

ps:该命令可以针对多个key操作,只要其中某个key获取到结果就返回结果。

返回结果:key+获取到的元素值

7、list内部编码方式

以前list内部编码方式有两种:

(1)ziplist(压缩列表)

当列表的元素个数小于某个值,且列表的每个元素长度小于某个值时,redis会选用ziplist作为列表的内部编码实现,节省内存空间。

(2)linkedlist(链表)

当列表无法满足ziplist条件时,redis会使用linkedlist作为列表的内部编码实现。

最近版本list内部编码方式:

quicklist

quicklist是链表和压缩列表的结合,整体是一个链表,链表的每个节点是一个压缩列表。每个压缩列表都不会太大。

8、list使用场景

(1)消息队列

搭配lpush+brpop命令,可以实现生产者--消费者模型。

(2)分页展示文章列表

使用列表展示文章。

十、set类型下的命令

key对应的value是set结构的,set类型元素不可以重复,且是无序的。

1、sadd、smembers命令

sadd:将一个或多个元素添加到指定set中,重复元素无法添加

smembers:获取一个set中的所有元素

2、sismember、scard命令

sismember:判断一个元素在不在指定set中

时间复杂度为:O(1);返回结果:1表示存在,0表示不存在

scard:获取指定set的元素个数

3、spop、smove、srem命令

spop:从set中删除并返回一个或多个元素,删除元素具有随机性。

smove:将一个元素从set中取出并放入目标set中

时间复杂度为:O(1);返回结果:1表示存入成功,0表示存入失败

srem:将指定的元素从set中删除,可以一次删除多个

4、sinter、sinterstore、sunion、sunionstore、sdiff、sdiffstore命令

sinter:获取多个指定set取交集后的元素

sinterstore:获取多个指定set取交集后的元素,并将元素放入到目标set中

sunion:获取多个指定set取并集后的元素

sunionstore:获取多个指定set取并集后的元素在,并将元素放入到目标set中

sdiff:获取多个指定set取差集后的元素

sdiffstore:获取多个指定set取并集后的元素,并将元素放入到目标set中

5、set内部编码方式

(1)当集合中的元素都是整数,且元素个数小于某个特定值时,redis选用intset实现set

(2)当集合类型无法满足intset条件时,redis采用hashtable实现set

6、set的应用场景

(1)使用set保存用户的标签

利用set的元素不可重复,保存同一个用户的一些标签。

(2)使用set计算用户之间的共同好友

利用set集合特性,求交集,计算用户之间的共同好友。

(3)使用set统计uv

pv:用户每次访问同一个服务器会产生一个pv;

uv:每个用户访问服务器都会产生一个uv;

uv需要按照用户进行去重,可以使用set。

十一、zset类型下的命令

key对应的value类型是zset,zset是一种有序集合,集合元素不能重复,每个元素都有一个唯一的浮点类型的分数与之关联,使用该分数将元素进行升序排列。

1、zadd、zcard、zcount

zadd:添加(nx)或更新(xx)指定的元素以及关联的分数到zset中,并按照分数升序排列,若分数相同则按照member排序。

时间复杂度为:O(logN);返回结果:操作的元素个数(nx);0或1(xx)

zcard:获取zset中的元素个数。

时间复杂度为:O(1)。

zcount:返回分数在[min,max]区间里的元素个数

时间复杂度为:O(logN)。

ps:若想返回(min,max)区间内的元素个数

2、zrange、zrevrange、zrangebyscore

zrange:返回指定区间里(下标)的元素,分数按照升序。带上withscores可以显示分数。

时间复杂度为:O(logN+M)。

zrevrange:返回指定区间里(下标)的元素,分数按照降序。

zrangebyscore:返回分数在[min,max]区间里的元素。

3、zpopmin、zpopmax、bzpopmin、bzpopmax

zpopmin:删除并返回分数最低的count个元素

zpopmax:删除并返回分数最高的count个元素

bzpopmin:带阻塞的删除并返回分数最低的count个元素

bzpopmax:带阻塞的删除并返回分数最高的count个元素

4、zrank、zrevrank

zrank:返回指定元素的排名--升序

zrevrank:返回指定元素的排名--降序

时间复杂度为:O(logN)

5、zscore、zrem、zincrby

zscore:返回指定元素的分数

时间复杂度为:O(1)

zrem:删除指定的元素,可删除多个

时间复杂度为:O(logN)--针对单个

zincrby:为指定元素的分数添加指定的分数

时间复杂度为:O(logN)

6、zinterstore、zunionstore

zinterstore:求多个指定zset的交集(member),可以指定结果放到哪个key里面,可以指定每个zset结果权值,可以指定结果是取和、取最大值、最小值。

zinterstore:求多个指定zset的并集(member),可以指定结果放到哪个key里面,可以指定每个zset结果权值,可以指定结果是取和、取最大值、最小值。

7、zset内部编码方式

(1)当有序集合元素个数小于某个数,同时每个元素的值都小于某个数时,redis会用ziplist(压缩列表)来实现有序集合,减少内存的使用;

(2)当不满足ziplist的条件时,redis会使用skiplist(跳表)实现有序集合。

8、zset应用场景

进行排行榜排名时可以使用zset,可以加权重,可以进行分数修改、删除。

十二、渐进式遍历

在获取所有key时,若我们使用keys *,会出现一些问题,若我们的key非常多,可能会阻塞redis服务器,所以我们可以使用scan命令渐进式遍历key

1、语法

scan cursor [match pattern] [count count] [type type]

cursor:进行遍历时光标开始的位置,不是下标,首次scan从0开始,下一次光标位置会由前一次scan结果返回。

pattern:指定需要满足的key形式,和前面一样(*、?等等)

count:指定一次返回key的个数,默认为10

type:规定获取哪些类型的key

2、使用

当返回的下一次位置为0时,遍历结束。

十三、数据库管理

redis提供了一些面向数据库的操作,有:select、flushdb、flushall。

select:切换数据库,redis默认配置中提供了16个数据库,select 0是第一个数据库,select 15是最后一个数据库,默认为第一个数据库,且不同数据库之间的键值对不会冲突。

flushdb:清除当前数据库数据

flushall:清除所有数据库数据

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

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

相关文章

git Failed to connect to 你的网址 port 8282: Timed out

git Failed to connect to 你的网址 port 8282: Timed out 出现这个问题的原因是:原来的仓库换了网址,原版网址不可用了。 解决方法如下: 方法一:查看git用户配置是否有如下配置 http.proxyhttp://xxx https.proxyhttp://xxx如果…

《梦幻西游》迎来史上最大翻车,老玩家们为何纷纷揭竿而起?

因一次调整,21岁的《梦幻西游》迎来了自己有史以来最大的一波节奏。 玩家在微博上炮轰官方,称:“游戏借着打击工作室牟利的称号,砍副本活动产出,然后自己口袋无限卖”,要求改善游戏现状。 从3月29日起&am…

uniapp 密码框的眼睛

效果展示&#xff1a; uniapp input 官网链接&#xff1a;链接 按照官方文档&#xff0c;uni-icon出不来。 通过自己的方法解决了&#xff0c;解决方案如下&#xff1a; 代码&#xff1a; <uni-forms-item name"password"><inputclass"uni-input&quo…

background背景图参数边渐变CSS中创建背景图像的渐变效果

效果:可以看到灰色边边很难受,希望和背景融为一体 原理: 可以使用线性渐变&#xff08;linear-gradient&#xff09;或径向渐变&#xff08;radial-gradient&#xff09;。以下是一个使用线性渐变作为背景图像 代码: background: linear-gradient(to top, rgba(255,255,255,0)…

【Linux】指令

1. 简单指令 whoami 显示当前登入账号名 ls /home 现在有的用户名 adduser 用户名 新加用户&#xff08;必须在root目录下&#xff09; passwd 用户名 给这个用户设置密码 userdel -r 用户名 删除这个用户 pwd 显示当前所处路径 stat 文件名 / 文件夹名 显示文件状…

学习大数据之JDBC(使用JAVA语句进行SQL操作)(3)

文章目录 DBUtils工具包准备工作DBUtils的介绍QueryRunner空参的QueryRunner的介绍以及使用有参QueryRunner的介绍以及使用 ResultSetHandler结果集BeanHandler<T>BeanListHandler<T>ScalarHanderColumnListHander 事务事务事务_转账分析图实现转账&#xff08;不加…

CTF之GET和POST

学过php都知道就一个简单传参&#xff0c;构造payload:?whatflag得到 flag{3121064b1e9e27280f9f709144222429} 下面是POST那题 使用firefox浏览器的插件Hackbar勾选POST传入whatflag flag{828a91acc006990d74b0cb0c2f62b8d8}

【网站项目】鲜花销售微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Dubbo 服务发现

Dubbo 服务发现 1、什么是服务发现 **服务发现&#xff08;Service discovery&#xff09;**是自动检测一个计算机网络内的设备及其提供的服务。 2、Dubbo 与 服务发现 Dubbo 提供的是一种 Client-Based 的服务发现机制&#xff0c;依赖第三方注册中心组件来协调服务发现过…

【算法】两数之和(暴力求解+哈希表)

本题来源---《两数之和》。 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里…

前端零基础学习web3开发

目录 1 钱包 2 发起交易 3 出块 4 块高 5 矿工 6 Gas费 这一节&#xff0c;我们不说让人神往的比特币&#xff0c;不说自己会不会利用这个虚拟的货币来发财&#xff0c;也不说那些模模糊糊的知识&#xff0c;什么去中心化啦&#xff0c;什么奇妙的加密啦&#xff0c;我们…

云骑士数据恢复怎么授权别的电脑

随着科技的不断发展&#xff0c;数据恢复已经成为了我们生活中不可或缺的一部分。云骑士数据恢复作为一款功能强大的数据恢复软件&#xff0c;受到了广泛的欢迎。但是&#xff0c;有时候我们需要将云骑士数据恢复授权给其他电脑使用&#xff0c;这就需要我们了解相关的操作步骤…

【XCPC笔记】2023 (ICPC) Jiangxi Provincial Contest——ABCHIJKL 做题记录

赛后gym练习及补题&#xff0c;gym链接&#xff1a;2023 (ICPC) Jiangxi Provincial Contest – Official Contest 补题顺序 L [Zhang Fei Threading Needles - Thick with Fine](https://codeforces.com/gym/104385/problem/L)题面解读参考代码 A [Drill Wood to Make Fire](h…

数字电路基础(Digital Circuit Basis )

目录 一、什么是数字电路&#xff1f; &#xff08;Digital Circuit &#xff09; 1.概念 2.分类 3.优点 4.数电与模电的区别 二、数制 (十进制&#xff1a;Decimal) 1.概述 2.进位制 3.基数 4.位权 5.二进制的算术运算 三、编码 (二进制&#xff1a;Binary ) 1.什…

Vue - 你会在同一个元素上使用v-for和v-if吗

难度级别:初级及以上 提问概率:50% 在初学者看来,v-for和v-if同时使用是非常方便的,二者共同使用的常见场景有两种。例如有两个列表,分别用于渲染学生数据和老师数据,然后有两个单选按钮,用于切换当前页面中需要展示学生列表还是老师列…

2024/4/1—力扣—不用加号的加法

代码实现&#xff1a; 思路&#xff1a;位运算&#xff0c;利用了异或和与的特性&#xff0c;异或操作与加操作的区别在于异或操作在二进制状态下两个数同1不进位&#xff0c;只是置为0&#xff0c;其他均相同&#xff0c;那么使用与运算计算进位值&#xff0c;补齐异或操作的缺…

什么是商家转账到零钱

商家转账到零钱是什么&#xff1f; 通过商家转账到零钱这个功能&#xff0c;如果我们系统需要对用户支付费用&#xff0c;比如发放佣金、提成、退款之类的&#xff0c;可以直接转账到用户的微信零钱。 【商家转账到零钱】是【企业付款到零钱】的升级版&#xff0c;2022年5月1…

windows terminal美化教程

安装terminal 微软商店下载安装terminal 配置文件 进入terminal&#xff0c;打开设置。 {"$schema": "https://aka.ms/terminal-profiles-schema",// global settings"profiles": {// profile settings"defaults": {// default sett…

LeetCode热题100:哈希

1.两数之和 题目链接&#xff1a;两数之和 题目描述&#xff1a;给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数…

蓝桥杯第十四届C++C组

三国游戏 题目描述 小蓝正在玩一款游戏。游戏中魏蜀吴三个国家各自拥有一定数量的士兵X, Y, Z (一开始可以认为都为 0 )。游戏有 n 个可能会发生的事件&#xff0c;每个事件之间相互独立且最多只会发生一次&#xff0c;当第 i 个事件发生时会分别让 X, Y, Z 增加Ai , Bi ,Ci …