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