redis的ruby客戶端(三)


1. 介紹

clients這里列出了redis所支持的語言的所有客戶端程序,其中就有ruby的。有這么多的客戶端,說明要實現redis的客戶端是不難的。其實你只要掌握一種語言的socket編程就可以實現的,比如ruby中的socket編程,本站會有相關的章節來單獨介紹在ruby中是如何進行socket編程的。redis是基於tcp/ip的通訊協議,也就是說有監聽的ip地址和端口號,只要通過一種語言創建socket連接到redis的服務器中,然后發送數據給redis服務器,從redis服務器那得到響應數據再返回,這樣就能通訊了,也就是一個客戶端。在這一篇文章我們會介紹幾種ruby語言實現的redis客戶端程序,也要介紹涉及到的相關的redis的技術。

2. redis-rb

redis-rb是官方推薦的一個gem,它是線程安全的,支持管道,客戶端分片,且性能也比較好。

2.1 安裝

首先來安裝它。

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命令可以切換數據庫。數據庫相當於數據的隔離空間,只是用這個數據來標志隔離空間,就是沒有語義化,很難被記住。

比如我要連接另一台機器上的redis服務器,可以這樣。

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

現在連接好,我就可以發送請求的指令了。

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

你可以用redis-cli工具查看是不是真的有鍵為`mykey'的值啦。

在官方readme文檔中列出的只有get和set兩個方法。但是redis-rb支持所有常見的redis指令。這些方法在源碼的其中一個文件lib/redis/distributed.rb可被發現到。比如:

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

完結。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM