redis 是一个内存数据库,但会再磁盘生成镜像
特点
* 数据大写不能操作内存大小
* 支持数据类型较多(很贴近编程语言中的数据类型),且可以设定过期时间
* 一台机器可以同时起多个redis服务
* 写入完毕后。自动写到磁盘,重启后数据依然还在
* 只能使用单线程(这么设计的目的是避免使用锁)
===== 实战 =====
==== 安装 ====
* wget http://download.redis.io/releases/redis-3.0.1.tar.gz
* cd redis-3.0.1
* make
* src/redis-server # 启动服务器
* src/redis-server --port 6380 #指定端口(默认是6379)
* src/redis-server --port 6380 --slaveof 127.0.0.1 6379 # 启动一个redis,并设置为127.0.0.1 6379 的从(默认从只可读不可写)
* src/redis-cli #链接服务器,默认链接localhost
* src/redis-cli -h 127.0.0.1 -p 6379 指定主机端口
* 配置文件redis.conf
==== 基本命令 ====
* src/redis-server 启动
* src/redis-server --port 6380 指定端口
* ./redis-cli shutdown 关闭
* ./redis-cli FLUSHDB 清空所有数据
==== redis主从 ====
redis的主从同步是异步的,也就是说slave可能用旧的数据提供服务(来不及从master同步)
* 语法
* src/redis-server --port 6380 --slaveof 127.0.0.1 6379 --daemonize yes
* 默认主可读可写,从只读
* redis 使用异步复制。从 redis 2.8 开始,slave 也会周期性的告诉 master 现在的数据量。可能只是个机制,用途应该不大。
* 一个 master 可以拥有多个 slave,废话,这也是业界的标配吧。
* slave 可以接收来自其他 slave 的连接。意思是不是就是说 slave 在接收其他的slave的连接之后成为 master ?等下我们来验证。
* redis 复制在 master 这一端是非阻塞的,也就是说在和 slave 同步数据的时候,master 仍然可以执行客户端的操作命令而不受其影响。这点都不能保证,要你干嘛?
* redis 复制在 slave 这一端也是非阻塞的。在配置文件里面有 slave-serve-stale-data 这一项,如果它为 yes ,slave 在执行同步时,它可以使用老版本的数据来处理查询请求,如果是 no ,slave 将返回一个错误。在完成同步后,slave 需要删除老数据,加载新数据,在这个阶段,slave 会阻止连接进来。
* salve的扩展性很强,可以为master分担一些很耗资源的查询操作。salve也可以简单的用来为mater做一个备份
* salve可以代替master把全部的数据集写入磁盘而造成的开销。因此可以把 master 中 save 配置项全部注释掉,不让它进行保存,然后配置 slave ,让 slave 保存。虽然有这个特性,但是我们好像一般不这么做。
==== 客户端连接(python版) ====
下载python sdk:http://redis.io/clients#python
import redis
r = redis.StrictRedis(host='localhost', port=6379, db=0)
r.set('foo', 'hello')
print r.get('foo')
==== 集群 ====
见:http://shift-alt-ctrl.iteye.com/blog/1884370