当前位置:  编程技术>软件工程/软件设计
本页文章导读:
    ▪Redis集群明细文档         Redis目前版本是没有提供集群功能的,如果要实现多台Redis同时提供服务只能通过客户端自身去实现(Memchached也是客户端实现分布式)。目前根据文档已经看到Redis正在开发集群功能,其.........
    ▪Dreamer 框架 比Struts2 更加灵活      winter 改名为Dreamer。 这次发布第二个版本。 这次修复了很多BUG 和完善了部分功能。 1、改进用户服务层 以后在服务层中只需要继承BaseSupport 泛型类 就可以实现对对象进行增删改查,无需写.........
    ▪Maven POM入门       Super POM(project object model) Maven内置了一个默认的POM(不在项目中,因此不可见),每一个project都会继承自这个默认的POM,因此叫Super POM。除非在项目的配置(POM)中显式的修改,否则使用默认的.........

[1]Redis集群明细文档
    来源: 互联网  发布时间: 2013-11-19

  Redis目前版本是没有提供集群功能的,如果要实现多台Redis同时提供服务只能通过客户端自身去实现(Memchached也是客户端实现分布式)。目前根据文档已经看到Redis正在开发集群功能,其中一部分已经开发完成,但是具体什么时候可以用上,还不得而知。文档来源:http://redis.io/topics/cluster-spec

一、介绍

  该文档是开发之中的redis集群实现细节。该文档分成两个部分,第一部分为在redis非稳定版本代码分支上已经实现的,另外一部分为还需要去实现的。在未来若集群实现设计变更这些都可能被修改,但是相对来说,未实现的部分相较于已经实现的部分被修改的可能性更大些。该文档包括了实现客户端需要的各种细节,但是客户端作者需要注意这些细节都有可能被修改。

二、什么是Redis集群

  集群是独立服务器关于分布式与容错实现的一个子集。在集群之中没有中心节点与代理节点,设计的主要目的之一就是线性可伸缩的扩展(即随意增删节点)。集群为了保证数据的一致性而牺牲容错性,所以当网络故障和节点发生故障时这个系统会尽力去保证数据的一致性和有效性。(这里我们认为节点故障是网络故障的一种特殊情况)

     为了解决单点故障的问题,我们同时需要masters 和 slaves。 即使主节点(master)和从节点(slave)在功能上是一致的,甚至说他们部署在同一台服务器上,从节点也仅用以替代故障的主节点(即备节点不会被使用除非主节点发生故障而用来代替主节点)。 实际上应该说 如果对从节点没有read-after-write(写并立即读取数据 以免在数据同步过程中无法获取数据)的需求,那么从节点仅接受只读操作。

三、已经实现的子集

  集群实现了在非分布式版本上的所有单个命令。复杂多命令操作例如集合sets的交集并集还没有实现。通常情况下理论上对于不在同一个节点上的操作不会被实现。

   将来可能增加一种叫"Computation Node"的新节点类型(计算节点),这种节点主要用来处理在集群中multi-key的只读操作。但是对于multi-key的只读操作不会以集群传输到Computation Node节点再进行计算的方式实现。

    (有点绕啊,看英文吧:In the future it is possible that using the MIGRATE COPY command users will be able to use Computation Nodes to perform multi-key read only operations in the cluster, but it is not likely that the Redis Cluster itself will be able to perform complex multi key operations implementing some kind of transparent way to move keys around.)

  集群中的节点不像独立服务器那样支持多个数据库,将会只有数据库0,并且不支持select命令。

四、集群协议中的客户端与服务器角色

  在集群中的节点,负责存储数据,了解集群的状态以及包括把数据key映射到对应的节点。集群中的任何一个节点都能够自动发现其他节点和检测到故障的节点,并且在必要是时候执行备节点提升为主节点的操作。

  集群节点使用TCP bus(连接总线)和二进制协议进行互联并对任务进行分派。即每一个节点都使用TCP bus连接到集群中的其他节点。各节点使用gossip 协议发送消息:

    1)传播消息(propagate information)以发现新节点,

    2)发送ping packets给集群其他节点以检测其他节点是否工作正常,

  3)发送集群消息需要特定的信号条件

   集群连接总线也可以是在各个节点间传播PUB/SUB消息 。

   当集群中的节点不能满足客户端的请求时,可能会使用errors -MOVED and -ASK命令来告知重定向到可用节点。理论上客户端允许向集群中的任意节点发送请求并在必要时会得到重定向应答,即客户端不必关心集群的状态。然而客户端可以缓存数据keys与节点的映射关系以改免去服务器端再进行重定向,这在一定程度上可以提高性能。

    
