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>
这样就生成了一个新的实例redis
,Redis.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-rails和redis-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")
还有,readthis和ost等gem都是基于redic实现的。
完结。
redis的ruby客户端(三)的更多相关文章
- Redis的Python客户端redis-py的初步使用
1. Redis的安装 sudo pip install redis sudo pip install hiredis Parser可以控制如何解析redis响应的内容.redis-py包含两个Par ...
- Redis 小白指南(三)- 事务、过期、消息通知、管道和优化内存空间
Redis 小白指南(三)- 事务.过期.消息通知.管道和优化内存空间 简介 <Redis 小白指南(一)- 简介.安装.GUI 和 C# 驱动介绍> 讲的是 Redis 的介绍,以及如何 ...
- Redis实现之客户端
客户端 Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复.通过使用 ...
- windows下安装,配置redis以及可视化客户端redisClient的安装及基本使用
一. Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 位.这个需要根据你系统平台的实际情 ...
- 【转载】Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍
转载地址:http://blog.csdn.net/truong/article/details/46711045 关键字:Redis的Java客户端Jedis的八种调用方式(事务.管道.分布式…)介 ...
- Redis入门教程(三)— Java中操作Redis
在Redis的官网上,我们可以看到Redis的Java客户端众多 其中,Jedis是Redis官方推荐,也是使用用户最多的Java客户端. 开始前的准备 使用jedis使用到的jedis-2.1.0. ...
- c#实例化继承类,必须对被继承类的程序集做引用 .net core Redis分布式缓存客户端实现逻辑分析及示例demo 数据库笔记之索引和事务 centos 7下安装python 3.6笔记 你大波哥~ C#开源框架(转载) JSON C# Class Generator ---由json字符串生成C#实体类的工具
c#实例化继承类,必须对被继承类的程序集做引用 0x00 问题 类型“Model.NewModel”在未被引用的程序集中定义.必须添加对程序集“Model, Version=1.0.0.0, Cu ...
- 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群
原 扩展Redis的Jedis客户端,哨兵模式读请求走Slave集群 2018年12月06日 14:26:45 温故而知新666 阅读数 897 版权声明:本文为博主原创文章,遵循CC 4.0 b ...
- redis 服务器端安装(三)
redis 服务器端安装(三) Redis is an open source, BSD licensed, advanced key-value store. It is often referre ...
随机推荐
- [转]RPC、CORBA、WebService之区别
RPC是由Sun发明的远程过程调用协议,是第一种真正的分布式应用模型.Windows上使用的R PC是DCERPC的扩展.严格地说,RPC是一种逻辑上的协议,它可以使用Socket.Named Pip ...
- Elasticsearch分析聚合
原文链接:http://blog.csdn.net/napoay/article/details/53484730
- Python爬虫框架--pyspider初体验
之前接触scrapy本来是想也许scrapy能够让我的爬虫更快,但是也许是我没有掌握scrapy的要领,所以爬虫运行起来并没有我想象的那么快,看这篇文章就是之前使用scrapy的写得爬虫.然后昨天我又 ...
- hdu 3836 Equivalent Sets(强连通分量--加边)
Equivalent Sets Time Limit: 12000/4000 MS (Java/Others) Memory Limit: 104857/104857 K (Java/Other ...
- pycharm重置设置,恢复默认设置
备忘,备忘,备忘 window 系统 找到下方目录-->删除. 再重新打开pycharm # Windows Vista, 7, 8, 10: <SYSTEM DRIVE>\User ...
- 在同一台电脑上添加多个ssh key
1.创建新的ssh key: ssh-keygen -t rsa -C "your_email@email.com" 然后让你输入新的文件名称,这里设置为new # 设置名称为En ...
- Switch选择语句能否作用在String【字符串】上,也就是能否这么写:Switch(一个字符串变量)?
Switch选择语句能否作用在String[字符串]上,也就是能否这么写:Switch(一个字符串变量)? 解答:不可以,只能处理int,byte,short,char,(其实是只能处理int,其它三 ...
- AWT从概念产生到完成实现只用了一个月
这种糟糕的设计选择使得那些拥护Java“一次编写,到处运行 (write once, run anywhere)”信条的程序员们过得并不舒畅,因为AWT并不能保证他们的应用在各种平台上表现得有多相似. ...
- debug命令
debug -r 查看寄存器-a 输入指令-t 执形命令 通用寄存器:AX=AH+ALBX=BH+BLCX=CH+CLDX=DH+DL 2Byte 16bitFFFF0-(2的16次方减1) debu ...
- python 之re模块(正则表达式) 分组、断言详解
正则表达式分组.断言详解 提示:阅读本文需要有一定的正则表达式基础. 正则表达式中的断言,作为高级应用出现,倒不是因为它有多难,而是概念比较抽象,不容易理解而已,今天就让小菜通俗的讲解一下. 如果 ...