Redis 


by Ümit ÜNAL

@N11.COM

What is Redis?

Redis is an in-memory database that persists on disk.
The data model is key-value, but many different
kind of values are supported:
Strings, Lists, Sets, Sorted Sets, Hashes.

The name 'Redis' is an acronym for
REmote DIctionary Server


Installing Redis

Ubuntu

 apt-get install redis-server
Mac
 umitunal at umitunals-MacBook-Pro ➜  brew install redis
From Source
umitunal at umitunals-MacBook-Pro  ➜ wget http://download.redis.io/redis-stable.tar.gz
umitunal at umitunals-MacBook-Pro  ➜ tar xvzf redis-stable.tar.gz
umitunal at umitunals-MacBook-Pro  ➜ cd redis-stable
umitunal at umitunals-MacBook-Pro  ➜ make
Running
umitunal at umitunals-MacBook-Pro  ➜ redis-server /usr/local/etc/redis.conf
[4394] 03 Dec 22:06:32.176 * Max number of open files set to 10032
[4394] 03 Dec 22:06:32.210 # Server started, Redis version 2.6.16
[4394] 03 Dec 22:06:34.335 * DB loaded from disk: 2.124 seconds
[4394] 03 Dec 22:06:34.335 * The server is now ready to accept connections on port 6


Redis Clients

Many languages have Redis bindings, including:

ActionScript, C, C++, C#, Clojure, Common Lisp, Dart, Erlang, Go, Haskell, Haxe, Io, Java, JavaScript (Node.js), Lua, Objective-C, Perl, PHP, Pure Data, Python, R, Ruby, Scala, Smalltalk and Tcl.

http://redis.io/clients

Strings

SET & GET

redis>  SET mykey "Hello"
OK
redis>  GET mykey
"Hello"
EXPIRE & TTL
redis>  SET mykey "Hello"
OK
redis>  EXPIRE mykey 10
(integer) 1
redis>  TTL mykey
(integer) 10
redis>  SET mykey "Hello World"
OK
redis>  TTL mykey
(integer) -1 

Strings

GETSET
redis>  INCR mycounter
(integer) 1
redis>  GETSET mycounter "0"
"1"
redis>  GET mycounter
"0" 
GETRANGE

redis>  SET mykey "This is a string"
OK
redis>  GETRANGE mykey 0 3
"This"
redis>  GETRANGE mykey -3 -1
"ing"
redis>  GETRANGE mykey 0 -1
"This is a string"
redis>  GETRANGE mykey 10 100
"string"

Strings

MSET

redis>  MSET key1 "Hello" key2 "World"
OK
redis>  GET key1
"Hello"
redis>  GET key2
"World" 
MGET
redis>  SET key1 "Hello"
OK
redis>  SET key2 "World"
OK
redis>  MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil) 


Strings

INCR & INCRBY & INCRBYFLOAT
redis>  SET mykey "10"
OK
redis>  INCR mykey
(integer) 11
redis>  GET mykey
"11"
redis>  SET mykey "10"
OK
redis>  INCRBY mykey 5
(integer) 15 
redis> SET mykey 10.50
OK
redis> INCRBYFLOAT mykey 0.1
"10.6"


Strings

DECR & DECRBY

redis>  SET mykey "10"
OK
redis>  DECR mykey
(integer) 9
redis>  SET mykey "10"
OK
redis>  DECRBY mykey 5
(integer) 5 
APPEND
redis>  EXISTS mykey
(integer) 0
redis>  APPEND mykey "Hello"
(integer) 5
redis>  APPEND mykey " World"
(integer) 11
redis>  GET mykey
"Hello World" 

Hashes

HMSETHMGET
redis> HMSET myhash field1 "Hello" field2 "World"
OK
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World" 
HVALS

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HVALS myhash
1) "Hello"
2) "World"


Lists

LPUSH

redis>  LPUSH mylist "world"
(integer) 1
redis>  LPUSH mylist "hello"
(integer) 2
redis>  LRANGE mylist 0 -1
1) "hello"
2) "world" 
RPUSH
redis>  RPUSH mylist "hello"
(integer) 1
redis>  RPUSH mylist "world"
(integer) 2
redis>  LRANGE mylist 0 -1
1) "hello"
2) "world" 

Lists

LINSERT
redis>  RPUSH mylist "Hello"
(integer) 1
redis>  RPUSH mylist "World"
(integer) 2
redis>  LINSERT mylist BEFORE "World" "There"
(integer) 3
redis>  LRANGE mylist 0 -1
1) "Hello"
2) "There"
3) "World" 

Lists

LREM

redis>  RPUSH mylist "hello"
(integer) 1
redis>  RPUSH mylist "hello"
(integer) 2
redis>  RPUSH mylist "foo"
(integer) 3
redis>  RPUSH mylist "hello"
(integer) 4
redis>  LREM mylist -2 "hello"
(integer) 2
redis>  LRANGE mylist 0 -1
1) "hello"
2) "foo"

Lists

LLEN

redis>  LPUSH mylist "World"
(integer) 1
redis>  LPUSH mylist "Hello"
(integer) 2
redis>  LLEN mylist
(integer) 2 
LINDEX
redis>  LPUSH mylist "World"
(integer) 1
redis>  LPUSH mylist "Hello"
(integer) 2
redis>  LINDEX mylist 0
"Hello"
redis>  LINDEX mylist -1
"World"
redis>  LINDEX mylist 3
(nil) 

Sets

SADD

