clients這裏列出了redis所支持的語言的全部客戶端程序,其中就有ruby的。有這麼多的客戶端,說明要實現redis的客戶端是不難的。其實你只要掌握一種語言的socket編程就能夠實現的,好比ruby中的socket編程,本站會有相關的章節來單獨介紹在ruby中是如何進行socket編程的。redis是基於tcp/ip的通信協議,也就是說有監聽的ip地址和端口號,只要經過一種語言建立socket鏈接到redis的服務器中,而後發送數據給redis服務器,從redis服務器那獲得響應數據再返回,這樣就能通信了,也就是一個客戶端。在這一篇文章咱們會介紹幾種ruby語言實現的redis客戶端程序,也要介紹涉及到的相關的redis的技術。git
redis-rb是官方推薦的一個gem,它是線程安全的,支持管道,客戶端分片,且性能也比較好。github
首先來安裝它。redis
gem install redis
使用的時候,第一步是鏈接數據庫,進入irb
。數據庫
➜ ~ irb
> require "redis" true > redis = Redis.new #<Redis client v3.2.1 for redis://127.0.0.1:6379/0>
這樣就生成了一個新的實例redis
,Redis.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
管道是用於批量發送指令給redis服務器,當你須要發送不少的指令給redis服務器時,就能夠用管道,畢竟你每條指令發送到服務器,再服務器回傳響應,都是須要時間的,而把全部指令合成一個管道一塊兒發送,這樣就能大大地減小時間。好比:
redis.pipelined do redis.set "foo", "bar" redis.incr "baz" end
關於管道的更多的詳細內容能夠看官方文檔的這篇文章pipelining。
除此以外,值得提的是redis-rails和redis-rack-cache等gem都是基於redis-rb來實現的。
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")
還有,readthis和ost等gem都是基於redic實現的。
完結。