RESTful简单介绍

RESTful介绍

本文主要包含以下内容:

  • 为什么要用RESTful
  • RESTful的定义
  • RESTful的五个关键内容
    • 资源与URI(Resource URI)
    • 统一资源接口(Uniform Interface)
    • 资源的表述 (Representation)
    • 状态的转移 (State Transfer)
    • 超文本驱动 (Hypertext Driven)
  • 简单比较下REST和RPC两种API调用风格

需要注意的是本文只对RESTful进行简单的介绍, 很多内容可探讨的就比较多, 比如安全及授权, 超文本驱动, 所以只对这些内容做简单介绍. 另外文章中的很多内容在实际开发中会有所取舍, 因此本文不是实际开发中的规范, 但是对理解规范是有很大作用的. 另外, 权衡各方面利弊后, 我们会在短期内给出相应的开发规范.

文中出现的错误或表述不清楚的地方, 欢迎大家指正.

Read More

vmware fusion安装vmware tools

mac上vmware fusion虚拟机在ubuntu 14.04 LTS上安装vmware tools

首先要挂在cdrom

sudo mount -t auto /dev/cdrom /mnt/cdrom

如果提示该文件夹不存在, 创建一个

sudo mkdir -p /mnt/cdrom

然后在执行上面的加载步奏, 挂载成功后会有如下的提示

mount: block device /dev/cdrom is write-protected, mounting read-only

Read More

redis持久化

redis持久化

reids持久化类型

Redis 提供了多种不同级别的持久化方式

  • RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot)
  • AOF 持久化记录服务器执行的所有写操作命令,并在服务器启动时,通过重新执行这些命令来还原数 据集。AOF 文件中的命令全部以 Redis 协议的格式来保存,新命令会被追加到文件的末尾。Redis 还 可以在后台对 AOF 文件进行重写(rewrite),使得 AOF 文件的体积不会超出保存数据集状态所需的 实际大小
  • Redis 还可以同时使用 AOF 持久化和 RDB 持久化。在这种情况下,当 Redis 重启时,它会优先使用 AOF 文件来还原数据集,因为 AOF 文件保存的数据集通常比 RDB 文件所保存的数据集更完整

RDB的优点

  • RDB 是一个非常紧凑(compact)的文件,它保存了 Redis 在某个时间点上的数据集。这种文件非常适合用于进行备份:比如说,你可以在最近的 24 小时内,每小时备份一次 RDB 文件,并且在每个月的每一天,也备份一个 RDB 文件。这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本
  • RDB 非常适用于灾难恢复(disaster recovery):它只有一个文件,并且内容都非常紧凑,可以(在加 密后)将它传送到别的数据中心
  • RDB 可以最大化 Redis 的性能:父进程在保存 RDB 文件时唯一要做的就是 fork 出一个子进程,然 后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘 I/O 操作
  • RDB 在恢复大数据集时的速度比 AOF 的恢复速度要快

RDB的缺点

  • 如果你需要尽量避免在服务器故障时丢失数据,那么RDB不适合你。虽然 Redis 允许你设置不同的 保存点(save point)来控制保存 RDB 文件的频率,但是,因为 RDB 文件需要保存整个数据集的状态,所以它并不是一个轻松的操作。因此你可能会至少5分钟才保存一次 RDB 文件。在这种情况下, 一旦发生故障停机,你就可能会丢失好几分钟的数据

  • 每次保存 RDB 的时候,Redis 都要 fork() 出一个子进程,并由子进程来进行实际的持久化工作。在 数据集比较庞大时,fork() 可能会非常耗时,造成服务器在某某毫秒内停止处理客户端;如果数据集 非常巨大,并且 CPU 时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒。虽然 AOF 重 写也需要进行 fork() ,但无论 AOF 重写的执行间隔有多长,数据的耐久性都不会有任何损失

我们来看看rdb的配置

保存时间的设置

# In the example below the behaviour will be to save:
# after 900 sec (15 min) if at least 1 key changed
# after 300 sec (5 min) if at least 10 keys changed
# after 60 sec if at least 10000 keys changed

