zoukankan      html  css  js  c++  java
  • 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实现的。

    完结。

  • 相关阅读:
    ubuntu14.04安装chromium以及flash插件
    linux fuser的使用
    对max_allowed_packet这个参数的误解
    Linux hostname主机名配置文件与文件 /etc/hosts解析(copy来的,原作者看到了别打我)
    三个参数,对mysql存储限制的影响
    唉,没来这里好久了,也意味着我这一年多来没干什么正事儿,是回归的时候了!(简单谈谈爬虫的解析器)
    STM32 宏定义翻转端口
    ascii码表
    平均值算法
    stm8 16M晶振下精确软件延时
  • 原文地址:https://www.cnblogs.com/like-minded/p/5239337.html
Copyright © 2011-2022 走看看