Redis实战-初识Redis
初识Redis
- 1、Redis简介
- 2、 Redis数据结构简介
- 3、 Redis命令
- 3.1 字符串
- 3.2 列表
- 3.3 集合
- 3.4 散列
- 3.5 有序集合
- 3.6 发布与订阅
- 3.7 其他命令
- 3.7.1 排序
- 3.7.2 过期时间
如有侵权,请联系~
如有错误,也欢迎批评指正~
本篇文章大部分是来自学习《Redis实战》的笔记
1、Redis简介
Redis 是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生 的 独 一无 二的 数 据 模 型 。 Redis 提供了5种不同类型的数据结构,各式各样的问题都可以很自然地映射到这些数据结构上:Redis 的数据结构致力于帮助用户解决问题,而不会像其他数据库那 样,要求用户扭曲问题来适应数据库。除此之外,通过复制、持久化(persistence )和客户端分 片(client -side sharding )等特性,用户可以很方便地将Redis 扩展成一个能够包含数百GB 数据、 每秒处理上百万次请求的系统。
需求是否使用redis或者是redis作为主存储还是二级存储取决于程序对性能的要求以及成本问题。
| 存储 | 类型 | 描述 |
|---|---|---|
| Redis | 内存存储的非关系型数据库 | 支持五种数据结构:字符串、列表、集合、散列、有序集合; 支持持久化;可以不必像MySQL随机读写、写入临时表,不需要查询分析器、优化器进行处理 |
| memcached | 内存存储的键值缓存 | 只支持字符串;不支持持久化;用户只能用APPEND命令将数据添加到已有字符串的末尾,采用的办法是通过黑名单(blacklist)来隐藏列表里面的元素,从而避免对元素执行读取、更新、写入 |
| MySQL | 关系型数据库 | 支持ACID事务;存在查询分析器、查询优化器; |
2、 Redis数据结构简介
Redis客户端与服务端交互图【以java为例子】:

