0%

redis安装和部署

简介

Redis是我们目前大规模使用的缓存中间件,由于它强大高效而又便捷的功能,得到了广泛的使用。单节点的Redis已经就达到了很高的性能,为了提高可用性我们可以使用Redis集群。

单机安装

1
2
3
4
5
6
wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar -zxvf redis-5.0.5.tar.gz
cd redis-5.0.5
make
make test
make install

启动和关闭

1
redis-server &

集群安装

集群的概念

介绍

Redis集群是一个可以在多个Redis节点之间进行数据共享的设施(installation)。

Redis集群不支持那些需要同时处理多个键的Redis命令, 因为执行这些命令需要在多个Redis节点之间移动数据, 并且在高负载的情况下, 这些命令将降低Redis集群的性能,并导致不可预测的错误。

Redis集群通过分区(partition)来提供一定程度的可用性(availability):即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

Redis集群提供了以下两个好处:

  • 将数据自动切分(split)到多个节点的能力。
  • 当集群中的一部分节点失效或者无法进行通讯时, 仍然可以继续处理命令请求的能力。
    数据分片
  • *Redis集群**使用数据分片(sharding)而非一致性哈希(consistency hashing)来实现:一个Redis集群包含16384个哈希槽(hash slot),数据库中的每个键都属于这16384个哈希槽的其中一个,集群使用公式CRC16(key) % 16384来计算键key属于哪个槽, 其中CRC16(key)语句用于计算键key的CRC16校验和。
    主从复制模型
    为了使得集群在一部分节点下线或者无法与集群的大多数(majority)节点进行通讯的情况下, 仍然可以正常运作, Redis 集群对节点使用了主从复制功能: 集群中的每个节点都有 1 个至 N 个复制品(replica), 其中一个复制品为主节点(master), 而其余的 N-1 个复制品为从节点(slave)。

    Redis一致性保证

    Redis并不能保证数据的强一致性. 这意味这在实际中集群在特定的条件下可能会丢失写操作:第一个原因是因为集群是用了异步复制. 写操作过程:
  • 客户端向主节点B写入一条命令.
  • 主节点B向客户端回复命令状态.
  • 主节点将写操作复制给他得从节点B1,B2和B3

主节点对命令的复制工作发生在返回命令回复之后,因为如果每次处理命令请求都需要等待复制操作完成的话,那么主节点处理命令请求的速度将极大地降低 —— 我们必须在性能和一致性之间做出权衡。注意:Redis集群可能会在将来提供同步写的方法。 Redis集群另外一种可能会丢失命令的情况是集群出现了网络分区,并且一个客户端与至少包括一个主节点在内的少数实例被孤立。

集群搭建

Read more »

有效的括号字符串

题目说明

