2018年7月

更新到phpstorm for mac 2018版,发现svn不好使了,具体报错svn: E155036: Please see the 'svn upgrade' command svn: E155036: The working copy at '/Users/kaizhang/work/yourFileName' is too old (format 29) to work with client version '1.9.7 (r1800392)' (expects format 31). You need to upgrade the working copy first.如下图:

1533003546678.jpg

不要慌,这个错误灰常简单,“/Users/kaizhang/work/yourFileName”的工作副本太旧(格式29),无法使用客户端版本“1.9.7 (r1800392)”(预期格式31)。您需要先升级工作副本。

怎么解决呢?

只需要点击旁边的Subversion Working Copies Iformation,然后点击Change,选择1.8format就OK了。
具体操作如下图:
1533004286293.jpg

怎么样,是不是很简单?

什么是单例模式

单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的。

为什么使用单例模式

  1. 实例控制
    单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。
  2. 灵活性
    因为类控制了实例化过程,所以类可以灵活更改实例化过程。
  3. PHP自身缺点
    php语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,这和asp.NET、Java等编译型是不同的,比如在Java中单例会一直存在于整个应用程序的生命周期里,变量是跨页面级的,真正可以做到这个实例在应用程序生命周期中的唯一性。然而在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式我觉得只是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的。

单例模式在PHP中的应用场合

  1. 应用程序与数据库交互
    一个应用中会存在大量的数据库操作,比如过数据库句柄来连接数据库这一行为,使用单例模式可以避免大量的new操作,因为每一次new操作都会消耗内存资源和系统资源。
  2. 控制配置信息
    如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现.

单例模式特点(三私一公)

  1. 私有的构造方法 (防止类外实例化)
  2. 私有的克隆方法 (防止通过克隆生成对象)
  3. 私有的静态属性 (保存类的实例)
  4. 公有的静态方法 (调取这个类相当一个接口 )

废话不多说了,直接上代码吧

class Single {
    private $name;//声明一个私有的实例变量
    private function __construct(){//声明私有构造方法为了防止外部代码使用new来创建对象。
    
    }

    static public $instance;//声明一个静态变量(保存在类中唯一的一个实例)
    static public function getinstance(){//声明一个getinstance()静态方法,用于检测是否有实例对象
        if(!self::$instance) self::$instance = new self();
        return self::$instance;
    }

    public function setname($n){ $this->name = $n; }
    public function getname(){ return $this->name; }
}


$oa = Single::getinstance();
$ob = Single::getinstance();
$oa->setname('hello world');
$ob->setname('good morning');
echo $oa->getname();//good morning
echo $ob->getname();//good morning

ES基础概念

ES简介

你知道的,为了搜索……
Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可能是目前存在的,不论开源还是私有的,拥有最先进,高性能和全功能搜索引擎功能的库。

集群和节点

一个集群=节点1+节点2+……

索引(index)

含有相同属性的文档集合(相当于sql里的database)

类型(type)

索引可以定义一个或多个类型,文档必须属于一个类型(相当于sql里的table)

文档(doc)

文档是可以被索引的基本数据单位(相当于sql里的一行记录)

分片

每个索引都有多个分片,每个分片是一个Lucene索引

备份

拷贝一份分片就完成了分片的备份

RESTFul API

API基本格式:http://<;ip>:<port>/<索引>/<类型>/<文档id>
常用HTTP动词GET/PUT/POST/DELETE

映射(mappings)

映射类型用于表示被索引的文档或实体的类型
5.X版本之后的映射类型有:
•String: text and keyword
•Numeric datatypes:long, integer, short, byte, double, float, half_float, scaled_float
•Date datatype : date
•Boolean datatype: boolean
•Binary datatype:binary
•Range datatypes: integer_range, float_range, long_range, double_range, date_range

ES安装

es依赖环境

java(大于等于1.80版本)环境

es的下载与解压

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.zip
unzip elasticsearch-6.2.3.zip

增加一个elsearch用户并且赋予该用户权限

groupadd elsearch
useradd elsearch -g elsearch
chown -R elsearch elasticsearch-6.2.3

常见配置参数(elasticsearch-6.2.3->config->elasticsearch.yml)

属性缺省值描述
cluster.namefederated_clusterElasticsearch 集群名称。使用集群可将单独 Process Federation Server 绑定到单个分布式系统中。参与集群的所有服务器都必须具有相同的集群名称。
node.namenode1Elasticsearch 节点名。集群中的每个 Process Federation Server 都必须具有唯一节点名。
node.mastertrue指示某个节点是否符合成为主节点的条件。主节点管理 Elasticsearch 集群的状态。在运行时,Elasticsearch 服务会自动提名某一个合格的集群成员成为主节点。仅当您想要对专用主节点和数据节点采用高级配置时,才将该值设置为 false。此类型的配置并不常用。
node.datatrue指示节点是否为数据节点。数据节点包含并管理索引的一部分。仅当您想要对专用主节点和数据节点采用高级配置时,才将该值设置为 false。此类型的配置并不常用。
http.enabledfalse指示是否为 Elasticsearch 服务启用 HTTP。如果您要通过使用 Elasticsearch REST 请求来直接查询 Elasticsearch 数据,那么可以启用 HTTP 端口。(注:Elasticsearch HTTP 端口不支持安全连接。
htttp.port9200如果启用了 HTTP 端口,那么此属性指定由 Elasticsearch 服务使用的端口。
http.cors.enabledtrue如果启用了 HTTP 端口,那么此属性会指定是否允许跨源 REST 请求。
http.cors.allowed.originlocalhost如果 http.cors.enabled 的值为 true,那么该属性会指定允许 REST 请求来自何处。
transport.tcp.port9300用于某个集群中 Elasticsearch 节点之间的通信的端口。
discovery.zen.minimum_master_nodes1指示某个集群定额所需的 Process Federation Server 的数量。缺省值为 1 表示单服务器环境。对于生产环境,请将该值设置为组成定额所需的 Process Federation Server 的数量。例如,如果在集群中总计有三个 Process Federation Server,请将该值设置为“2”,如果在集群中总计有五个 Process Federation Server,请将该值设置为“3”。
discovery.zen.ping.multicast.enabledfalse通过发送节点所接收和响应的一个或多个多点广播请求来提供对其他 Elasticsearch 服务节点的多点广播 ping 发现功能。
discovery.zen.ping.unicasts.hostslocalhost提供其他 Elasticsearch 服务节点的单点广播发现功能。配置集群中基于主机 TCP 端口的其他 Elasticsearch 服务的逗号分隔列表。
discovery.zen.ping.timeout3sElastic 搜索节点等待加入 Elasticsearch 集群的时间。

启动es

./bin/elasticsearch
后台启动./bin/elasticsearch -d

安装elasticsearch-head插件(提前安装好node>=6.0)

wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip
插件配置参数:
http.cors.enabled: true
http.cors.allow-origin: "*"

ES--CURD操作

create index

create.png

add 插入内容

方式一:指定文档id插入

add_id.png

方式二:自动产生文档id插入

add_no.png

update修改文档

方式一:直接修改文档

update_no.png

方式二:脚本修改文档(painless是es内置的脚本语言)

update_pain.png

delete删除文档

delete.png

查询语法

简单查询

qurey_sample.png

条件查询

query.png

聚合查询(agg为es聚合查询标识,group_by_word_count为自定义字段)

query_agg.png