View
8
Download
0
Category
Preview:
Citation preview
The Wonders of Redis key-value store
Shashank Tiwariblog: shanky.org | twitter: @tshanky
st@treasuryofideas.com
Tuesday, January 25, 2011
What’s Redis?
• open source key-value store
• a data structure server
• values in key-value pairs can be strings, hashes, lists, sets, sorted sets
Tuesday, January 25, 2011
Where to find it?
• redis.io
• download a copy from http://redis.io/download
Tuesday, January 25, 2011
Who is building it?
• Core developers
• Salvatore Sanfilippo, twitter: @antirez
• Pieter Noordhuis, twitter: @pnoordhuis
• Main sponsor
• VMware
Tuesday, January 25, 2011
Written in
• ANSI C
• runs on POSIX compliant systems with no external dependencies
Tuesday, January 25, 2011
How can it be used?
• as an in memory data store
• with option to persist to disk
• in standalone mode or as a master-slave replicated set
• Redis cluster -- coming soon! (June 2011)
• as cache
Tuesday, January 25, 2011
Redis Architecture
Tuesday, January 25, 2011
Download and install
• curl -O http://redis.googlecode.com/files/redis-2.2.0-rc4.tar.gz
(just a 436kb download)
• tar zxvf redis-2.2.0-rc4.tar.gz
• cd redis-2.2.0-rc4
• make & make install (installs in /usr/local/bin)
• make test (to be sure you install it correctly)
Tuesday, January 25, 2011
Start the redis-server
• /usr/local/bin/redis-server
...Server started, Redis version 2.1.12
...The server is now ready to accept connections on port 6379
Tuesday, January 25, 2011
Connect with redis-cli
• /usr/local/bin/redis-cli
redis> set key1 val1
OK
redis> get key1
"val1"
Tuesday, January 25, 2011
String key-value pairs
• like memcached
• with persistence
• key and value -- binary-safe strings
Tuesday, January 25, 2011
Binary-safe?
redis> set "a key _" "another value"OK
redis> get "a key _""another value"
Tuesday, January 25, 2011
Binary-safe? (...cont)
redis> set "a key \n" "a value"OK
redis> get "a key \n""a value"
Tuesday, January 25, 2011
String Commands
Tuesday, January 25, 2011
String cmd: GETSET
• You have already seen SET and GET
redis> getset k1 v2
"v1"
redis> get k1
"v2"
Tuesday, January 25, 2011
String cmd: STRLEN
redis> get "a key _"
"another value"
redis> strlen "a key _"
(integer) 14
redis> strlen nonexistent_key
(integer) 0
Tuesday, January 25, 2011
String cmd: GETRANGE
redis> get "a key _"
"another value"
redis> getrange "a key _" 0 4
"anoth"
redis> getrange "a key _" 0 -1
"another value"
Tuesday, January 25, 2011
String cmd: APPEND
redis> append k3 "value"
(integer) 5
redis> append k3 "a "
(integer) 7
redis> get k3
"valuea "
Tuesday, January 25, 2011
String cmd: MGET
redis> mget k1 k2 k3
1) "v2"
2) "a value \"
3) "valuea "
Tuesday, January 25, 2011
String cmd: MSET
redis> mset key1 val1 key2 val2
OK
redis> get key1
"val1"
redis> get key2
"val2"
Tuesday, January 25, 2011
String cmd: SETNX(set if key does not exist)
redis> setnx key3 val3(integer) 1
redis> get key3
"val3"
redis> setnx key2 newval2(integer) 0
redis> get key2
"val2"
Tuesday, January 25, 2011
String cmd: MSETNX(does nothing if even one key already exists)
redis> msetnx key3 newval3 key4 val4
(integer) 0
redis> get key3
"val3"
redis> get key4
(nil)
Tuesday, January 25, 2011
String cmd: SETEX(set key value and set key timeout)
redis> setex key_w_timeout 15 aVal
OK
redis> get key_w_timeout
"aVal"
redis> ttl key_w_timeout
(integer) 15 (this value will vary depending on when you run it)
Tuesday, January 25, 2011
String cmd: SETRANGE redis> set key_1 "What's NoSQL?"OK
redis> get key_1
"What's NoSQL?"
redis> setrange key_1 7 "a key-value store?"(integer) 25
redis> get key_1
"What's a key-value store?"
Tuesday, January 25, 2011
String cmd: GETBIT(bit value stored at offset)
redis> get key_1
"What's a key-value store?"
redis> getbit key_1 8
(integer) 0
redis> getbit key_1 9
(integer) 1
Tuesday, January 25, 2011
String cmd: SETBIT
redis> setbit key_1 8 1
(integer) 0
redis> getbit key_1 8
(integer) 1
Tuesday, January 25, 2011
String (int) cmd: INCR
redis> set count 10
OK
redis> incr count
(integer) 11
redis> get count
"11"
Tuesday, January 25, 2011
String (int) cmd: INCRBY
redis> set count 10
OK
redis> incrby count 5
(integer) 15
redis> get count
"15"
Tuesday, January 25, 2011
String (int) cmd: DECR
redis> set count 10
OK
redis> decr count
(integer) 9
redis> get count
"9"
Tuesday, January 25, 2011
String (int) cmd: DECRBY
redis> set count 10
OK
redis> decrby count 2
(integer) 8
redis> get count
"8"
Tuesday, January 25, 2011
Recommended