清理服务器上的Docker日志
平时我们Docker运行产生的一些日志文件,莫名其妙的占满了服务器内存,我的服务器都是3天一清。这次分享下清理Docker日志的脚本。
直接找个地方,创建sh文件,例如 vim cleanDockerlog.sh 复制下面代码
1234567891011121314151617#!/bin/sh# vim:sw=4:ts=4:etset -eDOCKER_STORAGE_PATH="/var/lib/docker"echo "INFO:======== start clean docker containers logs ========"logs_file=$(find ${DOCKER_STORAGE_PATH}/containers/ -name *-json.log) #容器日志文件for log_name in ${logs_file}do echo "INFO:clean logs : ${log_name}" > ${log ...
自己对Redis的理解
最基本的五种数据类型
String (字符串):最基本的数据类型
list(列表):相当于java语言里面的LinkedList,是链表结构,所以插入和删除非常快,时间复杂度是O(1)
set(集合):相当于hashset
hash (哈希):相当于hashmap,数组+链表
zset(有序集合):在set的基础上 给每一个value会与了一个score 代表这个value的排序权重
redis为什么这么快
基于内存的操作
使用了非阻塞IO多路复用模型
单线程可以避免不必要的上下文切换和竞争条件,减少了这方面的性能消耗
Redis的线程模型
redis内部实际上就iu是一个文件时间处理器。文件事件处理器结构包含4个部分:
多个socket
IO多路复用程序
文件事件分配器
事件处理器(连接应答处理器,命令请求处理器 命令回复处理器)
多个socket可能会产生不同的操作,每个操作对应不同的文件事件,但是IO多路复用程序会监听多个socket,将socket产生的事件放入队列中排队。事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。
redis的 ...
自己对锁的理解
synchronized的底层实现原理同步锁。可以修饰实例方法(当前实例加锁) 修饰静态方法(当前类加锁),修饰代码块(指定加锁对象)
使用synchronized编译后的字节码文件中会有monitorenter和monitorexit指令。分别对应着获取锁和释放锁。
而每一个同步对象都有一个自己的Monitor监视器锁。加锁的时候,会先尝试获取monitor的所有权,
如果monitor的进入数为0,则将进入数设置为1并进入monitor。该线程即为monitor的所有者
如果线程已经占有该monitor,那么就重新进入,将进入数加1
如果其他线程占用了monitor,则该线程进入阻塞状态,直到monitor的进入数为0。重新获取monitor的所有权
如果monitorexit出现‘了两次,第一次为同步正常释放锁,第二次为发生异常退出锁
Synchronized和Lock的区别Synchronized是java的关键字,而Lock是一个接口
synchronized不会产生死锁,而lock必须在finally中释放锁,不然容易造成死锁
synchonized不可以判断锁的状态, ...
自己对MySQL的理解
索引索引失效的情况如果WHERE条件中还有OR 除了OR前后使用了索引列
如果mysql判断全表扫描比使用索引查询快,不会使用索引
执行LIKE模糊查询并以%开头
索引出现了隐式的类型转换。比如数据类型是varchar,我们输入的是一个数值。那么不会使用索引
explain执行计划可以模拟优化器执行SQL查询语句,用来分析sql语句的性能
Id:标识符
Select_type:查询的类型
type:表的连接类型
const:通过主键或唯一键查询,并且结果只有1行(也就是用等号查询)。因为仅有一行,所以优化器的其余部分可以将这一行中的列值视为常量。
eq_ref:通常出现于两表关联查询时,使用主键或者非空唯一键关联,并且查询条件不是主键或唯一键的等号查询。
ref:通过普通索引查询,并且使用的等号查询。
range:索引的范围查找(>=、<、in 等)。
index:全索引扫描。
All:全表扫描
possible_keys 预测用的索引
key:实际使用的索引
key_len 使用索引的长度
ref: 表之间的引用
rows:要检查的行数
索引的数据结构 ...
Spring基于注解使用AOP
概念面向切面编程。将多个对象的公共行为抽取封装成一个可重用的模块。降低了模块之间的耦合度。同时提高了系统的可维护性。一般用于权限认证,日志等。
AOP是基于动态代理实现的。如果要代理的对象实现了某个接口,那么AOP就会使用JDK动态代理创建对象。而没有实现接口的对象,就无法使用JDK动态代理。使用Cglib动态代理生成一个被代理的子类来作为代理。
Aspect(切面): 切点+通知。在什么时候,什么地方,做的什么增强
Joint point(连接点):使用通知的一个时机,一般是方法的调用,或异常被抛出
Pointcut(切点):通过通配、正则表达式等方式,定义了切面发生在哪里
Advice(通知):告诉切面要做什么,什么时候开始,比如Before、After、Around等等
Target(目标对象):被通知的对象
Weaving(织入):把切面应用到目标对象,创建对象的一个过程。可以在编译时或运行时完成织入操作。
Spring AOP 和 AspectJ AOP的选择Spring AOP属于运行时增强。AspectJ是编译时增强,Eclipse基金会出品。SpringAOP基于代理, ...
Linux安装Docker和MySQL
1.安装准备
11.1 确保cenos版本是7.X
使用uanme -a查看docker内核版本
1uname -a
这里使用cenos7来安装docker
11.2 安装docker运行环境
安装docker运行环境之前,我们先来配置一下yum
2.配置yum 2.1 备份
1mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2.2 配置国内镜像加速
1wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2.3 生成缓存
1yum makecache
2.4 安装docker运行环境 因为docker是基于C和C++开发的 需要安装对应的环境
12yum -y install gccyum -y install gcc-c++
2.5 继续 ...
服务器上Nginx的安装和使用
nginx介绍 nginx是一款使用C语言编写的高性能的代理服务器。优点是占用内存小,并发能力强。达到了5W。一般用来做负载均衡
1.官网下载nginx压缩包
我们先去官网下载一个最新稳定版的nginx
http://nginx.org/en/download.html
然后使用xftp或者rz上传到我们的服务器
# 解压压缩包
tar -zxvf nginx-1.22.0.tar.gz
然后进入到目录里面,查看是否有可执行权限(是不是绿色的),没有赋予执行权限
# 赋予执行权限
chmod +x configure
2.安装nginx所需要的环境在安装之前先安装nginx所需要的一些环境
12345678# c编译器yum -y install gcc gcc-c++ autoconf automake make# 解析正则的pcre库yum install -y pcre pcre-devel# 添加对gzip的支持yum install -y zlib zlib-devel# SSLyum -y install pcre pcre-devel ...
linux常用的插件安装
阿里云买一台服务器,部署自己的项目,让别人访问,多有成就感。但是刚买的服务器,上面什么都没装,很多时候都是软件装完了,这里缺一个php,那里缺一个c环境,想要解压个zip文件,发现没有工具…这些都是我们碰到的。这篇文章就把常用的插件一网打尽,到手执行完指令就可以使用。
wget wget不用多说了吧 linux的应用市场
net-tools 网络工具包
gcc C编译器
xinetd 网络守护进程服务
unzip 解压缩软件,支持解压缩zip
lrzsz 替代xftp的工具 直接使用rz命令上传
initscripts 一些启动脚本
sudo 让我们获得管理员权限的东东
libaio 提供给我们异步非阻塞方式读取文件
gcc-c++ C++编译器
vim* Vim文编编辑神器
lsof 方便我们更好的查看端口
epel-release 一个第三方源,帮助我们扩展yum
pcre-devel PCRE库,支持正则表达式,用nginx必须得有
zlib-devel 一些软件会用到的依赖库
开始安装之前,我们先下载一下wget
1yum -y install wget
我们切换成国内镜 ...
什么是Docker?
容器技术的起源假设你们公司正在秘密研发下一个“今日头条”APP,我们姑且称为明日头条,程序员自己从头到尾搭建了一套环境开始写代码,写完代码后程序员要把代码交给测试同学测试,这时测试同学开始从头到尾搭建这套环境,测试过程中出现问题程序员也不用担心,大可以一脸无辜的撒娇,“明明在人家的环境上可以运行的”。
测试同学测完后终于可以上线了,这时运维同学又要重新从头到尾搭建这套环境,费了九牛二虎之力搭建好环境开始上线,糟糕,上线系统就崩溃了,这时心理素质好的程序员又可以施展演技了,“明明在人家的环境上可以运行的”。
从整个过程可以看到,不但我们重复搭建了三套环境还要迫使程序员转行演员浪费表演才华,典型的浪费时间和效率,聪明的程序员是永远不会满足现状的,因此又到了程序员改变世界的时候了,容器技术应运而生。
有的同学可能会说:“等等,先别改变世界,我们有虚拟机啊,VMware好用的飞起,先搭好一套虚拟机环境然后给测试和运维clone出来不就可以了吗?”
在没有容器技术之前,这确实是一个好办法,只不过这个办法还没有那么好。
先科普一下,现在云计算其底层的基石就是虚拟机技术,云计算厂商买回来一堆硬件搭 ...
Redis-集群
哨兵模式sentinel,中文名是哨兵。哨兵是 redis 集群机构中非常重要的一个组件,主要有以下功能:
集群监控:负责监控 redis master 和 slave 进程是否正常工作。
消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。
配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。
哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。
故障转移时,判断一个 master node 是否宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题。
即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就很坑爹了。
哨兵的核心知识
哨兵至少需要 3 个实例,来保证自己的健壮性
哨兵 + redis 主从的部署架构,是不保证数据零丢失的,只能保证 redis 集群的高可用性。
对于哨兵 + redis 主从这种 ...