Redis基本及Resque基本

Redis

redis是类似于memcached的高性能键值缓存工具,但它支持更多的值类型、功能更加丰富,且可以将存储内容定时持久化到磁盘中,是NoSQL家庭中出色的一员

安装

wget https://github.com/antirez/redis/tarball/2.2.0-rc2

tar -xzvf antirez-redis-2.2.0-rc2-0-g0540df2.tar.gz

cd antirez-redis-b703b5d

make

sudo make install

客户端

redis-cli

调试

运行客户端后,输入命令

monitor

注意expire

redis的expire命令有限制,执行此命令后,对key进行的任何操作都将先对key进行清空操作,详见 http://redis.io/topics/expire
2.1.3以上版本不存在这个限制,但未正式发布稳定版,2.1正式发布时会更改为2.2版本

具体表现如下:

redis> set a 100
OK
redis> expire a 600
(integer) 1
redis> incr a
(integer) 1
redis> get a
“1” #正常来说,应返回101,因为还key还没有过期

如果对这个限制敏感,可以尝试 2.2.0rc2版本
make 之后最好再执行下 make test 测试是否正常,我试过,确实不再存在上面说的奇怪表现

redis-rb

redis支持多语言实现的客户端访问,redis-rb是redis的客户端之一,基于ruby语言实现。
redis-rb中的方法名称与redis的一致

Resque

resque是基于redis的后台任务组件,能把任何类或模块作为任务在后台执行,且自带前台管理功能,方便查看执行情况。

使用

1. 编写任务

class WorkerClass

  @queue = "demo"

  def self.perform(args)

    sleep 3 

    puts "Doing something complex with  #{args}"

  end

end

2. 进入任务队列

require "resque"

Resque.enqueue(WorkerClass, args)

3. 运行任务

与rails3整合

0. 配置redis
新增 config/redis.yml 文件,加入以下内容

defaults: &defaults

  host: localhost

  port: 6379



development:

  <<: *defaults



test:

  <<: *defaults



staging:

  <<: *defaults



production:

  <<: *defaults

1. 加载resque

echo "require 'resque'" > config/initializers/load_resque.rb

config = YAML::load(File.open("#{Rails.root}/config/redis.yml"))[Rails.env]

Resque.redis = Redis.new(:host => config['host'], :port => config['port'])

2. 由于worker类都放在app/jobs,因此需要指定rails加载此目录
修改 config/application.rb,加入以下内容

config.autoload_paths += %W(#{config.root}/app/jobs)

3. 加入rake任务
修改 @RakeFile@,加入以下内容

require ‘resque/tasks’
task “resque:setup” => :environment

第二句指明运行 resque:setup 前先初始化rails环境

运行resque后台任务

QUEUE=* rake resque:work

查看任务执行情况

#运行resque前台管理服务器

resque-web -p 8282

打开浏览器,访问 http://0.0.0.0:8282
前台可以查看失败的worker及其日志,可以手动执行retry操作

定时任务

如需定时执行任务,可以使用 resque-scheduler

测试

在测试的时候我们不需要测试过程与resque是异步的,否则resque执行的时候数据可能已经被清空了,使用resque_spec插件可以让resque worker立即执行

详情查看 https://github.com/leshill/resque_spec

你可能感兴趣的:(redis)