用户工具


redis 是一个内存数据库,但会再磁盘生成镜像

特点

  • 数据大写不能操作内存大小
  • 支持数据类型较多(很贴近编程语言中的数据类型),且可以设定过期时间
  • 一台机器可以同时起多个redis服务
  • 写入完毕后。自动写到磁盘,重启后数据依然还在
  • 只能使用单线程(这么设计的目的是避免使用锁)

实战

安装

  • 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')

集群