普中51单片机:DS1302时钟芯片讲解与应用(十)
文章目录
- 引言
- 基本特性
- 什么是RAM?
- 什么是涓流充电?
- 电路图和引脚说明
- 通信协议以及工作流程
- 寄存器
- 控制寄存器
- 日历/时钟寄存器
- DS1302读写时序
- 代码演示——数码管显示时分秒
引言
DS1302 是一款广泛使用的实时时钟 (RTC) 芯片,具有低功耗、内置电池备份和串行通信接口等优点。它常用于需要精确时间保持的应用中,如电子时钟、数据记录器和嵌入式系统。
基本特性
DS1302是一款高性能、低功耗的实时时钟芯片,兼容TTL电平,可以直接与单片机的IO口连接。以下是其主要特性:
- 时间保持功能:DS1302 可以保持秒、分、时、日、周、月、年等时间信息,并能自动调整月份天数和闰年。
- 串行通信接口:使用简单的串行接口 (SPI) 进行通信,仅需三根线:RST(复位)、SCLK(串行时钟)和 I/O(串行数据)。
- 低功耗:工作电流低,适合电池供电的应用。工作电压范围为2.0V至5.5V,工作电流小于300nA。
- 内置 RAM:31 字节的静态 RAM,用于存储用户数据。RAM数据时有两种方式:单字节传送或多字节传送(字符组的方式)
- 电池备份:支持备用电池,确保在主电源断电时继续保持时间。
- 涓流充电:当主电源关闭或电压不足时,DS1302可以通过涓流充电寄存器从备用电源(VCC2)获取电力,维持时钟的运行和RAM中的数据。
什么是RAM?
RAM,全称为随机存取存储器(Random Access Memory),是计算机中的一种重要存储器。它的主要特点是可以随时读写数据,并且速度非常快。
RAM是计算机的“短期记忆”。当你打开一个程序或文件时,计算机会将其数据加载到RAM中,以便快速访问和处理。例如,当你在编辑一篇文档时,文档的内容会暂时存储在RAM中,这样你可以快速进行编辑和保存。RAM是易失性存储器,这意味着一旦断电,存储在RAM中的数据就会丢失。这就像是你在白板上写字,一旦擦掉(断电),字迹就消失了。RAM与CPU直接交换数据,速度非常快。它是计算机运行速度的重要因素之一。更多的RAM意味着计算机可以同时处理更多的任务,而不会变慢。
在DS1302时钟芯片中,31字节的静态RAM(SRAM)是一个小型的存储区域,用于存储用户数据。静态表示SRAM中的数据只要保持通电,就可以一直保存,不需要像动态RAM(DRAM)那样定期刷新。31字节表示这个SRAM可以存储31个字节的数据,总共248位(31 x 8 = 248位)。
假设你有一个小笔记本,每一页可以写8个字母,那么31字节的SRAM就相当于这个笔记本有31页,每页可以写8个字母。你可以随时在任何一页上写字或擦掉重写。
什么是涓流充电?
想象一下,你有一个珍贵的水晶杯,需要用极细的水流来清洗,以防止水流过猛导致损坏。涓流充电也是同样的道理。这是一种以非常低的电流对电池进行充电的方法,目的是在电池接近充满时,继续以小电流充电,确保电池完全充满而不受损。
电池充电通常有三个阶段:恒流充电、恒压充电和涓流充电。当电池电量接近满电时,充电器会自动切换到涓流模式,这时候的电流非常小,就像是给电池做最后的“润色”。
在许多电子设备中,如手机、笔记本电脑,甚至一些特殊的芯片(例如DS1302时钟芯片)都采用了涓流充电技术。这些设备在主电源断电后,可以依靠涓流充电来维持电池健康,保证设备在关键时刻不掉链子。
电路图和引脚说明
引脚名 | 引脚顺序 | 作用 |
---|---|---|
VCC1 | 1 | 主电源电压输入 |
VCC2 | 8 | 备用电源电压输入(电池) |
X1、X2 | 2,3 | 外部晶振引脚 |
GND | 4 | 地 |
SCLK | 7 | 串行时钟输入(串行通信) |
I/O | 6 | 串行数据输入/输出 |
CE | 5 | 控制使能 |
详细作用说明
- VCC1 (1号引脚):这是DS1302的主电源输入引脚。在正常工作时,它接收来自外部电源的电压。如果VCC1的电压高于VCC2(备用电源),DS1302将使用VCC1作为其电源。
- VCC2 (8号引脚):此引脚通常连接到一个电池,作为备用电源。在主电源VCC1失效的情况下,VCC2可以继续为DS1302提供电源,确保时间信息不会丢失。
- X1、X2 (2号和3号引脚):这两个引脚需要外接一个32.768kHz的晶振。晶振为DS1302提供时钟信号,确保时间的准确性。X1是输入端,X2是输出端(在某些应用中可能不使用)。
- GND (4号引脚):这是DS1302的接地引脚,用于建立电路的参考电位,确保电路中的信号有正确的电压水平。
- SCLK (7号引脚):此引脚接收来自微控制器或其他控制设备的串行时钟信号。数据传输的时序由SCLK控制,数据在SCLK的上升沿或下降沿被读取或写入,具体取决于通信协议。
- I/O (6号引脚):这个双向引脚用于在DS1302和外部设备之间传输数据。在写入操作中,数据通过此引脚输入到DS1302;在读取操作中,数据从DS1302输出到此引脚。
- CE (5号引脚):CE引脚用于控制DS1302的激活状态。当CE引脚被拉高(即逻辑1)时,DS1302芯片被激活并开始工作;当CE引脚被拉低(即逻辑0)时,芯片进入低功耗状态,停止工作。
通信协议以及工作流程
DS1302 通过三线接口 (SPI) 与主控设备通信。通信过程如下:
- 启动通信:将 RST 引脚置高。
- 发送命令字节:通过 SCLK 引脚发送一个命令字节,指定读写操作和寄存器地址。
- 数据传输:通过 I/O 引脚进行数据读写。
- 结束通信:将 RST 引脚置低。
寄存器
对DS1302
的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有:7 个寄存器与日历、时钟相关,存放的数据位为 BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与 RAM 相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。
控制寄存器
用于存放DS1302控制命令的,DS1302的RST复位引脚,如果是高电平,可以开始工作,第一个写入的自己就是控制命令,它用于对DS1302读写进行控制。格式如下:
控制寄存器的字节格式中,最高位(D7)固定为1,这是命令有效的标志。第六位(D6)如果为0
则表示存取日历时钟数据,为1
表示存取RAM数据。接下来的五位(D5~D1)是地址位,用于选择将要进行读写操作的寄存器。最低位(D0)是读写选择位,0表示写入,1表示读取。
控制字总是从最低位开始输出。在控制字指令输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从最低位(0位)开始。同样,在紧跟8位的控制字指令后的下一个SCLK脉冲的下降沿,读出DS1302的数据,读出的数据也是从最低位到最高位。
日历/时钟寄存器
DS1302时钟芯片的日历/时钟寄存器是其核心功能之一,用于存储和提供当前的日期和时间信息。存放是以BCD码格式进行操作。
- 秒寄存器(地址0x80):存储秒的值,格式为BCD码。低四位表示秒的个位,第五位到第七位表示秒的十位。第八位(CH)是时钟运行标志位,当CH=0时,时钟运行;当CH=1时,时钟暂停。
- 分寄存器(地址0x82):存储分钟的值,格式为BCD码。低四位表示分钟的个位,第五位到第七位表示分钟的十位。最高位(第八位)固定为
0
- 小时寄存器(地址0x84):存储小时的值,格式为BCD码。低四位表示小时的个位,第五位到第七位表示小时的十位。第八位(12/24)用于选择12小时制或24小时制。当12/24=0时,为24小时制;当12/24=1时,为12小时制,且第5位表示上午(AM)或下午(PM)。
- 日期寄存器(地址0x86):存储日期的值,格式为BCD码。低四位表示日期的个位,第五位到第七位表示日期的十位。
- 月份寄存器(地址0x88):存储月份的值,格式为BCD码。低四位表示月份,第五位表示月份的十位。
- 星期寄存器(地址0x8A):存储星期的值,格式为BCD码。低三位表示星期几,从星期一到星期日。
- 年份寄存器(地址0x8C):存储年份的值,格式为BCD码。低四位表示年份的个位,第五位到第七位表示年份的十位。DS1302的年份是从2000年开始的,因此设置年份时需要减去2000。
- 写保护寄存器:DS1302具有写保护功能,低七位全部为固定0,WP用于控制是否开启写保护功能,WP逻辑
1
为开启,只能读不能写,如果要进行写操作,将WP设置为逻辑0
,关闭保护进行写入。 - 慢充电寄存器:DS1302支持涓流充电,当主电源关闭或电压不足时,DS1302可以通过涓流充电寄存器从备用电源(VCC2)获取电力,维持时钟的运行和RAM中的数据。通过特定的控制命令,可以启用或禁用涓流充电功能。这允许用户根据需要控制充电过程,以节省电力或延长备用电源的使用寿命。
BCD码:所有日历/时钟寄存器中的数据都以BCD码格式存储。BCD码是一种二进制编码的十进制数,每四位二进制数表示一个十进制数字(0~9)。
DS1302读写时序
数据是从低位开始写入,三线制SPI的接口:CE,SELK、I/O,当对DS1302操作的时候,CE要设置为"1"(高电平),操作完成之后对CE设置“0”(低电平),等待下一次操作。SCLK为上升沿的时候写入数据。当发送完一个控制命令字节。下一个下降沿开始进行数据的读取。
代码演示——数码管显示时分秒
初始化显示时间:13时51分47秒。实物图:SCLK连接到P36引脚,IO连接到P34引脚,CE连接到P35引脚,具体可查看所使用的开发板电路图进行查看。关于数码管讲解请查看:普中51单片机:数码管显示原理与实现详解(四)
#include <REGX52.H>
#include <intrins.h>sbit DS1302_RST = P3^5;
sbit DS1302_SCLK = P3^6;
sbit DS1302_IO = P3^4;//共阴极数码管显示 0~F 的段码数据
unsigned char gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void DelayXms(unsigned int xms) //@12.000MHz
{unsigned char data i, j;while(xms){i = 2;j = 239;do{while (--j);} while (--i);xms--;}
}void Init_Port(unsigned char Location)
{ switch(Location){case 1:P2_2 = 0;P2_3 = 0;P2_4 = 0;break;case 2:P2_2 = 1;P2_3 = 0;P2_4 = 0;break;case 3:P2_2 = 0;P2_3 = 1;P2_4 = 0;break;case 4:P2_2 = 1;P2_3 = 1;P2_4 = 0;break;case 5:P2_2 = 0;P2_3 = 0;P2_4 = 1;break;case 6:P2_2 = 1;P2_3 = 0;P2_4 = 1;break;case 7:P2_2 = 0;P2_3 = 1;P2_4 = 1;break;case 8:P2_2 = 1;P2_3 = 1;P2_4 = 1;break;}
}void DS1302_write_byte(unsigned char addr,unsigned char dat)
{unsigned char i = 0;DS1302_RST = 0;_nop_();//延时一微秒DS1302_SCLK = 0;_nop_();//延时一微秒DS1302_RST = 1;//通信开始_nop_();for(i = 0;i < 8;i++)//写入控制{DS1302_IO = addr&0x01;//从低位开始addr>>=1;DS1302_SCLK = 1;_nop_();//延时一微秒DS1302_SCLK = 0;_nop_();}for(i = 0;i < 8;i++)//写入数据{DS1302_IO = dat&0x01;//从低位开始dat>>=1;DS1302_SCLK = 1;_nop_();//延时一微秒DS1302_SCLK = 0;_nop_();}DS1302_RST = 0;//通信结束
}//读
unsigned char DS1302_read_byte(unsigned char addr)
{unsigned char i = 0;unsigned char temp = 0;unsigned char value = 0;DS1302_RST = 0;_nop_();//延时一微秒DS1302_SCLK = 0;_nop_();//延时一微秒DS1302_RST = 1;//通信开始for(i = 0;i < 8;i++)//写入控制{DS1302_IO = addr&0x01;//从低位开始addr>>=1;DS1302_SCLK = 1;_nop_();//延时一微秒DS1302_SCLK = 0;}for(i = 0;i < 8;i++)//读取数据{temp = DS1302_IO;//从低位开始value=(temp<<7)|(value>>1);DS1302_SCLK = 1;_nop_();//延时一微秒DS1302_SCLK = 0;}DS1302_RST = 0;_nop_(); DS1302_SCLK=1;//对于实物中,P3.4口没有外接上拉电阻的,此处代码需要添加,使数据口有一个上升沿脉冲。_nop_();DS1302_IO = 0;_nop_();DS1302_IO = 1;_nop_(); return value;
}//秒分时日月周年
unsigned char gWrite_rtc_addr[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
unsigned char gRead_rtc_addr[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};unsigned char gDS1302_time[]={0x47,0x51,0x13,0x24,0x07,0x06,0x24};void Init_Ds1302(void)
{unsigned char i = 0;//关闭写保护0x8e表示写保护寄存器DS1302_write_byte(0x8e,0x00);for(i = 0;i < 7;i++){DS1302_write_byte(gWrite_rtc_addr[i],gDS1302_time[i]);}//打开写保护DS1302_write_byte(0x8e,0x80);
}void ds1302_read_time(void)
{unsigned char i = 0;for(i = 0;i < 7;i++){gDS1302_time[i] = DS1302_read_byte(gRead_rtc_addr[i]);}
}void main()
{unsigned char i = 0;unsigned char time_buf[8];Init_Ds1302();//设置时间 while(1){ds1302_read_time();//读取时间time_buf[0] = gsmg_code[gDS1302_time[2]/16];//时 转换为数码管 16进制获取第一位time_buf[1] = gsmg_code[gDS1302_time[2]&0x0f];//时 转换为数码管 16进制获取第二位time_buf[2] = 0x40;// -time_buf[3] = gsmg_code[gDS1302_time[1]/16];//分 转换为数码管 16进制获取第一位time_buf[4] = gsmg_code[gDS1302_time[1]&0x0f];//分 转换为数码管 16进制获取第二位time_buf[5] = 0x40;// -time_buf[6] = gsmg_code[gDS1302_time[0]/16];//秒 转换为数码管 16进制获取第一位time_buf[7] = gsmg_code[gDS1302_time[0]&0x0f];//秒 转换为数码管 16进制获取第二位for(i = 1; i <= 8;i++){Init_Port(i);P1 = time_buf[i-1];DelayXms(1);P1 = 0x00;//消影} }
}
相关文章:

普中51单片机:DS1302时钟芯片讲解与应用(十)
文章目录 引言基本特性什么是RAM?什么是涓流充电? 电路图和引脚说明通信协议以及工作流程寄存器控制寄存器日历/时钟寄存器 DS1302读写时序代码演示——数码管显示时分秒 引言 DS1302 是一款广泛使用的实时时钟 (RTC) 芯片,具有低功耗、内置…...
Preact:轻量级替代React的选择
Preact是一个轻量级的JavaScript库,它提供了与React相似的API,但体积更小,性能更优。Preact的核心理念是尽可能地保持与React的兼容性,同时去除不必要的部分,使其成为一个理想的替代品,尤其是在对性能和包大…...

全栈嵌入式C++、STM32、Modbus、FreeRTOS和MQTT协议:工业物联网(IIoT)可视化系统设计思路(附部分代码解析)
项目概述 随着工业4.0时代的到来,工业物联网(IIoT)在提高生产效率、降低运营成本和实现智能制造方面得到了广泛应用。本项目旨在开发一个全面的工业物联网监控系统,能够实时监测设备的温度、压力、振动和电流等参数,并…...
Greenplum数据库中的数据倾斜问题及处理方法
一、数据倾斜问题的原因 数据分布不均匀:当数据在表的分区或分片中不均匀分布时,会导致某些分区或分片的数据量较大,从而引发数据倾斜问题。连接键存在热点数据:如果连接操作中使用的键值存在热点数据,即某些键值出现…...
缓存设计理论
缓存设计理论是一个涉及多个方面的复杂主题,主要目标是优化数据访问速度,减少数据访问延迟,提高系统性能,并同时保持数据的一致性和系统的稳定性。以下是从几个关键方面对缓存设计理论的概述: 一、缓存的作用与目的 …...

IDEA-安装插件 驼峰下划线转换
第一步:安装 file-settings-plugins-在marketplace搜索“CamelCase”-点击安装 第二步:设置 file-settings-editor-camel_case 第三步:使用 选中想转换的遍历 使用快捷键 Alt Shift U...
乾坤: 微前端项目切换时样式闪动(从无样式变为正常样式需要等 css chunk 文件加载完成, 加载延时受网速影响)
背景: 点击基座项目页面左侧目录, 进入微前端子项目页面, 会有短暂的样式未加载效果一闪而过, 造成页面闪烁或更严重的其他样式错位问题 定位: 同事查了 qiankun git 项目的 issue: https://github.com/umijs/qiankun/issues/219 , 找到解决方案 解决: 项目 webpack 打包配…...

《电子元器件之固态电容》
固态电容全称是固态铝质电解电容,它与普通液态铝质电解电容的最大差别在于采用了不同的介电材料。液态铝电容介电材料为电解液,而固态电容的介电材料是固态的导电性高分子材料。 固态电容和液态电容,从外观上区分,就是固态电容顶…...

PLC 远程下载网关
一、 产品概述 SSF-BOX-100 是三石峰科技有限公司推出的工业级 PLC 远程下载网关,主 要用于 PLC 远程调试、程序上下载,为用户提供一种简单可靠的远程维护方案。 1.1 SGBOX 软件 SGBOX 软件是 SSF-BOX-100 网关的配套软件,可以查看设备状态…...

【Django】 读取excel文件并在前端以网页形式显示-安装使用Pandas
文章目录 安装pandas写views写urls安装openpyxl重新调试 安装pandas Pandas是一个基于NumPy的Python数据分析库,可以从各种文件格式如CSV、JSON、SQL、Excel等导入数据,并支持多种数据运算操作,如归并、再成形、选择等。 更换pip源 pip co…...

自动控制:带死区的PID控制算法
带死区的PID控制算法 在计算机控制系统中,为了避免控制动作过于频繁,消除因频繁动作所引起的振荡,可采用带死区的PID控制。带死区的PID控制通过引入一个死区,使得在误差较小的范围内不进行控制动作,从而减少控制系统的…...

橙单后端项目下载编译遇到的问题与解决
今天下载orange-admin项目,不过下载下来运行出现一些问题。 1、涉及到XMLStreamException的几个类都出现下面的错误 The package javax.xml.stream is accessible from more than one module: <unnamed>, java.xml ctrl-shift-t 可以找到这个引入是哪些包里…...

EasyExcel 初使用—— Java 实现多种写入 Excel 功能
前言 大家好,我是雪荷。之前有一篇博客(EasyExcel 初使用—— Java 实现读取 Excel 功能_java easyexcel.read-CSDN博客)介绍了 Java 如何读取 Excel 表格,那么此篇博客就和大家介绍下 Java 如何利用 EasyExcel 写入 Excel。 Ea…...
MySQL 和 SQL Server 中的连表更新 UPDATE JOIN 写法比较
MySQL 和 SQL Server 中的连表更新 UPDATE JOIN 写法比较 一、前言1. MySQL 写法1.1 解释 2. SQL Server 写法2.1 解释 二、总结 一、前言 在关系型数据库管理系统(RDBMS)中,使用 UPDATE 语句进行表格更新是非常常见的操作。特别是当需要根据…...

手把手教你FL Studio 24.1.1.4234中文破解安装激活图文激活教程
在数字化音乐制作的浪潮中,FL Studio 24.1.1.4234中文破解版的发布无疑又掀起了一股新的热潮。这款由Image-Line公司开发的数字音频工作站(DAW)软件,以其强大的功能和易用的界面,赢得了全球无数音乐制作人的青睐。本文…...

使用Spring Boot与Spire.Doc实现Word文档的多样化操作
博客主页: 南来_北往 系列专栏:Spring Boot实战 前言 使用Spring Boot与Spire.Doc实现Word文档的多样化操作具有以下优势: 强大的功能组合:Spring Boot提供了快速构建独立和生产级的Spring应用程序的能力,而Spire.Doc则…...

从食堂采购系统源码到成品:打造供应链采购管理平台实战详解
本篇文章,笔者将详细介绍如何从食堂采购系统的源码开始,逐步打造一个完备的供应链采购管理平台,帮助企业实现采购流程的智能化和高效化。 一、需求分析与规划 一般来说,食堂采购系统需要具备以下基本功能: 1.供应商…...

在window将Redis注册为服务
将redis注册为系统服务,开启自启动 安装服务 默认注册完之后会自动启动,在window中的服务看一下,如果启动类型为自动,状态是自动运行则启动完成。如果是手动,需要右键属性调整为自动,在点击启动,…...
PHP商城案例
http://www.e9933.com/...
Linux:bash在被调用时会读取哪些启动文件?
(本文基于5.1-6ubuntu1.1版本的bash) bash在被调用时会读取哪些启动文件?要回答这个问题,首先要弄清楚两个概念:login shell和interactive shell。 login shell login shell是指这样的shell: 第一个命令行参数(进程…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...