redis>  SADD myset "Hello"
(integer) 1
redis>  SADD myset "World"
(integer) 1
redis>  SADD myset "World"
(integer) 0
redis>  SMEMBERS myset
1) "Hello"
2) "World 

Sets

SREM

redis>  SADD myset "one"
(integer) 1
redis>  SADD myset "two"
(integer) 1
redis>  SADD myset "three"
(integer) 1
redis>  SREM myset "one"
(integer) 1
redis>  SREM myset "four"
(integer) 0
redis>  SMEMBERS myset
1) "two"
2) "three 

Sets

SISMEMBER
redis>  SADD myset "one"
(integer) 1
redis>  SISMEMBER myset "one"
(integer) 1
redis>  SISMEMBER myset "two"
(integer) 0 
SMEMBERS
redis>  SADD myset "Hello"
(integer) 1
redis>  SADD myset "World"
(integer) 1
redis>  SMEMBERS myset
1) "Hello"
2) "World" 

Sets

SINTER

redis>  SADD key1 "a"
(integer) 1
redis>  SADD key1 "b"
(integer) 1
redis>  SADD key1 "c"
(integer) 1
redis>  SADD key2 "c"
(integer) 1
redis>  SADD key2 "d"
(integer) 1
redis>  SADD key2 "e"
(integer) 1
redis>  SINTER key1 key2
1) "c" 

Sets

SINTER

redis 127.0.0.1:6379> SADD friends:user:100 user200
(integer) 1
redis 127.0.0.1:6379> SADD friends:user:100 user300
(integer) 1
redis 127.0.0.1:6379> SADD friends:user:100 user400
(integer) 1
redis 127.0.0.1:6379> SADD friends:user:200 user100
(integer) 1
redis 127.0.0.1:6379> SADD friends:user:200 user400
(integer) 1
redis 127.0.0.1:6379> SADD friends:user:200 user300
(integer) 1
redis 127.0.0.1:6379> SADD friends:user:200 user500
(integer) 1
redis 127.0.0.1:6379> SINTER friends:user:100  friends:user:200
1) "user400"
2) "user300" 

Sets

SUNION
redis>  SADD key1 "a"
(integer) 1
redis>  SADD key1 "b"
(integer) 1
redis>  SADD key1 "c"
(integer) 1
redis>  SADD key2 "c"
(integer) 1
redis>  SADD key2 "d"
(integer) 1
redis>  SADD key2 "e"
(integer) 1
redis>  SUNION key1 key2
1) "a"
2) "b"
3) "e"
4) "d"
5) "c" 

Sorted Sets


ZADD
redis>  ZADD myzset 1 "one"
(integer) 1
redis>  ZADD myzset 1 "uno"
(integer) 1
redis>  ZADD myzset 2 "two"
(integer) 1
redis>  ZADD myzset 3 "two"
(integer) 0
redis>  ZRANGE myzset 0 -1 WITHSCORES
1) "one"
2) "1"
3) "uno"
4) "1"
5) "two"
6) "3" 

Sorted Sets

ZADD

redis> ZADD days 1 Monday
(integer) 1
redis> ZADD days 2 Tuesday
(integer) 1
redis> ZADD days 3 Wednesday
(integer) 1
redis> ZADD days 4 Thursday
(integer) 1
redis> ZADD days 5 Friday
(integer) 1
redis> ZADD days 6 Saturday
(integer) 1
redis> ZADD days 7 Sunday
(integer) 1
redis> ZRANGE days 0 -1
1. "Monday"
2. "Tuesday"
3. "Wednesday"
4. "Thursday"
5. "Friday"
6. "Saturday"
7. "Sunday"

Sorted Sets

ZRANGEBYSCORE

redis 127.0.0.1:6379> ZADD product:price 100 product1
(integer) 1
redis 127.0.0.1:6379> ZADD product:price 200 product2
(integer) 1
redis 127.0.0.1:6379> ZADD product:price 300 product3
(integer) 1
redis 127.0.0.1:6379> ZADD product:price 400 product4
(integer) 1
redis 127.0.0.1:6379> ZADD product:price 500 product5
(integer) 1
redis 127.0.0.1:6379> ZRANGEBYSCORE product:price 200 400
1) "product2"
2) "product3"
3) "product4" 



Sorted Sets

Other Commands

ZADD
ZCARD
ZCOUNT
ZINCRBY
ZINTERSTORE
ZRANGE
ZRANGEBYSCORE
ZRANK
ZREM
ZREMRANGEBYRANK
ZREMRANGEBYSCORE
ZREVRANGE
ZREVRANGEBYSCORE
ZREVRANK
ZSCAN
ZSCORE
ZUNIONSTORE 

Publish/Subscribe

PSUBSCRIBE
redis 127.0.0.1:6379> PSUBSCRIBE news.product.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.product.*"
3) (integer) 1 

Publish/Subscribe

PUBLISH

redis> MULTI
OK
redis> SET news.product.product.cargo.100 "Sayın Ümit ÜNAL, Ürününüz kargolandı."
QUEUED
redis> SADD news.product.product_cargo 100
QUEUED
redis> PUBLISH news.product.product_cargo 100
QUEUED
redis> EXEC
1. OK
2. (integer) 1
3. (integer) 1 



Publish/Subscribe

PSUBSCRIBE

redis 127.0.0.1:6379> PSUBSCRIBE news.product.*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "news.product.*"
3) (integer) 1
1) "pmessage"
2) "news.product.*"
3) "news.product.product_cargo"
4) "100" 




Redis

By umitunal

Redis

  • 2,520