redis的ruby客户端(三)

1. 介绍

clients这里列出了redis所支持的语言的全部客户端程序,其中就有ruby的。有这么多的客户端,说明要实现redis的客户端是不难的。其实你只要掌握一种语言的socket编程就能够实现的,好比ruby中的socket编程,本站会有相关的章节来单独介绍在ruby中是如何进行socket编程的。redis是基于tcp/ip的通信协议,也就是说有监听的ip地址和端口号,只要经过一种语言建立socket链接到redis的服务器中,而后发送数据给redis服务器,从redis服务器那获得响应数据再返回,这样就能通信了,也就是一个客户端。在这一篇文章咱们会介绍几种ruby语言实现的redis客户端程序,也要介绍涉及到的相关的redis的技术。git

2. redis-rb

redis-rb是官方推荐的一个gem,它是线程安全的,支持管道,客户端分片,且性能也比较好。github

2.1 安装

首先来安装它。redis

gem install redis
2.2 基本的使用

使用的时候,第一步是链接数据库,进入irb数据库

➜  ~  irb
> require "redis" true > redis = Redis.new #<Redis client v3.2.1 for redis://127.0.0.1:6379/0> 

这样就生成了一个新的实例redisRedis.new默认状况下是链接到本机(127.0.0.1),端口6379,也就是默认的端口,选择的是第0个数据库。编程

这样的数据库是什么意思呢?其实redis也是有数据库的概念的,默认状况下redis会有16个数据库,编号从0到15,固然这个数据库的数量值是能够在配置文件中修改的。默认不指定数据库的状况下,通常就是使用第0个数据库。可是使用SELECT命令能够切换数据库。数据库至关于数据的隔离空间,只是用这个数据来标志隔离空间,就是没有语义化,很难被记住。api

好比我要链接另外一台机器上的redis服务器,能够这样。安全

redis = Redis.new(:host => "10.0.1.1", :port => 6380, :db => 15) 

如今链接好,我就能够发送请求的指令了。ruby

> redis.set("mykey", "hello world") "OK" > redis.get("mykey") "hello world" 

你能够用redis-cli工具查看是否是真的有键为`mykey'的值啦。服务器

在官方readme文档中列出的只有get和set两个方法。可是redis-rb支持全部常见的redis指令。这些方法在源码的其中一个文件lib/redis/distributed.rb可被发现到。好比:markdown

> redis.set :count, 12 "OK" > redis.incr :count 13 
2.3 Pipelining(管道)

管道是用于批量发送指令给redis服务器,当你须要发送不少的指令给redis服务器时,就能够用管道,毕竟你每条指令发送到服务器,再服务器回传响应,都是须要时间的,而把全部指令合成一个管道一块儿发送,这样就能大大地减小时间。好比:

redis.pipelined do redis.set "foo", "bar" redis.incr "baz" end 

关于管道的更多的详细内容能够看官方文档的这篇文章pipelining

除此以外,值得提的是redis-railsredis-rack-cache等gem都是基于redis-rb来实现的。

3. redic

redic是一个轻量级的客户端,它是对hiredis这个gem的封装。而hiredis这个gem是redis的c客户端hiredis的ruby实现,它不像redis-rb多是经过socket链接到redis服务器的,它是能过C语言头文件链接的,它是轻量级的,速度快,性能高。

要使用也是很简单。

redis = Redic.new redis.call("SET", "foo", "bar") 

redis = Redic.new是链接到redis服务器,以后经过call命令调用redis的api。

它不像redis-rb那样,封装了不少可以像操做redis那样的方法,好比"expire"、"ttl"、"flushdb"等。

redic都是经过call这个指令来调用api的,好比

redis.call("SUBSCRIBE", "foo") 

还有,readthisost等gem都是基于redic实现的。

完结。

相关文章
相关标签/搜索