Geek Academy Week 3 :: Redis for developer

74
REDIS For Developer 3rd WEEK SATURDAY, JULY 06, 2013 – SUNDAY, JULY 07, 2013 GEEK ACADEMY 2013

description

Geek Academy Week 3 :: Redis for developer - Redis - With Java Library => Jedis - With Spring Data :: Redis

Transcript of Geek Academy Week 3 :: Redis for developer

Page 1: Geek Academy Week 3 :: Redis for developer

REDISFor Developer

3rd WEEKSATURDAY, JULY 06, 2013 – SUNDAY, JULY 07, 2013

GEEK ACADEMY 2013

Page 2: Geek Academy Week 3 :: Redis for developer

INSTRUCTOR TEAM

TAVEE SOMKIAT THAWATCHAI

Tavee (Vee) Khunbida Somkiat (Pui) Puisungnuen Thawatchai (Boy) JongsuwanpaisanSiam Chamnan Kit

[email protected]

Siam Chamnan Kit

[email protected]

Siam Chamnan Kit

[email protected]

Page 3: Geek Academy Week 3 :: Redis for developer

WHAT IS REDIS ?

o REmote DIrectory Servero By Salvatore Sanfilippo (@antirez) working at

VMWareo March 2009o redis.io

Page 4: Geek Academy Week 3 :: Redis for developer

WHAT IS REDIS ?

o REmote DIrectory Servero NOSQL => Key-Valueo Data Structure Server

Page 5: Geek Academy Week 3 :: Redis for developer

NOSQL ( Not Only SQL )

o Key-Value Storeo Document Databaseo Column Storeo Graph Database

http://www.10gen.com/nosql

Page 6: Geek Academy Week 3 :: Redis for developer

NOSQL ( Not Only SQL )

o Key-Value Storeo Redis, Riak, Memcached, Tokyo Cabinet, LevelDB

o Document Databaseo MongoDB, CouchDB, RethinkDB

o Column Family Storeo Cassandra, Hadoop, HBase

o Graph Databaseo Neo4J, HyperGraphDB, InfoGrid

Page 7: Geek Academy Week 3 :: Redis for developer

WHY WE USE REDIS ?

o Very Fast ( In memory )o Few Dependencieso Single Threado Lot of client available

o Javao Rubyo PHPo Pythono .Net

Page 8: Geek Academy Week 3 :: Redis for developer

FEATURES

o Values Typeo Stringo Listo Seto Hasho Sorted Set

o Persistenceo Memoryo Snapshoto Append Only Log ( AOL )

Page 9: Geek Academy Week 3 :: Redis for developer

FEATURES

o Replicationo Master-Slave

o Pub-Subo Clustering ( Beta version )

Page 10: Geek Academy Week 3 :: Redis for developer

WHO USE REDIS ?

http://redis.io/topics/whos-using-redis

Page 11: Geek Academy Week 3 :: Redis for developer

REDIS IN PRACTICE

o View Counto Presenceo Activity Feedo Suggestiono Cachingo Trackingo Loggingo ….

Page 12: Geek Academy Week 3 :: Redis for developer

DATA STRUCTURE

GEEK ACADEMY 2013

Page 13: Geek Academy Week 3 :: Redis for developer

List

o List of Stringo Sorted by insertion ordero Max length of List = 232 -1o Big O

o Add operation = O(1)o Access operation = O(S+N)o Update = O(1)o Delete = O(1)

Page 14: Geek Academy Week 3 :: Redis for developer

Set

o Unordered collections of Stringo Not repeat memberso Max length of List = 232 -1o Operation => Union, Intersection, Differento Big O

o Add operation = O(N)o Access operation = O(N)o Update = O(1)o Delete = O(1)o Exists = O(1)

Page 15: Geek Academy Week 3 :: Redis for developer

Sorted Set

o Like Set BUT …o Ordered collections of String by Scoreo Big O

o Add operation = O(log(N))o Access operation = O(log(N)+M)o Delete = O(M*log(N))

Page 16: Geek Academy Week 3 :: Redis for developer

Hash

o Mapping Key-Valueo Max length of List = 232 -1o Big O

o Add operation = O(N)o Access operation = O(1)o Delete = O(1)

Page 17: Geek Academy Week 3 :: Redis for developer

Summary

Page 18: Geek Academy Week 3 :: Redis for developer

INSTALLATION FOR DEV

GEEK ACADEMY 2013

Page 19: Geek Academy Week 3 :: Redis for developer

FOR WINDOWS

o Download at o https://github.com/dmajkic/redis/downloads

o Commandso redis-server.exeo redis-cli.exeo redis-benchmark

Page 20: Geek Academy Week 3 :: Redis for developer

FOR UNIX

$ wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz

