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 ...
随机推荐
- 如何使用Photoshop(PS)将图片的底色变为透明
很多时候需要将一张图片的底色变得透明.本文描述了使用PS将图片的一部分变得透明的方法.本例将一段艺术字的背景去掉,将背景透明的文字单独保存成图片,这样以后将这段文字粘贴到其他素材上的时候,就不用担心它 ...
- The Definitive Guide To Django 2 学习笔记(九) 第五章 模型 (一)数据库访问
以MySql数据库为例,先到http://dev.mysql.com/downloads/connector/python/处下载MysqlConnector for python的连接器. from ...
- Java动态代理机制小结
因为最近学习hadoop中用到了动态代理的相关知识,之前AOP编程也碰到过,所以在这里特地总结一下. 在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(In ...
- sublime3 Package Control不能使用
手动下载插件包:https://sublime.wbond.net/Package%20Control.sublime-package,复制到%SumlimeText_HOME%\Data\Insta ...
- $.messager.show扩展:指定位置显示
扩展了个$.messager.showBySite,根据舍得的位置显示$.messager.show.代码如下: /** * 指定位置显示$.messager.show * options $.mes ...
- 让IE6支持min-width和max-width的方法
正如君所想象的一样,同实现层的fixed一样,用的是expression语句.例如div#demo在: IE6下最小宽度300px: 或 *html div#demo { width:expres ...
- Educational Codeforces Round 22 E. Army Creation 主席树 或 分块
http://codeforces.com/contest/813/problem/E 题目大意: 给出长度为n的数组和k, 大小是1e5级别. 要求在线询问区间[l, r]权值, 权值定义为对于 ...
- yalmip + lpsolve + matlab 求解混合整数线性规划问题(MIP/MILP)
最近建立了一个网络流模型,是一个混合整数线性规划问题(模型中既有连续变量,又有整型变量).当要求解此模型的时候,发现matlab优化工具箱竟没有自带的可以求解这类问题的算法(只有bintprog求解器 ...
- java之路径问题
1.this.class.getClassLoader().getResource("路径").getPath();路径参数不能以“/”开头,获取classes目录下文件的路径 2 ...
- MathType可以编辑带圈乘号吗
在数学中有很多符号,可能这些符号我们用得上,也有些符号我们很少用,甚至用不上,但是我们用不上,不代表不存在这个符号,也不代表别人用不上,只是各自所涉及到的知识领域不一样而已.而对于加减乘除运算,几乎每 ...