给定一个只包含三种字符的字符串: (, )*,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下规则:

  1. 任何左括号(必须有相应的右括号)
  2. 任何右括号)必须有相应的左括号(
  3. 左括号(必须在对应的右括号之前)
  4. 可以被视为单个右括号),或单个左括号(,或一个空字符串。
  5. 一个空字符串也被视为有效字符串。

示例 1:

1
2
输入: "()"
输出: True

示例 2:

1
2
输入: "(*)"
输出: True

示例 3:

1
2
输入: "(*))"
输出: True

注意:

1
1. 字符串大小将在 [1,100] 范围内。
Read more »

两数之和

题目说明

给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

1
2
3
4
给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
Read more »

求100以内的质数

题目说明

输出100以内的所有素数,素数之间以一个空格区分
分析:
首先了解下素数:素数(prime number)又称质数,有无限个。一个大于1的自然数,除了1和它本身外,不能被整除以其他自然数(质数),换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。最小的质数是2。

Read more »

整数反转

题目说明

给出一个32位的有符号整数,你需要将这个整数中每位上的数字进行反转。

Read more »

你必须知道深度学习术语

1. 神经元

我们可以说,我们使用神经元来形成大脑的基本元素。也有助于形成神经网络的基本结构。当我们得到新信息时。我们开始生成一个输出。

Neuron

同样,我们也要处理神经网络的情况。一旦神经元得到输入,我们就必须开始这个过程。此外,在处理之后生成输出。此外,我们必须发送神经元,这有助于进一步处理。或者,我们可以把它看作最终的输出。

2. 循环神经元(Recurrent Neuron)

它是深度学习术语中最好的术语之一。基本上,这个输出被发送回神经元以获取t时间戳。从下图可以看出,我们可以说输出作为输入返回了t次。同样,我们必须把不同的神经元连接起来,它们看起来就像一个展开的神经元。尽管如此,重要的是它为我们提供了一个更一般化的输出。
Recurrent Neuron

3. 神经网络(Neural Network)

Read more »

十大机器学习算法简介

1. 线性回归(Linear Regression)

线性回归(Linear Regression)可能是统计和机器学习中最著名和最容易理解的算法之一。

预测建模主要关注的是最小化模型的误差,或尽可能做出最准确的预测,而牺牲了可解释性。我们将借用、重用和窃取许多不同领域的算法,包括统计数据,并将它们用于这些目的。

线性回归的表示是一个方程,它通过为称为系数(B)的输入变量寻找特定权重,来描述一条最适合输入变量(x)和输出变量(y)之间关系的直线,如下图所示。
Linear Regression
例如:y = B0 + B1 * x

我们将在给定输入x的情况下预测y线性回归学习算法的目标是找到系数B0和B1的值。

从数据中学习线性回归模型可以使用不同的技术,如普通最小二乘的线性代数解和梯度下降优化。

线性回归已有200多年的历史,并得到了广泛的研究。使用此技术时,一些好的经验规则是删除非常相似(相关)的变量,并尽可能从数据中删除噪声。这是一种快速、简单的方法,也是一种值得尝试的好算法。

2. 逻辑回归(Logistic Regression)

逻辑回归(Logistic Regression)是机器学习从统计学领域借用的另一种技术。它是二进制分类问题(具有两个类值的问题)的首选方法。

逻辑回归类似于线性回归,其目标是找到每个输入变量权重系数的值。与线性回归不同,输出的预测是使用一个称为逻辑函数的非线性函数来转换的。

logistic函数看起来像一个大S,它将把任何值转换成0到1的范围。这很有用,因为我们可以对logistic函数的输出应用一个规则,将值捕捉到0和1(例如,如果小于0.5,则输出1),并预测一个类值。
Logistic Regression

由于模型的学习方式,逻辑回归所做的预测也可以用作属于类0或类1的给定数据实例的概率。这对于需要为预测提供更多理论依据的问题非常有用。

与线性回归类似,当删除与输出变量无关的属性以及彼此非常相似(相关)的属性时,逻辑回归的效果更好。该模型学习速度快,对二值分类问题有效。

3. 线性判断分析(Linear Discriminant Analysis)

逻辑回归是一种传统的分类算法,传统上仅限于两类分类问题。如果你有两个以上的类,那么线性判别分析算法是首选的线性分类技术。

LDA(Linear Discriminant Analysis)的表示非常直接。它包含为每个类计算的数据的统计属性。对于单个输入变量,这包括:

  • 每个类的平均值。
  • 计算所有类的方差。
    lda

预测是通过计算每个类的判别值,并对最大值的类进行预测。该技术假设数据具有高斯分布(钟形曲线),因此最好预先从数据中删除异常值。它是一种简单而有效的分类预测建模方法。

4. 分类和回归树(Classification and Regression Trees)

Read more »

GDAL的简介和安装

在地理信息界,GDAL就是万物之源,即使连ArcGIS和QGIS都是引用它完成基础数据的处理。这开源的好东西,无疑是我们最最得意的拿手好戏。
其实GDAL全名为Geospatial Data Abstraction Library,来个官网,这个库分为两大部分是GDALOGR,分别管理着栅格矢量数据。底层是C语言,上层可以是多种语言(包括python)调用,所以不用担心效率的问题。

GDAL主要包括以下几个主要的命令:

  • gdalinfo: 浏览图片信息
  • gdal_translate: 格式转换
  • gdalwarp: 重投影
  • gdal_warp或者gdal_merge.py: 拼接数据
  • gdaltindex: 建立shapefile拥有栅格编号
    Read more »

GeoPySpark中的地图代数

给定一组栅格图层,可能需要组合和过滤这些图层的内容。这是映射代数的函数。GeoPySpark提供了两类地图代数操作:localfocal操作。local操作考虑一个或多个栅格的像素或单元格,将函数应用于相应的单元格值。例如,添加两个栅格的像素值来形成一个新的图层是。

focal操作考虑一个输入栅格的每个像素周围的区域,并对每个区域应用操作。该操作的结果存储在输出栅格的相应像素中。例如,可以根据2d高斯分布对以像素为中心的5x5区域进行加权,以影响输入入栅格的模糊。有人可能会认为这相当于一个二维卷积运算。

注意: 映射代数操作只能在TiledRasterLayers上工作,如果一个local操作需要多个输入,那么这些输入必须具有相同的布局和投影。

在开始之前,本指南中的所有示例都需要导入一下包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import geopyspark as gps
import numpy as np

from pyspark import SparkContext
from shapely.geometry import Point, MultiPolygon, LineString, box

conf = gps.geopyspark_conf(master="local[*]", appName="map-algebra")
pysc = SparkContext(conf=conf)

# Setting up the data

cells = np.array([[[3, 4, 1, 1, 1],
[7, 4, 0, 1, 0],
[3, 3, 7, 7, 1],
[0, 7, 2, 0, 0],
[6, 6, 6, 5, 5]]], dtype='int32')

extent = gps.ProjectedExtent(extent = gps.Extent(0, 0, 5, 5), epsg=4326)

layer = [(extent, gps.Tile.from_numpy_array(numpy_array=cells))]

rdd = pysc.parallelize(layer)
raster_layer = gps.RasterLayer.from_numpy_rdd(gps.LayerType.SPATIAL, rdd)
tiled_layer = raster_layer.tile_to_layout(layout=gps.LocalLayout(tile_size=5))

Local Operations

Read more »