文章目录
- Clickhouse
- 基础
- 实操
- windows + docker desktop 下载clickhouse
- springboot项目配置clickhouse
- Redis
- 谈下你对Redis的了解?
- Redis一般都有哪些使用的场景?
- Redis有哪些常见的功能?
- Redis支持的数据类型有哪些?
- Redis为什么这么快?
- 什么是缓存穿透?怎么解决?
- 什么是缓存雪崩?该如何解决?
- 怎么保证缓存和数据库数据的一致性?
- Redis持久化有几种方式?
- Redis内存淘汰策略有哪些?
- Redis常见性能问题和解决方案?
- Redis的过期键的删除策略?
- 我们知道通过expire来设置key的过期时间,那么对过期的数据怎么处理呢?
- Hash冲突怎么办?
- 什么是RDB内存快照?
- 常见问题
- 配置文件
- Jenkins
- 新建任务需要的配置pipeline
- Mybatis-plus
- 基础
- Zookeeper
- 基础
- vscode
- 基础
- 命令
- 实操
- vscode实现springboot项目搭建 (包括spring data jpa和sqlLite连接)
- Docker
- 基础
- 实操
- windows11 docker mysql
- Dockerhouse
- Dockerhub
- jdbc
- 基础概念
- jdbcTemplate
- xxl-Job
- 基础
- 实战
Clickhouse
基础
概念:
背后的研发团队是俄罗斯的yandex公司,该公司是搜索引擎公司。
是关系数据库的一种,与传统的mysql不同采用行式存储不同,该数据库采用的是列式存储。
实操
windows + docker desktop 下载clickhouse
参考博客:https://blog.csdn.net/qubernet/article/details/121013960
存在问题1:
**命令出现问题:**
PASSWORD=$(base < /dev/urandom | head -c8); echo "testroot"; echo -n "123456" | sha256sum | tr -d '-'
需要通过apt-get下载 coreutils包 和 openssl包
**账号密码:**
testroot
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
testroot
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
两次运行的结果都一样。
最新处理数据:
quber
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92
存在问题2:
问题描述:
按照参考博客配置,会出现:
std::exception. Code: 1001, type: std::out_of_range, e.what() = unordered_map::at: key not found (version 21.12.3.32 (official build))的问题
问题分析:
<quber>
这是XML元素的根标签,代表正在配置的ClickHouse用户名称,即“quber”。
<password_sha256_hex>
表示用户“quber”的密码经过SHA-256算法加密后得到此十六进制表示的哈希值;
<networks incl="networks" replace="replace">
incl=“networks” :指示可能有其他地方定义了一组通用的网络规则(如在父级配置或外部文件中),这里将包括(include)那些通用规则;
replace=“replace”:表示即使有通用规则存在,也应该完全替换(replace)为这里指定的网络规则,即只允许来自::/0的所有IPv6地址的连接。
<ip>::/0</ip>
指定了一个IPv6 CIDR块,::/0相当于IPv6中的“任意地址”,意味着用户可以从任何IPv6网络访问ClickHouse服务器。
<profile>quber</profile>
profile 指定了用户将使用的权限配置文件或访问控制配置文件的名称;
用户“quber”关联到同名的“quber”访问控制配置文件。
配置成quber不能实现访问,是否是quber的配置文件存在问题?待考证;
<quota>quber</quota>
quota 指定了用户将遵循的配额规则;
quber 同样表示用户将使用同名的配额配置文件;配额文件定义了该用户在资源使用方面的限制,如查询速率、磁盘空间使用量、内存使用量等,用于控制单个用户或用户组对系统资源的消耗。
配置成quber不能正常访问,是否不存在同名的配额配置文件?待考证;
想要配置成功,直接将profile和quota都配置成default即可。
存在问题3
描述:
vscode中采用SQLTools Clickhouse 插件,访问clickhouse数据库;
show databases; 命令可以使用
use xx数据库; 命令不可行,会报错;
scode使用 clickhouse插件 执行show databases 可以正常运行。但执行命令use xxx数据库 出现There is no session or session context has expired. 问题,给出具体原因以及解决方案
select * from 表1; 命令可以执行
分析:
具体原因未知。
存在问题4
描述:
多源数据库加载异常;
参考:
https://cloud.tencent.com/developer/article/2000075
springboot项目配置clickhouse
参考博客1:https://blog.csdn.net/csdn_xpw/article/details/121981940 待验证;
描述:
springboot项目+clickhouse配置信息,仅通过配置application.properties文件配置,数据库不能实现访问;
需要创建一个类A具有clickhouse涉及变量,然后被@ConfigurationProperties修饰;
由于配置了链接池druid,则需要创建一个配置类B,将A作为属性创建到B类中,然后创建返回DruidDataSource对象的方法。
分析:
原因在于:Properties中配置了druid连接池,但是在代码中没有配置。
Redis
谈下你对Redis的了解?
Redis,全称为Remote Dictionary Server(远程数据服务),是一款开源的基于内存的键值对存储系统,其主要被用作高性能缓存服务器使用,是一个非关系型、日志型、key-value数据库;
Redis一般都有哪些使用的场景?
使用场景:缓存、排行榜、计数器/限速器、好友关系(点赞/共同好友)、简单的消息队列(订阅发布)、Session服务器。
Redis有哪些常见的功能?
Redis支持的数据类型有哪些?
Redis为什么这么快?
什么是缓存穿透?怎么解决?
什么是缓存雪崩?该如何解决?
怎么保证缓存和数据库数据的一致性?
Redis持久化有几种方式?
Redis内存淘汰策略有哪些?
Redis常见性能问题和解决方案?
Redis的过期键的删除策略?
我们知道通过expire来设置key的过期时间,那么对过期的数据怎么处理呢?
Hash冲突怎么办?
什么是RDB内存快照?
常见问题
配置文件
redis:
enable: true
// 意图是控制是否启用Redis功能
Jenkins
新建任务需要的配置pipeline
该代码是Jenkinsfile,用于定义一个持续集成/持续交付(CI/CD)的流水线;
pipeline {
agent any
// 表示该流水线可以在任何可用的Jenkins节点上执行;
// 定义变量
// JOB_NAME 任务名称,对应容器服务名,例如:market_ods/mms_api
// RegistryUrl 在全局环境变量中配置
// ImageVer 容器版本,格式yyyyMMddHHmm,插件 Timestamp
//
// 创建访问Git全局凭据, credentialsId: 'gitpw-3789060f-ecb5-468e-c161-32076710d930'
// 创建访问私有镜像仓库全局凭据, credentialsId: 'imagepw-8a88451c-0565-6f0d-694c-fa20344a3179'
environment { // 定义环境变量
PLAT="as" // 定义平台
PROJECT="jenkins_xxx" // 定义项目程序
PROJECT_GIT="project_xxx" // 定义项目程序
GIT_URL="http://gitlab地址/${PROJECT_GIT}.git" // git仓库链接
JAVA_HOME="/usr/local/jdk1.8.0_361"
MAVEN_HOME="/usr/local/maven3.6"
PATH="$MAVEN_HOME/bin:$PATH"
}
options{
// 插件:Build Timestamp
timestamps() // 用于在构建日志中添加时间戳;
}
parameters {
// 插件:Git Parameter http://www.manongjc.com/detail/63-ncmakycccpkqxsr.html
gitParameter (name: 'Git_Branch', defaultValue: 'master', type: 'PT_BRANCH', useRepository: env.GIT_URL, description: '请选择项目GIT分支', branchFilter: 'origin/(.*)', branch:'', quickFilterEnabled: true, selectedValue: 'TOP', sortMode: 'NONE', tagFilter: '*')
// 构建Git_Rranch,用户可以在构建时选择不同的Git分支。
}
stages { // 定义流水线的各个阶段;
stage('脚本执行环境'){
steps {
sh """
echo "$JAVA_HOME"
java --version
mvn --version
git version
docker -v
"""
script {
buildName "#${BUILD_NUMBER} ${RegistryUrl}/${PLAT}/${PROJECT}:${ImageVer}"
}
}
}
// 删除当前目录(${WORKSPACE})下内容,通常用在构建完毕之后清空工作空间
stage('Delete Workspace') {
steps {
echo "清理工作目录: ${WORKSPACE}"
deleteDir()
}
}
// 拉取代码 http://www.manongjc.com/detail/63-ncmakycccpkqxsr.html
stage('Checkout') {
steps {
checkout([$class: 'GitSCM',
branches: [[name: "${params.Git_Branch}"]],
userRemoteConfigs: [[credentialsId: 'gitpw-3789060f-ecb5-468e-c161-32076710d930', url: env.GIT_URL]],
submoduleCfg: [],
doGenerateSubmoduleConfigurations: false,
extensions: [[$class: 'CloneOption', depth: 1, noTags: false, reference: '', shallow: true]]
])
}
}
// mvn打包
stage('Packaging project') {
steps {
script {
sh 'mvn clean install'
}
}
}
//构建并推送镜像
stage('Build & Push Image to nexus') {
steps {
script {
// 第一个参数是私有仓库地址,注意要带http(s),第二个参数是账号密码登录凭证,需要提前创建
docker.withRegistry("https://${RegistryUrl}", 'imagepw-8a88451c-0565-6f0d-694c-fa20344a3179') {
def image = docker.build("${RegistryUrl}/${PLAT}/${PROJECT}:${ImageVer}", "${WORKSPACE}")
image.push()
}
}
}
}
stage('Deploy to the Target server') {
steps {
echo '部署到目标服务器'
withCredentials([file(credentialsId: 'k8s_config', variable: 'KUBECONFIG')]) {
sh 'kubectl set image deployment/${PROJECT} ${PROJECT}=${RegistryUrl}/${PLAT}/${PROJECT}:${ImageVer} -ndev'
}
}
}
}
}
Mybatis-plus
基础
是什么?
是一个方便操作数据库的代码工具;
怎么使用?
1. 依赖包导入:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
2. 创建数据对象:
public class object{}
3. 创建xxxMapper
//在对应Mapper上面继承基本接口BaseMapper
@Repository //代表持久层
public interface xxxMapper extends BaseMapper<User> {
//继承之后就是所有东西已经把连接mybatis,配置mapper.xml文件,service-controller层都搞定了
}
4. 项目启动类添加扫描包
在springboot的启动类上添加注解;
@MapperScan("具体包的位置")
5. 配置文件添加语句,了解mapper具体执行过程,在console打出
在mybatis-config.xml文件中,配置:
<setting name="logImpl" value="STDOUT_LOGGING" />
日志实现方式为输出到控制台(STDOUT_LOGGING) // stdout_logging
Zookeeper
基础
是什么?
Leaf分布式ID生成系统在Spring Boot或类似的微服务架构中的集成配置。Leaf是由滴滴出行开源的一套分布式ID生成解决方案,旨在为分布式系统提供高效、高可用的ID生成服务。
配置内容?
leaf:
// Leaf ID生成系统的顶级配置
snowflake:
// Leaf提供了两种ID生成模式,一种是基于Twitter Snowflake算法的snowflake模式,另一种是基于数据库的segment模式。这里的配置是针对Snowflake模式的。
enabled: true
// 启用Snowflake模式的ID生成器
name: associated_api
// Snowflake worker的名称,用于标识不同的业务或者服务。在多服务共用一套Leaf集群的情况下,通过名称区分不同来源的ID请求,确保ID的唯一性和可追踪性。
zkAddress: 127.0.0.1:2181
// 配置了Zookeeper的地址。Leaf的Snowflake模式依赖于Zookeeper作为服务发现和分布式协调工具,用来管理worker的分配与状态同步。
vscode
基础
命令
启动mysql命令
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:latest
实操
vscode实现springboot项目搭建 (包括spring data jpa和sqlLite连接)
参考博客:https://blog.csdn.net/zyd573803837/article/details/109263219
提交代码
整体过程是:提交-推送;
git使用介绍博客:https://blog.csdn.net/Shids_/article/details/112250700
提交很慢,解决博客:https://blog.csdn.net/m0_60322614/article/details/133017449
docker启动mysql,如何创建数据库以及查看当前本机有哪些数据库?
参考博客:
https://blog.csdn.net/LegendaryChen/article/details/136050305?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-136050305-blog-132284868.235%5Ev43%5Epc_blog_bottom_relevance_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-136050305-blog-132284868.235%5Ev43%5Epc_blog_bottom_relevance_base1&utm_relevant_index=5
Docker
基础
实操
windows11 docker mysql
参考博客1:https://blog.csdn.net/nmajsjpy/article/details/130183104
参考博客2:https://blog.csdn.net/joeyoj/article/details/136427362
Dockerhouse
Dockerhub
jdbc
参考博客:
https://blog.csdn.net/m0_37761437/article/details/110468944
基础概念
是什么?
全称:Java DataBase Connectivity(Java 语言连接数据库);
是sun公司制定的接口,在java.sql.*包下;
每个数据库底层实现原理不同,定义统一的接口,不同数据库厂商编写各自的实现类,有利于开发者使用;
其中各数据库厂商的驱动中含有JDBC的实现类,即都在各自的jar包里,使用时需要进行下载;
驱动 = jar包 ==》 含有JDBC实现类;
JDBC编程六步走?
1 注册驱动
告诉Java程序,要连接的是哪个品牌的数据库
2 获取连接
表示JVM的进程和数据库进程之间的通道打开了
3 获取数据库操作对象
执行sql语句的对象
4 执行sql语句
DQL DML
5 处理查询结果集
只有4执行的是select,才有5
6 释放资源
java和数据库属于进程间的通信,开启之后一定要关闭
jdbcTemplate
jdbcTemplate配置:
public JdbcTemplate jdbcTemplate(@Autowired DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
// 为了创建一个可以用来执行数据库操作的JdbcTemplate实例,同时避免了手动管理数据库连接的繁琐过程;
// @Autowired注解通常直接应用于字段或者构造器参数上,但是这里是在方法参数上使用,这表明Spring框架将会自动调用此方法,并将DataSource类型的Bean注入到方法中。然后,此方法将返回一个使用该DataSource实例化的JdbcTemplate对象。
jdbcTemplate使用1:
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i)
throws SQLException {
ps.setInt(1, keys.get(i).getId());
ps.setString(2, keys.get(i).getLzKey());
ps.setInt(3, keys.get(i).getOriginIndex());
ps.setLong(4, keys.get(i).getCreateTime());
}
@Override
public int getBatchSize() {
return keys.size();
}
});
// 理解:
jdbcTemplate.batchUpdate(sql,...) --》 执行批量更新操作;
new BatchPreparedStatementSetter() { ... } --》 匿名内部类,实现这个接口,重写两个方法;
jdcbTemplate使用2:
List<LzKey> results = jdbcTemplate.query(sql, args,new RowMapperResultSetExtractor<>(LZ_KEY_MAPPER, 1));
// 理解:
jdbcTemplate.query(sql, args,...) --》 执行sql查询操作返回结果集;
sql = 查询语句的字符串;
args = 数组,即sql中的占位符;
参数3 = 如何处理查询的结果;
new RowMapperResultSetExtractor<>(LZ_KEY_MAPPER, 1)
是一个匿名内部类,继承RowMapperResultSetExtractor类,该类实现了ResultSetExtractor接口;
将ResultSet映射到java对象列表中;
参数1:一个RowMapper实例,将ResultSet中的一行映射到一个LzKey对象;
参数2:指定预期的行数,意味着结果集中最多只有一行数据;
jdbcTemplate使用3:
jdbcTemplate.queryForObject(sql, Integer.class);
// 理解:
用于执行sql的一个查询语句,并将结果映射为一个单一对象,且对象的类型是Integer。
xxl-Job
基础
@XxlJob 以声明的形式定义和管理任务,无需编写复杂的调度逻辑,简化了定时任务和分布式任务的开发过程;
实战
使用1:
@XxlJob(value = "shardFetchKeysIntoCache")
// 理解:
注解@XxlJob,用于标识一个任务处理方法;
value属性,给这个任务命名;