WebCamp: Developer Day: The Big, the Small and the Redis - Андрей Савченко
Geek Academy Week 3 :: Redis for developer
-
Upload
somkiat-puisungnoen -
Category
Technology
-
view
1.810 -
download
2
description
Transcript of Geek Academy Week 3 :: Redis for developer
REDISFor Developer
3rd WEEKSATURDAY, JULY 06, 2013 – SUNDAY, JULY 07, 2013
GEEK ACADEMY 2013
INSTRUCTOR TEAM
TAVEE SOMKIAT THAWATCHAI
Tavee (Vee) Khunbida Somkiat (Pui) Puisungnuen Thawatchai (Boy) JongsuwanpaisanSiam Chamnan Kit
Siam Chamnan Kit
Siam Chamnan Kit
WHAT IS REDIS ?
o REmote DIrectory Servero By Salvatore Sanfilippo (@antirez) working at
VMWareo March 2009o redis.io
WHAT IS REDIS ?
o REmote DIrectory Servero NOSQL => Key-Valueo Data Structure Server
NOSQL ( Not Only SQL )
o Key-Value Storeo Document Databaseo Column Storeo Graph Database
http://www.10gen.com/nosql
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
WHY WE USE REDIS ?
o Very Fast ( In memory )o Few Dependencieso Single Threado Lot of client available
o Javao Rubyo PHPo Pythono .Net
FEATURES
o Values Typeo Stringo Listo Seto Hasho Sorted Set
o Persistenceo Memoryo Snapshoto Append Only Log ( AOL )
FEATURES
o Replicationo Master-Slave
o Pub-Subo Clustering ( Beta version )
WHO USE REDIS ?
http://redis.io/topics/whos-using-redis
REDIS IN PRACTICE
o View Counto Presenceo Activity Feedo Suggestiono Cachingo Trackingo Loggingo ….
DATA STRUCTURE
GEEK ACADEMY 2013
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)
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)
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))
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)
Summary
INSTALLATION FOR DEV
GEEK ACADEMY 2013
FOR WINDOWS
o Download at o https://github.com/dmajkic/redis/downloads
o Commandso redis-server.exeo redis-cli.exeo redis-benchmark
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
FOR MAC
o Up to you
INSTALLATION FOR DEVOPS
GEEK ACADEMY 2013
VAGRANT + PUPPET
o OS = Ubuntuo Configure repository of Rediso Install with apt-get
Configure repository
Install and Starting Redis Service
Install on Virtual Machine
$vagrant up
$vagrant reload
$vagrant provision
BASIC USAGE
GEEK ACADEMY 2013
LET’S DEMO
o redis-clio http://try.redis.io/o http://redis.io/commands
DEMO 1
o PINGo INFOo KEYSo EXISTSo DELo FLUSHDB
DEMO 2 :: Working with String
o SETo GETo GETRANGEo APPEND
DEMO 3 :: Counter
o INCRo INCRBYo DECRo DECRBY
DEMO 4 :: Working with List
o LPUSHo RPUSHo LRANGEo LTRIMo LLEN
DEMO 5 :: Working with Set
o SADDo SMEMBERSo SINTERo SPOPo SRANDMEMBERo SUNIONSTORE
DEMO 6 :: Working with Sorted Set
o ZADDo ZRANGEo ZRANGEBYSCOREo ZRANKo ZINCRBYo ZREVRANGE
DEMO 7 :: Working with Hash
o HSETo HGETo HGETALLo HDELo HEXISTSo HLENo HMSETo HMGET
REDIS#VIEW COUNT
GEEK ACADEMY 2013
View count with Redis
REDIS#PRESENCE
GEEK ACADEMY 2013
Presence with Redis
o Presence = Who’s Online ?o What’s Data Structure ?
Presence with Redis
Online Users
Friends
Data Structure ?
o Listo Seto Sorted Set
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>
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
Implementation ?
o Friends by Usero sadd user:friend:1 2o sadd user:friend:1 3
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
Presence with Redis
REDIS#SUGGESTION
GEEK ACADEMY 2013
Keyword Suggestion with Redis
DBRMS Solution
o SELECT KEYWORDo FROM SOME_TABLEo WHERE LOWER(KEYWORD) LIKE “redis%”
Redis Solution
o What is Data Structure ?o Listo Seto Sorted Set
Implementation ?
o Sorted Set
o Example => rediso ro reo redo redio redis
Specified word
o Example => rediso ro reo redo red*o redio rediso redis*
Algorithm
o Called N-gram
http://en.wikipedia.org/wiki/N-gramhttp://books.google.com/
ngrams/
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*
List of data in Sorted Set
o zrange my_data 0 -1
o zrank my_data ro zrank my_data re
How to apply in application ?
o Let’s discussion
REDIS#CACHING
GEEK ACADEMY 2013
Caching
o Denormalization Datao Generalization Cache with LRU, TTL
Redis :: Memory policy
o Volatile-LRUo Volatile-TTLo Volatile-Randomo AllKeys-LRUo AllKeys-Randomo NoEviction
WORKING WITH JAVA
GEEK ACADEMY 2013
Redis Client Library
o Jediso JRediso JDBC-Rediso RJCo Redis-protocolo Lettuce
http://redis.io/clients
For Traditional Developer
o Goto webo Search and Downloado Copy to build path of project !!!!o Not for geek ….
For Geek
o Use Maven or Gradle
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>
Jedis :: Easy to use
Jedis jedis = new Jedis("localhost");
jedis.set("foo", "bar");
String value = jedis.get("foo");
WORKING WITH SPRING FRAMEWORK
GEEK ACADEMY 2013
Let’s go
o We use Spring Data with Rediso http://www.springsource.org/spring-data/
redis
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>
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; } }
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 ); }}
See more
o https://github.com/up1/geeky_week3_demo
o https://github.com/up1/Spring-Framework-Demo/tree/master/SpringRedis
Question ?
GEEK ACADEMY 2013
THANK YOU FORYOUR TIME
GEEK ACADEMY 2013