这里只是简单的介绍一下数据结构,以及部分命令:
| Redis数据结构 | |||
|---|---|---|---|
| 数据结构 | 命令 | 行为描述 | 示例 |
| 字符串 | GET | 获取存储在给定键中的值 | get key |
| SET | 设置存储在给定键中的值 | set key value | |
| DEL | 删除存储在给定键中的值 | del key | |
| 列表 | LPUSH | 将给定的值推入列表的左端 | lpush key value |
| RPUSH | 将给定的值推入列表的右端 | rpush key value | |
| LPOP | 从列表的左端弹出一个值,并返回被弹出的值 | lpop key | |
| RPOP | 从列表的右端弹出一个值,并返回被弹出的值 | rpop key | |
| LINDEX | 获取列表上给定位置的单个元素 | lindex key 1 | |
| LRANGE | 获取列表上在给定范围上的所有值 | lrange key 0 3 | |
| 集合 | SADD | 将给定的元素添加到集合 | sadd key value |
| SMEMBERS | 返回集合中所有的元素 | smembers key | |
| SISMEMBER | 检查给定元素是否存在于集合 | sismember key value | |
| SREM | 如果集合中存在该元素,则移除该元素 | srem key value | |
| 散列 | HSET | 在散列里面关联给定的键值对 | hset key key1 value1 |
| HGET | 获取指定的散列的值 | hget key key1 | |
| HGETALL | 获取散列中包含的所有键值对 | hgetall key | |
| HDEL | 如果给定键存在于散列中,那么移除这个键 | hdel key key1 | |
| 有序集合 | ZADD | 将一个带有给定分值的成员添加到有序集合中 | zadd key 123 value |
| ZRANGE | 从有序集合中获取指定位置范围的数据 | zrange key 1 3 | |
| ZRANGEBYSCORE | 获取有序集合在给定分值范围内的所有元素 | zrangebyscore key 0 800 | |
| ZREM | 如果给定成员存在于有序集合,那么移除这个成员 | zrem key value | |
3、 Redis命令
这里的命令不再包含上述简单的命令。
3.1 字符串
Redis的字符串是一个由字节组成的序列,字符串可以存储三种类型的值:字节串、整数【在64位系统上就是64位有符号整数,32位系统就是32位有符号整数】、浮点数【取值范围和double相同】。
| 字符串 | |||
|---|---|---|---|
| 命令 | 行为描述 | 示例 | 注释 |
| INCR | 将给定键中的值加1 | incr key | 1.当用户将一个值存储到Redis的时候,如果这个值可以被解释为整数或者浮点数,那么Redis允许用户对这个字符串执行各种incr*和decr*操作; 2.如果这个值不可以被解释为整数或者浮点数,执行自增或者自减操作,Redis会返回一个错误; 3.如果执行自增或者自减操作的时候,键值对不存在或者是值为空串,Redis会当做值为0进行处理 |
| DECR | 将给定键中的值减1 | decr key | |
| INCRBY | 将给定键中的值加上整数 | incrby key amount | |
| DECRBY | 将给定键中的值减去整数 | decrby key amount | |
| INCRBYFLOAT | 将给定键中的值加上浮点数 | incrbyfloat key amount | |
| APPEND | 将值value追加到给定键对应的值的末尾 | append key value | 1、在执行setrange或者setbit命令对字符串进行写入的时候,如果字符串长度不够,那么Redis会自动使用空字节(null)将字符串扩展至所需的长度,然后再执行写入或者更新操作; 2、在使用getrange读取字符串的时候,超过字符串的长度那部分视为空串; 3、在使用getbit读取二进制串的时候,超过字符串长度为0 |
| GETRANGE | 获取给定键值从偏移量start到end的字串,包括start和end在内 | getrange key start end | |
| SETRANGE | 给定键值从偏移量offset开始的位置到offset+len(value)的位置被指定的字符串覆盖 | setrange key offset value | |
| GETBIT | 返回二进制串指定位置的二进制值 | getbit key offset | 这其实就是位图bitmap。位图是基于字符串类型的一种特殊应用,将一个字符串视为一系列的二进制位。 |
| SETBIT | 设置二进制串指定位置的二进制值为value(0或者1) | setbit key offset value | |
| BITCOUNT | 统计二进制串中二进制值为1的数量,如果给定了start和end偏移量,那么只统计偏移量范围内的二进制位 | bitcount key [start end] | |
| BITTOP | 对一个或者多个二进制串执行包括并(AND)、或(OR)、异或(XOR)、非(NOT)按位运算操作,结果存储到dest-key键中 | bittop operation dest-key key1 [key2] | |
3.2 列表
| 列表 | |||
|---|---|---|---|
| 命令 | 行为描述 | 示例 | 注释 |
| LTRIM | 对列表进行裁剪,只保留[start, end]范围内的元素 | ltrim key start end | |
| BLPOP | 从第一个非空列表中弹出位于最左端的元素或者阻塞timeout秒并等待可弹出的元素 | blpop key1 [key2 ...] timeout | 阻塞弹出和弹出并推入命令最常见的用例就是消息传递和任务队列 |
| BRPOP | 从第一个非空列表中弹出位于最右端的元素或者阻塞timeout秒并等待可弹出的元素 | brpop key1 [key2 ...] timeout | |
| RPOPLPUSH | 从source-key列表中弹出位于最右端的元素,然后将这个元素推入到dest-key列表的最左端,并给用户返回这个元素 | rpoplpush source-key dest-key | |
| BRPOPLPUSH | 从source-key列表中弹出位于最右端的元素,然后将这个元素推入到dest-key列表的最左端,并给用户返回这个元素;如果source-key中没有元素,那么会阻塞timeout秒等待可弹出元素的出现 | brpoplpush source-key dest-key | |
3.3 集合
| 集合 | ||
|---|---|---|
| 命令 | 行为描述 | 示例 |
| SCARD | 返回集合中元素个数 | scard key |
| SRANDMEMBER | 从集合中随机的返回一个或者多个元素。当count为正数的时候,命令返回的随机元素不会重复;为负数的时候,返回的随机元素可能重复 | srandmember key [count] |
| SPOP | 从集合中随机的移除一个元素,并返回被移除的元素 | spop key |
| SMOVE | 如果source-key集合中包含item元素,那么从source-key中移除该元素,并将该元素添加到集合dest-key集合中 | smove source-key dest-key item |
| 接下来的命令用于处理和组合多个集合 | ||
| SDIFF | 返回存在于第一个集合但不存在于其他集合中的元素【差集】 | sdiff key1 [key2 ...] |
| SDIFFSTORE | 将存在于第一个集合但不存在于其他集合中的元素【差集】存储到dest-key键里面 | sdiffstore dest-key key1 [key2 ...] |
| SINTER | 返回同时存在于所有集合的元素【交集】 | sinter key1 [key2 ...] |
| SINTERSTORE | 将同时存在于所有集合的元素【交集】存储到dest-key键里面 | sinterstore dest-key key1 [key2 ...] |
| SUNION | 返回所有集合的元素【并集】 | sunion key1 [key2 ...] |
| SUNIONSTORE | 将同时存在于所有集合的元素【交集】存储到dest-key键里面 | sunionstore dest-key key1 [key2 ...] |
3.4 散列
| 散列 | |||
|---|---|---|---|
| 命令 | 行为描述 | 示例 | 注释 |
| HMGET | 返回散列中一个或者多个键的值 | hmget key hashkey1 [hashkey2 ..] | |
| HMSET | 为散列设置一个或者多个键值对 | hmset key hashkey1 value1 [hashkey2 value2 ..] | |
| HDEL | 删除散列中一个或者多个键值对,返回成功删除键值对的个数 | hdel key hashkey1 [hashkey2 ...] | |
| HLEN | 返回散列中包含的键值对个数 | hlen key | |
| HEXISTS | 返回给定的键是否存在于散列中 | hexists key hashkey | |
| HKEYS | 获取散列中包含的所有键 | hkeys key | 尽管有hgetall了,但是hkeys和hvals仍然存在的必要。如果散列包含的值很大,那么用户可以先使用hkeys获取散列包含的所有键,然后分多次获取hget/hmget一个或者多个键值对,避免因为一次获取多个大体积的导致服务端阻塞 |
| HVALS | 获取散列中包含的所有值 | hvals key | |
| HGETALL | 获取散列中包含的所有键值对 | hgetall key | |
| HINCRBY | 将键hashkey存储的值增加整数increment | hincrby key hashkey increment | |
| HINCRBYFLOAT | 将键hashkey存储的值增加浮点数increment | hincrbyfloat key hashkey increment | |
3.5 有序集合
| 有序集合 | |||
|---|---|---|---|
| 命令 | 行为描述 | 示例 | 注释 |
| ZADD | 将带有分值的成员添加到有序集合里面 | zadd key score member [score member ..] | |
| ZREM | 从有序集合中删除给定的成员,返回被删除的成员数量 | zrem key member [member ..] | |
| ZCARD | 返回有序集合中成员数量 | zcard key | |
| ZINCRBY | 给member成员的分值上加上increment | zincrby key increment member | |
| ZCOUNT | 返回分值介于[min, max]之间的成员数量 | zcount key min max | |
| ZRANK | 返回成员member在有序集合中的排名 | zrank key member | |
| ZSCORE | 返回成员member的分值 | zscore key member | |
| ZRANGE | 返回有序集合中排名介于[start, stop] 之间的成员,如果带有withscores参数,那么命令会将成员的分值一并返回 | zrange key start stop [withscores] | |
| ZREVRANK | 返回成员member在有序集合中的【逆序,分值按照从大到小排序】排名 | zrevrank key member | |
| ZREVRANGE | 按照逆序【分值按照从大到小排序】返回有序集合中排名介于[start, stop] 之间的成员,如果带有withscores参数,那么命令会将成员的分值一并返回 | zrevrange key start stop [withscores] | |
| ZRANGEBYSCORE | 返回有序集合中分值介于[min,max]之间的成员 | zrangebyscore key min max [withscores] | |
| ZREVRANGEBYSCORE | 按照分数值从大到小的顺序返回有序集合中分值介于[min,max]之间的成员 | zrevrangebyscore key min max [withscores] | |
| ZREMRANGEBYRANK | 删除有序集合中排名介于[min,max]之间的成员 | zremrangebyrank key min max | |
| ZREMRANGEBYSCORE | 删除有序集合中分值介于[min,max]之间的成员 | zremrangebyscore key min max | |
| ZINTERSTORE | 用于计算多个有序集合的交集,并将结果存储在新的有序集合中 | zinterstore dest-key numsourcekeys source-key1 source-key2 [WEIGHTS weight [weight ...]] [AGGREGATE sum|min|max] | 对集合求并集或者交集,不只是有序集合,对集合也可以。甚至有序集合和集合一起也可。这里的source-key可以是集合,如果是集合的话,集合中的元素分值默认为1 |
| ZUNIONSTORE | 计算给定的一个或多个有序集的并集,其中给定 key 的数量必须以 numkeys 参数指定,并将该并集(结果集)储存到 destination | zunionstore dest-key numsourcekeys source-key1 source-key2 [WEIGHTS weight [weight ...]] [AGGREGATE sum|min|max] | |
3.6 发布与订阅
| 发布与订阅 | |||
|---|---|---|---|
| 命令 | 行为描述 | 示例 | 注释 |
| SUBSCRIBE | 订阅一或多个频道 | subscribe channel [channel] | 发送者往频道发送二进制消息,每当消息发送到频道时,订阅者都会收到消息 |
| UNSUBSCRIBE | 退订一或多个频道,如果没有给定频道那么退订所有频道 | unsubscribe [channel [channel]] | |
| PUBLISH | 给指定频道发消息 | publish channel message | |
| PSUBSCRIBE | 订阅与给定模式相匹配的所有频道 | psubscribe pattern [pattern] | |
| PUNSUBSCRIBE | 退订给定模式的频道,如果没有给定模式那么退订所有频道 | punsubscribe [pattern [pattern]] | |
虽然redis提供了发布和订阅功能,但是一般不建议使用,原因:
- redis的稳定性问题。如果订阅者读取消息的速度不够快的话,消息的不断积压会导致输出缓冲区越来越大,这可能会导致Redis 的速度变慢,甚至直接崩溃。也可能会导致Redis 被操作系统强制杀死,甚至导致操作系统本身不可用。新版的Redis 不会出现这种问题,因为它会自动断开不符合 client-output-buffer-limitpubsub配置选项要求的订阅客户端。
- 和数据传输的可靠性有关。任何网络系统在执行操作时都可能会遇上断线情况, 而断线产生的连接错误通常会使得网络连接两端中的其中一端进行重新连接。 如果客户端在执行订阅操作的过程中断线,那么客户端将丢失在断线期间发送的所有消息。
3.7 其他命令
3.7.1 排序
| 排序 | |||
|---|---|---|---|
| 命令 | 行为描述 | 示例 | 注释 |
| SORT | 对列表、集合以及有序集合进行排序 | sort key [BY pattern] [LIMIT offset count] [GET pattern [GET pattern …]] [ASC|DESC] [ALPHA] [STORE destination] | BY pattern可以指定存储到其他key中的值作为比较条件。 参考文献:[Redis的排序命令Sort](https://blog.csdn.net/Tc_lccc/article/details/137624709) |
3.7.2 过期时间
| 过期时间 | ||
|---|---|---|
| 命令 | 行为描述 | 示例 |
| PERSIST | 移除键的过期时间 | persist key |
| TTL | 查看键距离过期还有多少秒 | ttl key |
| EXPIRE | 让给定的键在指定秒数后过期 | expire key seconds |
| EXPIREAT | 将键的过期时间设置为给定的unix的时间戳 | expireat key timestamp |
| PTTL | 查看键距离过期还有多少毫秒 | pttl key |
| EXPIRE | 让给定的键在指定毫秒数后过期 | expire key seconds |
| EXPIREAT | 将键的过期时间设置为给定的unix的时间戳【毫秒精度】 | expireat key timestamp |
相关文章:
Redis实战-初识Redis
初识Redis 1、Redis简介2、 Redis数据结构简介3、 Redis命令3.1 字符串3.2 列表3.3 集合3.4 散列3.5 有序集合3.6 发布与订阅3.7 其他命令3.7.1 排序3.7.2 过期时间 如有侵权,请联系~ 如有错误,也欢迎批评指正~ 本篇文章大部分是来…...
spring boot中实现手动分页
手动分页 UserMapper.xml <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace"cn.m…...
【优选算法】5----有效三角形个数
又是一篇算法题,今天早上刚做的热乎的~ 其实我是想写博客但不知道写些什么(就水一下啦) -------------------------------------begin----------------------------------------- 题目解析: 这道题的题目算是最近几道算法题里面题目最短的&a…...
C++打字模拟
改进于 文宇炽筱_潜水 c版的打字效果_c自动打字-CSDN博客https://blog.csdn.net/2401_84159494/article/details/141023898?ops_request_misc%257B%2522request%255Fid%2522%253A%25227f97863ddc9d1b2ae9526f45765b1744%2522%252C%2522scm%2522%253A%252220140713.1301023…...
最新版pycharm如何配置conda环境
首先在conda prompt里创建虚拟环境,比如 conda create --prefix E:/projects/myenv python3.8然后激活 conda activate E:/projects/myenv往里面安装点自己的包,比如 conda install pytorch1.7.1 torchvision0.8.2 -c pytorch打开pycharm 注意&#x…...
UML-对象图(Object Diagram)
一、定义 UML对象图用于描述系统中对象的状态和相互关系,是类图的一个实例化版本,主要展示了类图中定义的关系在特定时间点的实际体现。它帮助开发者在设计阶段理解对象之间的实际关系、属性值和状态,从而支持系统设计的准确性与有效性。 二、组成要素 UML对象图主要由以…...
Jmeter 动态参数压力测试时间段预定接口
🎯 本文档详细介绍了如何使用Apache JMeter进行压力测试,以评估预定接口在高并发场景下的性能表现。通过创建线程组模拟不同数量的用户并发请求,利用CSV文件动态配置时间段ID和用户token,确保了测试数据的真实性和有效性。文档中还…...
超大型集团合并报表数智管理转型
摘要:数字经济时代,数字化技术已成为驱动财务管理价值释放的重要引擎,数智化能力的提升是当前一流财务信息化建设的最新趋势。财务部门是企业的“数据交汇中心”和“信息加工中心”,通过对企业各项财务数据的分类、汇总和清晰呈现…...
[MCAL]Mcu配置
PostBuild: PreCompile: 选择时钟来源; 选择初始McuInitClock() 函数 电路手册里有晶振频率,如上所示;...
Qt基础项目篇——Qt版Word字处理软件
一、核心功能 本软件为多文档型程序,界面是标准的 Windows 主从窗口 拥有:主菜单、工具栏、文档显示区 和 状态栏。 所要实现的东西,均在下图了。 开发该软件,主要分为下面三个阶段 1)界面设计开发 多窗口 MDI 程序…...
算法刷题笔记——图论篇
这里写目录标题 理论基础图的基本概念图的种类度 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础dfs 与 bfs 区别dfs 搜索过程深搜三部曲所有可达路径广度优先搜索理论基础广搜的使用场景广搜的过程 岛屿数量孤岛的总面积沉…...
Java空指针异常处理:判空、Optional与Assert解析
在Java编程中,空指针异常(NullPointerException)是最常见的运行时错误之一。本文将深入探讨三种处理空指针异常的方法:传统的判空检查、Java 8引入的Optional类以及使用断言(Assert)。通过代码示例和应用场…...
【vim】vim编辑器如何设置行号
vim编辑器如何设置行号 一、**临时设置行号**二、永久设置行号2.1. **用户配置文件方式(针对当前用户)**2.2. **全局配置文件方式(谨慎使用,会影响所有用户)** 在Vim中设置行号有以下两种常见的方法: 一、…...
MySQL可直接使用的查询表的列信息
文章目录 背景实现方案模板SQL如何查询列如何转大写如何获取字符位置如何拼接字段 SQL适用场景 背景 最近产品找来,想让帮忙出下表的信息,字段驼峰展示,每张表信息show create table全部展示,再逐个粘贴,有点太耗费时…...
在线宠物用品|基于vue的在线宠物用品交易网站(源码+数据库+文档)
|在线宠物用品交易网站 目录 基于springbootvue的在线宠物用品交易网站 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&am…...
《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风,开源流体吊坠,物联网在军工领域的应用,Unicode字符压缩解压
周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: 《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风…...
使用LabVIEW的History功能实现队列数据的读取而不清空
在LabVIEW中,有多种方法可以读取队列中的数据而不清空它。使用 Dequeue Element 和 Enqueue Element 函数可以实现读取并重新插入数据回队列,但当需要处理大数据流或需要更动态的解决方案时,这种方法可能会变得繁琐。一个更高效的解决方案是利…...
电脑如何访问手机文件?
手机和电脑已经深深融入了我们的日常生活,无时无刻不在为我们提供服务。除了电脑远程操控电脑外,我们还可以在电脑上轻松地访问Android或iPhone手机上的文件。那么,如何使用电脑远程访问手机上的文件呢? 如何使用电脑访问手机文件…...
SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用
SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用 文章目录 SpringBoot实现定时任务,使用自带的定时任务以及调度框架quartz的配置使用一. 使用SpringBoot自带的定时任务(适用于小型应用)二. 使用调度框架…...
java上传图片功能实现
1 MinIO核心概念 下面介绍MinIO中的几个核心概念,这些概念在所有的对象存储服务中也都是通用的。 对象(Object) 对象是实际的数据单元,例如我们上传的一个图片。 存储桶(Bucket) 存储桶是用于组织对象的命…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
Git 命令全流程总结
以下是从初始化到版本控制、查看记录、撤回操作的 Git 命令全流程总结,按操作场景分类整理: 一、初始化与基础操作 操作命令初始化仓库git init添加所有文件到暂存区git add .提交到本地仓库git commit -m "提交描述"首次提交需配置身份git c…...
