Redis
by Ümit ÜNAL
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 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-serverMac
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 ➜ makeRunning
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 & TTLredis> 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
GETSETredis> 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"
MGETredis> SET key1 "Hello"
OK
redis> SET key2 "World"
OK
redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
Strings
INCR & INCRBY & INCRBYFLOATredis> 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
APPENDredis> EXISTS mykey
(integer) 0
redis> APPEND mykey "Hello"
(integer) 5
redis> APPEND mykey " World"
(integer) 11
redis> GET mykey
"Hello World"
Hashes
HMSET & HMGETredis> 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"
RPUSHredis> RPUSH mylist "hello"
(integer) 1
redis> RPUSH mylist "world"
(integer) 2
redis> LRANGE mylist 0 -1
1) "hello"
2) "world"
Lists
LINSERTredis> 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
LINDEXredis> 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
SISMEMBERredis> SADD myset "one"
(integer) 1
redis> SISMEMBER myset "one"
(integer) 1
redis> SISMEMBER myset "two"
(integer) 0
SMEMBERSredis> 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
SUNIONredis> 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
PSUBSCRIBEredis 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