• 每天进步一点点!

文章分类

推荐网站

常用手册

Linux下安装部署JDK【原创】

  • 下载JDK

到Oracle的官方网站下载JDK,下面是下载地址:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

 

  • 解压缩下载下来的JDK压缩包,我下载的是jdk-7u75-linux-x64.tar.gz
sudo tar -zxvf jdk-7u75-linux-x64.tar.gz -C /opt/

 

  • 修改环境变量/etc/profile文件
sudo vim /etc/profile

 

  • 将下面的配置追加到/etc/profile末尾
export JAVA_HOME=/opt/jdk1.7.0_75
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH

保存退出

 

  • 是环境变量即时生效
source /etc/profile

 

  • 验证是否配置成功

打开终端,输入下面命令查看jdk的版本信息

java -version

 

类别:Linux | 浏览(131) | 评论(0) | 阅读全文>>

SQL语句优化技巧【转载】

  1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
  2. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null

可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:

select id from t where num=0
  1. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
  2. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20

 可以这样查询:

select id from t where num=10

union all

select id from t where num=20
  1. in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)

对于连续的数值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3
  1. 下面的查询也将导致全表扫描:
select id from t where name like '%abc%'

若要提高效率,可以考虑全文检索。

类别:MySQL | 浏览(168) | 评论(0) | 阅读全文>>

一致性哈希算法的应用及其优化【转载】

  • 简单哈希算法

哈希(Hash)就是把任意长度的输入通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,使得散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。哈希算法是一种消息摘要算法,虽然哈希算法不是一种加密算法,但由于其单向运算,具有一定的不可逆性使其成为加密算法中的一个重要构成部分。

 

  • 分布式缓存问题

哈希算法除了在数据加密中的运用外,也可以用在常见的数据分布式技术中。哈希计算是通过求模运算来计算哈希值的,然后根据哈希值将数据映射到存储空间中。设有由 N 个存储节点组成的存储空间,采用简单哈希计算将一个数据对象 object 映射到存储空间上的

公式为:Hash(object)% N。现在假设有一个网站,最近发现随着流量增加,服务器压力越来越大,之前直接读写数据库的方式已经不能满足用户的访问,于是想引入 Memcached 作为缓存机制。现在一共有三台机器可以作为 Memcached 服务器,如下图 1 所示。

 

类别:数据结构 | 浏览(148) | 评论(0) | 阅读全文>>

Varnish配置文件详解【转载】

既然Varnish需要在多台服务器上缓存数据,就需要Varnish映射所有的URL到一台单独的主机。

 

backend webserver {  
    .host = "127.0.0.1";  
    .port = "80";  
    .connect_timeout = 4s;  
    .first_byte_timeout = 5s;  
    .between_bytes_timeout = 20s;  
}  

 

该块配置用于定义一台Varnish默认访问的后端服务器,当Varnish需要从后端服务器获取数据时,就会访问自己的80端口。

当然Varnish也可以定义多台后端服务器实现负载均衡的目的。

.connect_timeout定义的是等待连接后端的时间

.first_byte_timeout定义的是等待从backend传输过来的第一个字节的时间

.between_bytes_timeout 定义的是两个字节的间隔时间

当然还可以增加一个backend,用于访问本机的8090端口,假设通过该端口提供图片服务。

 

backend img {  
    .host = "127.0.0.1";  
    .port = "8090";  
}  

 

当匹配img的URL时,需把请求发送到上面定义的backend img,其他的请求发送到backend webserver。

 

sub vcl_recv {  
    if (req.url ~ "^/img/") {  
        set req.backend = img;  
    } else {  
        set req.backend = webserver.  
    }  
}  

 

Varnish不仅仅可以定义多个backend,还可以把多个backend合成一个组,使用循环的方式把请求分配给组中的backends。并且Varnish会根据健康检查情况来判断后端服务器是否正常提供服务。

类别:性能优化 | 浏览(111) | 评论(0) | 阅读全文>>

高速缓存Varnish【原创】

简介:

Varnish是一款高性能且开源的反向代理服务器和HTTP 加速器

 

特点:

(1)是基于内存缓存,重启后数据将消失。

(2)利用虚拟内存方式,io性能好。

(3)支持设置0~60秒内的精确缓存时间。

(4)VCL配置管理比较灵活。

(5)32位机器上缓存文件大小为最大2G。

(6)具有强大的管理功能,例如top,stat,admin,list等。

(7)状态机设计巧妙,结构清晰。

(8)利用二叉堆管理缓存文件,达到积极删除目的

 

环境设置:

测试环境:用VMWare安装的CentOS5.6,Windows2003,克隆的CentOS5.6命名为CentOS5.6.1

CentOS5.6 有两块网卡vmnet0(IP:192.168.2.10)用于与公网用户通信,vmnet1(IP:8.8.8.10)用于模拟内网

CentOS5.6.1 一块网卡vmnet0(IP:192.168.2.11)由于模拟内网提供服务web服务的服务器,我用的是Apache

Windows2003 一块网卡vmnet1(IP:8.8.8.11)用于模拟公网web用户。

配置CentOS5.6 

ifconfig eth0 192.168.2.10 netmask 255.255.255.0
ifconfig eth1 8.8.8.10 netmask 255.255.255.0

配置CentOS5.6.1

ifconfig eth0 192.168.2.11 netmask 255.255.255.0

配置window2003

IP地址:8.8.8.11 子网掩码255.255.255.0

 

类别:性能优化 | 浏览(124) | 评论(0) | 阅读全文>>