save 900 1
save 300 10
save 60 10000 #60秒类超过10000个key的改变

备份失败的时候停止写入,已保持数据一致

stop-writes-on-bgsave-error yes

压缩rdb文件

rdbcompression yes

rdb文件保存目录及保存文件名

dbfilename dump.rdb
dir /usr/local/var/db/redis/          
AOF的优点
  • 使用AOF持久化会让Redis变得非常耐久(much more durable):你可以设置不同的fsync策略, 比如无 fsync ,每秒钟一次 fsync ,或者每次执行写入命令时fsync 。AOF 的默认策略为每秒钟fsync一次,在这种配置下,Redis仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据(fsync 会在后台线程执行,所以主线程可以继续努力地处理命令请求)

  • AOF文件是一个只进行追加操作的日志文件(append only log),因此对 AOF 文件的写入不需要进行seek ,即使日志因为某些原因而包含了未写入完整的命令(比如写入时磁盘已满,写入中途停机, 等等),redis-check-aof工具也可以轻易地修复这种问题

  • Redis可以在AOF文件体积变得过大时,自动地在后台对AOF进行重写: 重写后的新AOF文件包含了恢复当前数据集所需的最小命令集合。整个重写操作是绝对安全的, 因为Redis在创建新AOF文件的过程中,会继续将命令追加到现有的AOF文件里面,即使重写过程中发生停机,现有的AOF文件也不会丢失。而一旦新AOF文件创建完毕,Redis 就会从旧AOF文件切换到新AOF文件,并开始对新AOF文件进行追加操作

  • **AOF文件有序地保存了对数据库执行的所有写入操作,这些写入操作以Redis协议的格式保存,因此AOF文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。导出(export)AOF文件也非常简单:举个例子,如果你不小心执行了FLUSHALL命令,但只要AOF文件未被重写,那么只要停止服务器,移除AOF文件末尾的FLUSHALL命令,并重启Redis ,就可以将数据集恢复到FLUSHALL执行之前的状态

AOF的缺点
  • 对于相同的数据集来说,AOF 文件的体积通常要大于 RDB 文件的体积
  • 根据所使用的 fsync 策略,AOF 的速度可能会慢于 RDB 。在一般情况下,每秒 fsync 的性能依然非常高,而关闭 fsync 可以让 AOF 的速度和 RDB 一样快,即使在高负荷之下也是如此。不过在处理巨大的写入载入时,RDB可以提供更有保证的最大延迟时间(latency)

我们来看看AOF的配置

是否打开aof配置

appendonly no

配置aof同步方式

# The fsync() call tells the Operating System to actually write data on disk
 # instead to wait for more data in the output buffer. Some OS will really flush
 # data on disk, some other OS will just try to do it ASAP.  

 # appendfsync always #每一个变化总是写入到文件 
 appendfsync everysec #每一秒写入变化到文件
 # appendfsync no    #让操作系统自己选择写入文件的时间

配置文件名称

appendfilename "appendonly.aof"

如果fsync策略设置成always or everysec的时候, 一个可能的保存进程在某些linux配置下可能会阻塞IO, 这个时候可以暂停AOF

# When the AOF fsync policy is set to always or everysec, and a background
  # saving process (a background save or AOF log background rewriting) is
  # performing a lot of I/O against the disk, in some Linux configurations
  # Redis may block too long on the fsync() call. Note that there is no fix for
  # this currently, as even performing fsync in a different thread will block
# our synchronous write(2) call.

no-appendfsync-on-rewrite no    

设置aof文件重写文件的大小

auto-aof-rewrite-percentage 100
  auto-aof-rewrite-min-size 64mb          

原码反码补码的理解

转载文章原码反码补码,觉得写的非常的好

一. 机器数和真值

  1. 机器数

    一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

    比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是0000那么,这里的 00000011 和 10000011 。就是机器数。0011。如果是 -3 ,就是 10000011 。

Read More