Redis数据类型
- key:String类型,最大512MB
- value:
- Binary-safe strings(字符串/整数)
- Lists 按照插入顺序保存的字符串集合
- Sets 元素唯一 未排序的集合
- Sorted sets 每个元素关联一个浮点数(score),元素根据这个score排序
- Hashes
- Bit arrays
- HyperLogLogs
- Streams
修改启动参数transaction-isolation
1 | [mysqld] |
1 | CREATE USER 'username'@'host' IDENTIFIED BY 'password'; |
1 | set password for root@localhost = password('123'); |
1 | GRANT privileges ON databasename.tablename TO 'username'@'host' |
直白来讲,数据库就是一个个文件组成(二进制文件)的,要对这些文件执行SELECT、INSERT、DELETE等操作需要通过数据库实例来完成。
MySQL由客户端,连接池组件(Connection Pool)、缓冲组件(Caches&Buffer)、查询分析器(Parser)、SQL优化器(Optimizer)、插件式存储引擎(Pluggable Storage Engines)、SQL接口组件(SQL Interface),管理服务和工具组件(Management Services & Utilities),物理文件(File System)构成。
图中的Connectors为不同语言实现的与MySQL交互的连接器用来建立连接执行SQL
当一条查询语句的执行过程如下图所示
存储引擎是基于表的而不是数据库。
一转眼2020年了,最近春节期间瘟疫肆虐,在家猫着无聊再学习一波JVM相关知识做一下笔记,争取年后能够成功跳槽。
在Java中类的加载是在程序运行中进行的,因此会对程序运行产生一些性能开销,但是增加了程序的灵活性。
类的加载是指将类的.class文件的二进制数据读入到内存中,将其放在运行时数据区的方法区中,然后在内存中创建一个java.lang.Class对象用来封装类在方法区内的数据。(规范并未规定Class对象放在哪里,hotspot将Class对象放在方法区中)
加载 -> 连接 -> 初始化 -> 使用 -> 卸载 其中 连接又分为 “验证 -> 准备 -> 解析”三个阶段
符号引用:
直接引用:
主动使用:会对类进行初始化
1.创建类的实例
2.访问某个类或接口的静态变量,或者对该静态变量赋值
3.调用类的静态方法
4.反射
5.初始化一个类的子类
6.Java虚拟机启动时被标记为启动类的类(Java Test)
7.JDK1.7开始提供的动态语言支持 java.lang.invoke.MethodHandle实例的解析结果REF_getStatic,REF_putStatic,REF_invokeStatic句柄对应的类没有初始化,则初始化。
若常量在编译阶段可以确定会将其存入到调用这个常量的方法所在的类的常量池中,因此调用这个常量不会出发常量所在类的初始化。
若常量在编译阶段不确定其值不会放到常量池中,程序运行时会主动使用这个常量所在类,导致初始化。
对于数组实例,其类型为JVM在运行中动态生成的,表示为[Lcom.xxx.abc这种形式。动态生成的类型,其父类型就是Object。对于数组来说,JavaDoc经常将构成数组的元素为Component,实际上就是将数组降低一个维度后的类型。
-XX:+TraceClassLoading 追踪类的加载信息并打印
折腾了几天的minikube几天终于把dashboard跑起来了😖😖,Google Bing GitHub上各种搜最后却通过更换了个老版本1.5.0搞定😅,由于我国特有网络问题,安装文件下载起来也显的异常艰难,用的移动宽带GitHub下载简直比蜗牛还慢🤦♂️
在此记录下这糟心的安装过程吧
首先找了个梯子参照着官方文档中的步骤一步步安装,kuberctl和minikube安装顺利完成。由于我使用的VirtualBox的虚拟机在虚拟机中跑minikube,在启动minikube时需要使用minikube start --vm-driver=none大致意思是说使用该参数启动会使kubernetes组件运行在当前主机上而不是虚拟机中。
至此一切都还算顺利,然后就想着看看dashboard长啥样,结果当启动dashboard的时候问题就来了,每次运行minikube dashboard都会报下面的503错误。
1 | http://127.0.0.1:43249/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/%20is%20not%20accessible:%20Temporary%20Error:%20unexpected%20response%20code:%20503](http://127.0.0.1:43249/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ is not accessible: Temporary Error: unexpected response code: 503) |
在一番搜索后并没有找到一个有效的解决方案,有的说要运行 minikube delete 删除~/.kube ~/.minikube文件夹再重新运行一遍minikube start,有的说通过kubectl proxy直接访问dashboard页面。经过这一番操作后得到的结果依旧是503。
另外在搜索过程中发现在国内可以使用阿里的容器仓库下载会快很多,可参考这篇文章,文中介绍在启动参数后加上 minikube start --vm-driver=none --image-mirror-country cn默认将使用*registry.cn-hangzhou.aliyuncs.com/google_containers *作为安装Kubernetes的容器镜像仓库。
相关配置参数如下
--image-mirror-country cn 将缺省利用 registry.cn-hangzhou.aliyuncs.com/google_containers 作为安装Kubernetes的容器镜像仓库,--iso-url=*** 利用阿里云的镜像地址下载相应的 .iso 文件--cpus=2: 为minikube虚拟机分配CPU核数--memory=2000mb: 为minikube虚拟机分配内存数--kubernetes-version=***: minikube 虚拟机将使用的 kubernetes 版本 但是就在今天中午的机缘巧合下,突然冒出了换个版本试试的想法,尝试了v1.4.0 、v1.5.1 、v1.5.0最终在1.5.0上终于不出现503,一脸懵逼的好了,不知道具体啥原因它就是好了😡😡。终归应该还是自己不够熟悉kubenetes的原因导致一个这个问题搞了这么久,但是也终于可以安下心来继续后续的学习了。
高可用集群数量最好大于等于3的奇数
Pod:k8s基础单元 内部包含多个容器
##K8S整体组成部分:
kubelet 直接和容器引擎交互 控制容器生命周期
kube-proxy 负责写入规则至iptables,IPVS实现服务映射访问
APIServer:所有服务访问的统一入口
ControllerManager 维持副本期望数目
Scheduler:负责接受任务,选择合适结点进行分配任务
ETCD:键值对数据库,存储K8S集群所有重要信息(持久化)
COREDNS:为集群中的SVC创建一个域名IP的对应关系解析
DASHBOAD:给K8S提供B/S访问
INGRESS CONTROLLER 实现七层代理
FEDERATION: 提供一个可以跨集群中心多K8S统一管理功能
PROMETHEUS: 提供K8S集群监控能力
ELK:提供K8S集群日志统一分析接入平台
##POD概念
基础容器pause,同一个pod中容器之间的端口不能冲突,
POD中容器共享存储和网络
ReplicationController 、ReplicaSet 、Deployment
新版本中RS取代RC RS支持集合式的selector
Deployment自动管理RS
Serverless 无服务器程序 不需要一个进程持续运行,需要时才调用
类信息存在方法区
最近在折腾Hexo写博客,然鹅发现自2015年第一次玩之后MarkDown已经不会用了,因此在此记录下Markdown的一些用已做备用。
使用#来表示标题,共六级:
使用三个“ ` ”符号(键盘上~键)或一个制表符(使用了下感觉不是很好使)来表示一个代码块
1 | 这是一个代码块 |
使用下面的方式来表示图片,不过不支持设置图片的宽高,设置宽高可使用<img>标签搞定
1 |  |
使用下面方式来创建一个表格
1 | | 列名 | 内容 | |