The Wonders of Redis key value store Series - Day 2 - Distributed... · WhatÕs Redis? ¥ open...

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