$ tar xzf redis-2.6.14.tar.gz$ cd redis-2.6.14$ make

Starting server$ src/redis-server

Interact with Redis$ src/redis-cli

Page 21: Geek Academy Week 3 :: Redis for developer

FOR MAC

o Up to you

Page 22: Geek Academy Week 3 :: Redis for developer

INSTALLATION FOR DEVOPS

GEEK ACADEMY 2013

Page 23: Geek Academy Week 3 :: Redis for developer

VAGRANT + PUPPET

o OS = Ubuntuo Configure repository of Rediso Install with apt-get

Page 24: Geek Academy Week 3 :: Redis for developer

Configure repository

Page 25: Geek Academy Week 3 :: Redis for developer

Install and Starting Redis Service

Page 26: Geek Academy Week 3 :: Redis for developer

Install on Virtual Machine

$vagrant up

$vagrant reload

$vagrant provision

Page 27: Geek Academy Week 3 :: Redis for developer

BASIC USAGE

GEEK ACADEMY 2013

Page 28: Geek Academy Week 3 :: Redis for developer

LET’S DEMO

o redis-clio http://try.redis.io/o http://redis.io/commands

Page 29: Geek Academy Week 3 :: Redis for developer

DEMO 1

o PINGo INFOo KEYSo EXISTSo DELo FLUSHDB

Page 30: Geek Academy Week 3 :: Redis for developer

DEMO 2 :: Working with String

o SETo GETo GETRANGEo APPEND

Page 31: Geek Academy Week 3 :: Redis for developer

DEMO 3 :: Counter

o INCRo INCRBYo DECRo DECRBY

Page 32: Geek Academy Week 3 :: Redis for developer

DEMO 4 :: Working with List

o LPUSHo RPUSHo LRANGEo LTRIMo LLEN

Page 33: Geek Academy Week 3 :: Redis for developer

DEMO 5 :: Working with Set

o SADDo SMEMBERSo SINTERo SPOPo SRANDMEMBERo SUNIONSTORE

Page 34: Geek Academy Week 3 :: Redis for developer

DEMO 6 :: Working with Sorted Set

o ZADDo ZRANGEo ZRANGEBYSCOREo ZRANKo ZINCRBYo ZREVRANGE

Page 35: Geek Academy Week 3 :: Redis for developer

DEMO 7 :: Working with Hash

o HSETo HGETo HGETALLo HDELo HEXISTSo HLENo HMSETo HMGET

Page 36: Geek Academy Week 3 :: Redis for developer

REDIS#VIEW COUNT

GEEK ACADEMY 2013

Page 37: Geek Academy Week 3 :: Redis for developer

View count with Redis

Page 38: Geek Academy Week 3 :: Redis for developer

REDIS#PRESENCE

GEEK ACADEMY 2013

Page 39: Geek Academy Week 3 :: Redis for developer

Presence with Redis

o Presence = Who’s Online ?o What’s Data Structure ?

Page 40: Geek Academy Week 3 :: Redis for developer

Presence with Redis

Online Users

Friends

Page 41: Geek Academy Week 3 :: Redis for developer

Data Structure ?

o Listo Seto Sorted Set

Page 42: Geek Academy Week 3 :: Redis for developer

Implementation ?

o Set

o Define Keyo Online user

o Key = user:online:<time>o Value = <user id>

o Friendso Key = user:friend:<user id>o Value = <user id>

Page 43: Geek Academy Week 3 :: Redis for developer

Implementation ?

o Online Userso sadd user:online:1 1o sadd user:online:1 2o sadd user:online:1 3

o sadd user:online:2 3o sadd user:online:2 4

Page 44: Geek Academy Week 3 :: Redis for developer

Implementation ?

o Friends by Usero sadd user:friend:1 2o sadd user:friend:1 3

Page 45: Geek Academy Week 3 :: Redis for developer

Implementation ?

o Find Friends are online in last 2 minuteso sunionstore online_users user:online:1

user:online:2o sinter online_users user:friend:1

Page 46: Geek Academy Week 3 :: Redis for developer

Presence with Redis

Page 47: Geek Academy Week 3 :: Redis for developer

REDIS#SUGGESTION

GEEK ACADEMY 2013

Page 48: Geek Academy Week 3 :: Redis for developer

Keyword Suggestion with Redis

Page 49: Geek Academy Week 3 :: Redis for developer

DBRMS Solution

o SELECT KEYWORDo FROM SOME_TABLEo WHERE LOWER(KEYWORD) LIKE “redis%”

Page 50: Geek Academy Week 3 :: Redis for developer

Redis Solution

o What is Data Structure ?o Listo Seto Sorted Set

Page 51: Geek Academy Week 3 :: Redis for developer

Implementation ?

o Sorted Set

o Example => rediso ro reo redo redio redis

