Fork me on GitHub

Redis desde Python, Ruby, Lua, PHP y Node

September 6, 2014

El ejercicio es abrir varias terminales y jugar con redis desde distintos lenguajes. Para cada lenguaje se puede usar su propia consola interactiva.

Primero un ejemplo simple usando la consola de redis

$ redis-cli 
127.0.0.1:6379> set foo bar
OK
127.0.0.1:6379> get foo
"bar"

La consola de redis también puede usarse de esta forma

$ echo "set foo bar" | redis-cli
OK
$ echo "get foo" | redis-cli
"bar"

Finalmente los clientes. En el sitio de redis hay un listado de clientes para muy diversos lenguajes. De ahí elegí los siguientes.

Python

Github: redis-py

$ sudo pip install redis
$ python
>>> import redis
>>> r = redis.Redis()
>>> r.set('foo', 'bar')
True
>>> r.get('foo')
'bar'

Ruby

Github: redis-rb

$ sudo gem install redis
$ irb
>> require 'redis'
=> true
>> redis = Redis.new
=> #<Redis client v3.1.0 for redis://127.0.0.1:6379/0>
>> redis.set "foo", "bar"
=> "OK"
>> redis.get "foo"
=> "bar"

Lua

Github: redis-lua

$ sudo apt-get install lua-redis
$ lua
> redis = require 'redis'
> client = redis.connect('127.0.0.1', 6379)
> client:set('foo', 'bar')
> foo = client:get('foo')
> print(foo)
bar

PHP

Github: phpredis

$ sudo apt-get install php5-redis
$ php -a
php > $redis = new Redis();
php > $redis->pconnect('127.0.0.1', 6379);
php > $redis->set('foo', 'bar');
php > $foo = $redis->get('foo');
php > print $foo . "\n";
bar

Node

Github: node_redis

$ npm install redis
$ node
> var redis = require('redis')
> var client = redis.createClient(6379, '127.0.0.1')
> client.set('foo', 'bar', redis.print)
true
> Reply: OK
> client.get('foo', function(err, res) { console.log(res) })
true
> bar

Ahora que tenemos todos los clientes funcionando hagamos consultas. La lista de comandos están en el sitio de redis: http://redis.io/commands/. Usaré hash. Algo my bueno es que en todos los clientes los comandos tienen el mismo nombre que los nativos de redis así que es fácil usarlos.

#python
>>> r.hset('myhash', 'mykey1', 'myvalue 1')
>>> 0L
#ruby
>> redis.hget('myhash', 'mykey1')
=> "myvalue 1"
>> redis.hset('myhash', 'mykey2', 'myvalue 2')
=> false
#php
php > $hash = $redis->hgetall('myhash');
php > print_r($hash);
Array
(
    [mykey1] => myvalue 1
    [mykey2] => myvalue 2
)
#lua
> hash = client:hgetall('myhash')
> print(hash.mycount)
1
> client:hdel('myhash', 'myvalue1')
#node
> client.hgetall('myhash', function(err, rep) { console.log( rep ) })
true
> { mykey2: 'myvalue2',
  mycount: '1' }

Recursos

Lua Node.js PHP Python Ruby