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實現的。

完結。

相關文章
相關標籤/搜索