- shell 流程控制--循环 12-07
- Shell中如何实现交互? 12-07
- 升级安装php7要考虑的3个重要方面 12-07
- 「幕客技术」python对mongodb的CURD介 12-07
- 「服务器」分布式实时日志分析解决方案ELK部署架构 12-07
- Java开发大型互联网-使用Redis实现分布式锁与 12-07
- Redis 系列(四)——分布式锁实现 12-07
- redis 大开大合 12-07
- 为ThinkPHP安装php-resque队列服务 12-07
- Java互联网架构-缓存爬坑故事如何解决缓存雪崩 12-07
shell 流程控制--循环
发布者: superzhang | 发布时间:2017-12-07一、for循环
for循环的运作方式,是将串行的元素一一取出,依序放入指定的变量中,然后重复执行包含的命令区域(在do和done之间),直到所有的元素取
完为止。其中,串行是一些字符串的组合,彼此用$IFS所定义的分割字符(如空格)隔开,这些字段串称为字段。
for的语法
for 变量 in 串行 将串行的字段迭代放入变量中
do
命令区域 重复执行命令区域,知道串行中每个字段均处理过
done
!/bin/bash
for i in 1 2 3 4
do
echo $i
done
--------------------------------------------------------------
for 变量 in $@$@代表命令行所有的参数
do
命令区域
done
#!/bin/bash
IFS=':' for循环经常用在分割字符串行,取出字段元素值
PL="root:x:0:0:root:/root:/bin/bash"
for i in $PL
do
echo $i 结果是依次输出每个
Shell中如何实现交互?
发布者: superzhang | 发布时间:2017-12-07举个例子:openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
输入该命令,会要求你一步步输入确认,我们用脚本如何实现呢?
#!/usr/bin/expect
spawn openssl req -new -x509 -keyout ca-key -out ca-cert -days 365
expect "Enter PEM pass phrase:"
send "1234\n"
expect "Verifying - Enter PEM pass phrase:"
send "1234\n"
expect "Country Name"
send "cn\n"
expect "State or Province Name"
send "shanghai\n"
expect "Locality Name"
升级安装php7要考虑的3个重要方面
发布者: superzhang | 发布时间:2017-12-07php7从推出到现在,
前两天官方已经发布到7.2版本,
把自己升级和安装php7中遇到的问题和解决方法做一个笔记,
内容主要包括:
1) mysql
2) php
3) nginx
4) memcache扩展
5) redis扩展
由于内容很长,
会分为多篇文章来讲述,
当然你可能遇到比我更多的问题需要解决,
因为我们服务器环境不一样。
php7
升级安装php7要考虑的几个方面
1) 性能提升
这一点无需质疑,
php7的性能比之前的版本,
性能至少提升一倍,
php7核心开发人员鸟哥也明确的说到这一点。
有人给鸟哥留言说,
升级到php7后,
公司节省了30台服务器。
还有人说升级到php7后,
一年的KPI指标就已经完成
「幕客技术」python对mongodb的CURD介绍
发布者: superzhang | 发布时间:2017-12-07mongodb是一个nosql数据库,无结构化、和去中心化。
python是一门优雅而且健壮的语言。
python使用mongo,也被很多场景中会用到,幕客最近在作一个后台系统,其中:
日志的记录,用户分析就用到了mongo这个数据库来作。
那为什么要用mongo来存呢?
首先、数据关系复杂,没有表连接,结构化弱。
然后、利用mongo全文索引查找方便
最好、数据不重要,记录的日志数据库。意外丢失风险可以接受。
说了这么多,接下来幕客先给大家说说对mongo的CURD,如下:
一、安装mongo的支持
sudo /opt/python2.7.13/bin/pip install pymongo
二、简单操作
1) 数据库实例创建
In [1]: import pymongo
In [2]: pymongo.MongoClien
「服务器」分布式实时日志分析解决方案ELK部署架构
发布者: superzhang | 发布时间:2017-12-07日志记录是项目实施不可缺少的环节。它们不仅可以帮助你快速定位错误,而且还可以帮助你优化项目性能。现在基于大量的日志记录,还可以分析用户行为,帮助完善产品体验。那么日志到底是什么呢?
什么是日志?
日志就是按照时间顺序追加的、完全有序的记录序列,其实就是一种特殊的文件格式,文件是一个字节数组,而这里日志是一个记录数据,只是相对于文件来说,这里每条记录都是按照时间的相对顺序排列的,可以说日志是最简单的一种存储模型,读取一般都是从左到右,例如消息队列,一般是线性写入log文件,消费者顺序从offset开始读取。
由于日志本身固有的特性,记录从左向右开始顺序插入,也就意味着左边的记录相较于右边的记录“更老”, 也就是说我们可以不用依赖于系统时钟,这个特性对于分布式系统来说相当重要。
日志的应用
1、日志在数据库中的应用
日志是什么时候出现已经无从得知,可能是概念上来讲太简单。在数据库领域中日志更多的是用于在系统crash的时候同步数据
Java开发大型互联网-使用Redis实现分布式锁与漏洞解决方案
发布者: superzhang | 发布时间:2017-12-07引言
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。
在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,这个时候,便需要使用到分布式锁。
Redis实现分布式锁相关Redis命令
SETNX
如果当前中没有值,则将其设置为并返回1,否则返回0。
EXPIRE
将设置为秒后自动过期。
GETSET
将的值设置为,并返回其原来的旧值。如果原来没有旧值,则返回nil。
EVAL与EVALSHA
Redis 2.6之后支持的功能,可以将一段lua脚本发送到Redis服务器运行。
起——分布式锁初探
利用SETNX命令的原子性,我们可以简单的实现一个初步的分布式锁(这里原理就不详述了,直接上伪代码):
boolean tryLock(String key, int lockSeconds) {
i
Redis 系列(四)——分布式锁实现
发布者: superzhang | 发布时间:2017-12-07如下文章字数大约590字及若干代码块,阅读时间需要15分钟左右。
Redis 系列因个人时间限制,对应发表未按照Redis对应的知识体系结构的顺序,
而是根据自己想到哪一部分就总结写出了对应部分,特此声明,望理解。
对应分布式系统的概念这里不做介绍,只讲解对应Redis实现分布式锁的过程。
这里列出的方法可能跟主流方式不同,不过,跟据本人了解,网上关于Redis分布式锁实现 90% 是错误的。
Redis 分布式锁实现的依据是其 setnx 命令。
要点说明:
1、分布式锁必须设置一个过期时间。
2、加锁和设置失效时间必须是原子操作。
3、设置一个随机字符串是很有必要的。
4、释放锁包括三个步骤:GET 判断 和 DEL,能保证这三步是原子操作,基于lua脚本实现。
划重点:
大致代码为:
public class RedisDi
redis 大开大合
发布者: superzhang | 发布时间:2017-12-07redis内存数据库
一.背景
随着互联网+大数据时代的来临,传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量,这个时候就需要一种能够快速存取数据的组件来缓解数据库服务的I/O的压力,来解决性能上的瓶颈
二.Redis是什么?
Redis是一个开源的,高性能的,C语言开发的,键值对(K-V)存储数据的NoSQL数据库
NoSQL数据库:Not Only Sql 泛指非关系型数据库
关系型数据库:MYSQL SQLServer Oracle
数据库应用的发展历史
1.在互联网大数据时代来临前,企业的一些内部信息管理系统,一个单一的数据库实例就可以应付系统的需求
单数据库实例
2.随着系统访问量用户的增多,数据量的增大,单个数据库实例已经满足系统的一个需求了
缓存技术(memcache)+数据库实例
3.缓存可以缓解数据库的读取压力,但是数据量的写入压力持续增大,可以采取数据库进行读取分离
缓存+主从数据库+读写分离
4.数据量再次增大,读写分离以后,主数据库写入压力出现瓶颈
缓存+主从数据库集群+读写分离+分库分表
5.互联网+大数据时代来临,关系型数据库不能很好的存取一些
为ThinkPHP安装php-resque队列服务
发布者: superzhang | 发布时间:2017-12-07在开发业务过程中我们经常会遇到如下一些场景,比如:发短信、发邮件、抓取数据、统计数据,这些场景没有必要等待程序的执行结果。
为什么选择php-resque因为老兵用的最多的就是php-resque
准备工作先安装TP框架,这里使用的是TP3.2,下载后进入到根目录。TP3.2的运行模式有2种,一种是网页运行模式,一种是cli模式,就是命令行模式,php-resque的worker我们需要通过命令行模式启动,所以我们需要稍微配置一下,
1.在项目根目录创建cli.php打开,添加代码:
// 检测PHP环境if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');//定义根目录define('BASE_PATH', __DIR__);//载入composer类库require_once BASE_PATH.'/vendorJava互联网架构-缓存爬坑故事如何解决缓存雪崩
发布者: superzhang | 发布时间:2017-12-07概述
缓存穿透
什么是缓存穿透?
一般的缓存系统,都是按照key去缓存查询,如果不存在对应的value,就应该去后端系统查找(比如DB)。如果key对应的value是一定不存在的,并且对该key并发请求量很大,就会对后端系统造成很大的压力。这就叫做缓存穿透。
如何避免?
1:对查询结果为空的情况也进行缓存,缓存时间设置短一点,或者该key对应的数据insert了之后清理缓存。
2:对一定不存在的key进行过滤。可以把所有的可能存在的key放到一个大的Bitmap中,查询时通过该bitmap过滤。【感觉应该用的不多吧】
缓存雪崩
什么是缓存雪崩?
当缓存服务器重启或者大量缓存集中在某一个时间段失效,这样在失效的时候,也会给后端系统(比如DB)带来很大压力。
如何避免?
1:在缓存失效后,通过加锁或者队列来控制读数据库写缓存的线程数量。比如对某个key只允许一个线程查询数据和写缓存,其他线程等待。
2:不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀。
3:做二级缓存,A1为原始缓存,A2为拷贝缓存,A1失效时,可以访问A2,A1缓存失效时间设置为短期,A2设置为长期(此点为补充)
分布式缓存系统