[2]Dreamer 框架 比Struts2 更加灵活
    来源: 互联网  发布时间: 2013-11-19

winter 改名为Dreamer。

这次发布第二个版本。

这次修复了很多BUG 和完善了部分功能。

1、改进用户服务层

以后在服务层中只需要继承BaseSupport 泛型类 就可以实现对对象进行增删改查,无需写代码

这次主要优化的是数据库访问层这一部分。

精简了Dao、DaoImpl、Server 这三层。

代码:

package com.pan.server;
import org.dreamer.sql.server.BaseSupport;
import com.pan.beans.User;
public class UserServer extends BaseSupport<User>{

}

可以看到上面,只要继承了BaseSupport这个类,服务层的代码 就非常的少了。

2、改善对对象赋值时可能会引发的异常

框架下载地址:http://pan.baidu.com/share/link?shareid=851215548&uk=470382596

内涵Jar包、源码、Dome、说明

作者:u010402518 发表于2013-6-24 21:01:11 原文链接
阅读:103 评论:0 查看评论

    
[3]Maven POM入门
    来源: 互联网  发布时间: 2013-11-19
Super POM(project object model)

Maven内置了一个默认的POM(不在项目中,因此不可见),每一个project都会继承自这个默认的POM,因此叫Super POM。除非在项目的配置(POM)中显式的修改,否则使用默认的配置。不同的Maven版本,默认的POM也不一样,遇到问题则需要自己检查。

最小的POM

一个project就是一个artifact,project的全称为: <groupId>:<artifactId>:<version>。

在Maven1中是project.xml,Maven2改成了pom.xml。在Maven1中还有一个maven.xml用于包含可以执行的目标,在Maven2已经配置到了pom.xml中。

<projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.ebay.raptor.samples</groupId>
   <artifactId>SamplesParent</artifactId>
   <version>1.1.0-SNAPSHOT</version>
</project>

artifact可以是任何东西,包括JAR, WAR,POM, EBA文件等。group只是artifact的命名空间,有点类似于java的包。如果项目还处在开发阶段,在版本后会有一个"SNAPSHOT",Maven只允许snapshot artifact被更新,release版本是不能更新的。

modelVersion很重要,因为不同的model,POM的格式是不一样的。

以上几个节点构成了一个最小的POM,这些是POM必须拥有的信息。

继承

如果我们需要把一个artifact放到另一个artifact中,就需要设置继承关系,这个继承关系是由子的module来维护的,因此会在module的pom中有一个parent节点。

<project>
 <parent>
   <groupId>com.mycompany.app</groupId>
   <artifactId>my-app</artifactId>
   <version>1</version>
  </parent>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-module</artifactId>
 <version>1</version>
</project>

刚才上面讲的是目录结构是如下的时候:

|-- my-module
|   `-- pom.xml
 `-- pom.xml

如果目录结构是下面的样子,

|-- my-module
|   `-- pom.xml
 `-- parent
     `-- pom.xml
则需要在parent中添加relativePath节点:

<project>
 <parent>
   <groupId>com.mycompany.app</groupId>
   <artifactId>my-app</artifactId>
   <version>1</version>
   <relativePath>../parent/pom.xml</relativePath>
 </parent>
 <modelVersion>4.0.0</modelVersion>
 <artifactId>my-module</artifactId>
</project>

集成(aggregation)

和继承有点类似,但是父子关系是由父的POM来维护的。方法是在POM中添加modules节点:

<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.mycompany.app</groupId>
 <artifactId>my-app</artifactId>
 <version>1</version>
 <packaging>pom</packaging> 
 <modules>
   <module>my-module</module>
 </modules>
</project>

节点module其实是目录名称,因此如果module不在app中,而是与app平级,则可以写成这样:

 <modules>
   <module>../my-module</module>
 </modules>

项目插值与变量

整个POM相当于一个对象,子节点就是一个个属性,因此可以直接访问:

<version>${project.version}</version>

另外,还有几个特殊的变量:

project.basedir

当前项目所在的目录

project.baseUri

当前项目所在的目录,只不过用 URI的格式表示. 从Maven 2.1.0开始

maven.build.timestamp

Build的开始时间.从Maven 2.1.0-M1开始

在project也可以自定义自己的变量,方法是在properties中添加属性:


  <properties>
    <mavenVersion>2.1</mavenVersion>
  </properties>
作者:woxueliuyun 发表于2013-6-25 15:32:42 原文链接
阅读:66 评论:0 查看评论

    
最新技术文章:
 




特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3