Page 52: Geek Academy Week 3 :: Redis for developer

Specified word

o Example => rediso ro reo redo red*o redio rediso redis*

Page 53: Geek Academy Week 3 :: Redis for developer

Algorithm

o Called N-gram

http://en.wikipedia.org/wiki/N-gramhttp://books.google.com/

ngrams/

Page 54: Geek Academy Week 3 :: Redis for developer

Add data to Redis Sorted Set

o zadd my_data 0 ro zadd my_data 0 reo zadd my_data 0 redo zadd my_data 0 red*o zadd my_data 0 redio zadd my_data 0 rediso zadd my_data 0 redis*

Page 55: Geek Academy Week 3 :: Redis for developer

List of data in Sorted Set

o zrange my_data 0 -1

o zrank my_data ro zrank my_data re

Page 56: Geek Academy Week 3 :: Redis for developer

How to apply in application ?

o Let’s discussion

Page 57: Geek Academy Week 3 :: Redis for developer

REDIS#CACHING

GEEK ACADEMY 2013

Page 58: Geek Academy Week 3 :: Redis for developer

Caching

o Denormalization Datao Generalization Cache with LRU, TTL

Page 59: Geek Academy Week 3 :: Redis for developer

Redis :: Memory policy

o Volatile-LRUo Volatile-TTLo Volatile-Randomo AllKeys-LRUo AllKeys-Randomo NoEviction

Page 60: Geek Academy Week 3 :: Redis for developer

WORKING WITH JAVA

GEEK ACADEMY 2013

Page 61: Geek Academy Week 3 :: Redis for developer

Redis Client Library

o Jediso JRediso JDBC-Rediso RJCo Redis-protocolo Lettuce

http://redis.io/clients

Page 62: Geek Academy Week 3 :: Redis for developer

For Traditional Developer

o Goto webo Search and Downloado Copy to build path of project !!!!o Not for geek ….

Page 63: Geek Academy Week 3 :: Redis for developer

For Geek

o Use Maven or Gradle

Page 64: Geek Academy Week 3 :: Redis for developer

Jedis

o https://github.com/xetorthio/jediso Maven Dependency

<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.0.0</version> <type>jar</type> <scope>compile</scope></dependency>

Page 65: Geek Academy Week 3 :: Redis for developer

Jedis :: Easy to use

Jedis jedis = new Jedis("localhost");

jedis.set("foo", "bar");

String value = jedis.get("foo");

Page 66: Geek Academy Week 3 :: Redis for developer

WORKING WITH SPRING FRAMEWORK

GEEK ACADEMY 2013

Page 67: Geek Academy Week 3 :: Redis for developer

Let’s go

o We use Spring Data with Rediso http://www.springsource.org/spring-data/

redis

Page 68: Geek Academy Week 3 :: Redis for developer

Working with Maven

<repository> <id>spring-release</id> <name>Spring Maven RELEASE Repository</name>

<url>http://maven.springframework.org/release</url></repository>

<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.0.5.RELEASE</version></dependency>

Page 69: Geek Academy Week 3 :: Redis for developer

Working with Annotation@Configurationpublic class RedisConfig { @Bean JedisConnectionFactory jedisConnectionFactory() { JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setHostName(redisHost); jedisConnectionFactory.setPort(redisPort); return jedisConnectionFactory; }

@Bean RedisTemplate<String, String> redisTemplate() { final RedisTemplate<String, String> template = new RedisTemplate<String,

String>(); template.setConnectionFactory(jedisConnectionFactory()); template.setKeySerializer(new StringRedisSerializer()); template.setHashValueSerializer(new

GenericToStringSerializer<Object>(Object.class)); template.setValueSerializer(new GenericToStringSerializer<Object>(Object.class)); return template; } }

Page 70: Geek Academy Week 3 :: Redis for developer

Using RedisTemplate in Repository

@Repositorypublic class LoggingDaoImpl implements LoggingDao {

private final static String LOGGING_KEY = "logging";

@Autowired RedisTemplate<String, String> redisTemplate;

public void addData(String key, String value) { redisTemplate.opsForList().rightPush(LOGGING_KEY,

key); redisTemplate.opsForValue().set(key, value); System.out.println( LOGGING_KEY ); System.out.println( key ); }}

Page 71: Geek Academy Week 3 :: Redis for developer

See more

o https://github.com/up1/geeky_week3_demo

o https://github.com/up1/Spring-Framework-Demo/tree/master/SpringRedis

Page 72: Geek Academy Week 3 :: Redis for developer

Question ?

Page 73: Geek Academy Week 3 :: Redis for developer

GEEK ACADEMY 2013

Page 74: Geek Academy Week 3 :: Redis for developer

THANK YOU FORYOUR TIME

GEEK ACADEMY 2013