一、软件版本

  • Qt 6.5.0
  • Qt Creator 10.0.1
  • mysql 8.0.31-arm64

二、安装Qt

通过Qt维护工具安装Qt

选择macOS和Source

阅读全文 »

一、Redis安装(MacOS)

1
2
3
4
# 使用Homebrew安装Redis
brew install redis
# 启用Redis
sudo brew services start redis

使用homebrew安装的Redis,配置文件的路径为:/opt/homebrew/etc/redis.conf

二、Redis操作

2.1 基本操作

2.1.1 数据库操作

redis默认有16个数据库,编号为0-15,且默认访问0号数据库。

select 数据库编号 选择指定数据库
dbsize 获取当前数据库键值对数量
flushdb 清空当前数据库
flushall 清空所有数据库
save 将数据保存至磁盘
bgsave 将数据异步保存至磁盘(后台:Background)
lastsave 获取最后一次成功保存的unix时间

2.1.2 通用数据操作

操作范围为当前数据库

set key value 增加一对键值对,如果key存在,则覆盖key的值
setnx key value 仅在key不存在时,添加一个键值对
set key value xx 仅在key存在时,覆盖key的值
mset key1 value1 [key2 value2 …] 批量增加一至多对键值对
msetnx key1 value1 [key2 value2 …] 批量版的setnx
get key 查看key的值
mget key1 [key2 …] 批量查看一至多个指定的key的值
getset key value 修改一个键值对并返回原值
del key1 [key2 …] 按key删除一至多个键值对
keys 格式 查看符合指定格式的key,*为通配符
exists key1 [key2 …] 查看是否存在一至多个指定的key
type key 按key查看value的数据类型
rename key1 key2 重命名key1,如果key2已经存在,其值会被覆盖
renamenx key1 key2 key2不存在时重命名key1
move key 数据库编号 按key将一个键值对移动到指定数据库
copy key1 key2 将key1的值拷贝给key2

2.2 字符串

2.2.1 基本操作

append key value 在原有的value后面追加内容
strlen key 查看字符串长度
getrange key startindex endindex 获取范围是[startindex,endindex]的子串

2.2.2 如果字符串的内容是整数

incr key 按key创建值为1的value,或者使value增加1(increase)1
incrby key 数值 按key使value增长(increase)给定数值
decr key 按key创建值为-1的value,或者使value减小1(decrease)1
decrby key 数值 按key使value减小(decrease)给定数值

2.2.3 临时键值对

生存时间time to live,缩写为ttl,指键值对距离被删除的剩余秒数

如果重新set,生存时间ttl将被重置

以下操作支持各种数据类型

expire key 秒数 设定一个生存时间
ttl key 查看生存时间剩余秒数(key不存在返回-2,永久键值对则返回-1)
pexpire key 毫秒数 毫秒版
pttl key 毫秒版ttl
persist key 持久化(取消生存时间)

以下操作仅支持字符串

set key value ex 秒数 (setex key 秒数 value) set + expire
set key value px 毫秒数 (psetex key 毫秒数 value) set + expire
set key value exat unix秒 设置一个unix秒的过期时间
set key value pxat unix毫秒 设置一个unix毫秒的过期时间
set key value keepttl set时不重置ttl

2.3 散列表(哈希表)

2.3.1 基本操作

hset key field value1 [field2 value2 …] 添加/修改一个键与一至多对字段和值
hget key field 按key和field获取一对value

一、什么是事务

  • 把一组业务当成一个业务来做,要么都成功,要么都失败!
  • 事务在项目的开发中,十分重要,涉及到数据的一致性问题。
  • 确保完整性和一致性。

事务的ACID原则:

  • 原子性
  • 一致性
  • 隔离性
    • 多个业务可能操作同一个资源,防止数据损坏。
  • 持久性
    • 事务一旦提交,就被持久化的写入数据库中。
阅读全文 »

一、使用Mybatis基本步骤

  • 编写实体类
  • 编写核心配置文件
  • 编写接口
  • 编写Mapper.xml
  • 测试

二、整合Mybatis

导入依赖

  • mybatis
  • mysql数据库
  • spring相关的
  • aop织入
  • mybatis-spring
阅读全文 »

一、什么是AOP

AOP(Aspect Oriented Programming)意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

通过动态代理的方式,将需要注入切面的对象进行代理,在进行调用的时候,将公共的逻辑直接添加进去,而不需要修改原有业务的逻辑代码,只需要在原来的业务逻辑基础之上做一些增强功能。

阅读全文 »

为什么要学习代理模式?因为这是SpringAOP的底层!

代理模式的分类:

  • 静态代理
  • 动态代理

一、静态代理

角色分析:

  • 抽象角色:一般会使用接口和抽象类来解决。
  • 真实角色:被代理的角色。
  • 代理角色:代理真实角色,代理真实角色后,我们会做一些附属的操作。
  • 客户:访问代理对象的人!
阅读全文 »

一、时空穿越

1.1 预览

通过双击历史提交记录,文件可以回到之前的状态,可以预览。

阅读全文 »

通过前一篇的ESP-01S实现智能灯控,我们可以快速上手智能灯控并获得不错的交互体验。但是在一些突发情况下(如:客户端在家庭中删除了设备),此时就要从墙中取出esp-01s重新刷入固件,操作就会非常繁琐。本文分析灯控装置的源码,并优化固件,以便在突发情况下对灯控装置配网与重置。

一、项目地址

二、源码

阅读全文 »

  • 自动装配是Spring满足bean依赖的一种方式!
  • Spring会在应用上下文中为某个bean寻找其依赖的bean。

在Spring中有三种装配的方式:

  1. 在xml中显示的配置
  2. 在java中显示配置
  3. 隐式的自动装配bean
阅读全文 »