SlideShare a Scribd company logo
I ty też możesz mieć swoje dane w cache
work://lumesse
twitter://j_palka
blog://geekyprimitives.wordpress.com
scm://bitbucket/kcrimson
scm://github/kcrimson
Dla kogo ta prezentacja?
...nigdy tego nie robiłeś...
...nie wiesz z kim...
...nie wiesz jak...
...boisz się skutków ubocznych...
Czyli 116 rzeczy,
które chciałbyś wiedzieć o cache,
ale boisz się zapytać
Cache to najpowszechniej stosowana
metoda optymalizacji systemów
Cache to najpowszechniej stosowana
metoda optymalizacji systemów
… lecz zanim zaczniemy
...cache eviction...
Sytuacja gdy założony rozmiar cache
został przekroczony i niektóry elementy
(pary klucz wartość) zostają z niego
usunięte. W celu wyboru elementów,
które zostaną usunięte wykorzystywane
są różne algorytmy, takie jak LRU lub LFU
Least Recently Used
Least Frequently Used
Low Inter-reference Recency Set
First In First Out
...cache invalidation...
Sytuacja gdy pewne elementy cache (pary
klucz-wartość), nie są już dłużej aktualne,
zostały usunięte lub też do danego klucza
została przypisana nowa wartość. Pojęcie
ważne dla rozproszonych cache, gdyż
tego typu zdarzenia powinny być
rozgłoszone do wszystkich węzłów cache
There are only two hard things in
Computer Science: cache invalidation and
naming things.
-- Phil Karlton
… a skoro już mowa o rozproszonych
cache'ach
topologie cache
lokalny
zdalny
rozproszony
hybrydowy
...cache expiry...
Sytuacja gdy danemu elementowi cache
(para klucz wartość), został przypisany
czas przez jaki ten element będzie
dostępny w cache. Po tym czasie element
jest usuwany z cache. Dosyć często „cache
expiry” definiowany przez dwa
parametry „TTL” i „idle time”
...cache passivation...
aka
...cache offloading...
Sytuacja gdy rozmiar cache został
przekroczony, i wybrane element cache
zostają zapisane na dysku lub do bazy
danych. Są one nadal dostępne w cache,
jednak dostęp do nich jest wolniejszy.
Wykorzystywane są w tym przypadku
podobne algorytmy jak podczas „cache
eviction”
...cache hit...
...cache miss...
...memcached...
...redis...
...ehcache...
...infinispan...
...memcached...
root@ubuntu:/home/ubuntu# telnet localhost 11211
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
set klucz 0 600 6
123456
STORED
get klucz
VALUE klucz 0 6
123456
END
delete klucz
DELETED
slabs, pages & chunks
250 bajtów per klucz
1048576 bajtów per wartość
dane ulotne jak motyle :)
poszczególne serwery memcached nic nie
wiedza o swoim istnieniu
potrzeba cudu lub...
...biblioteki klienckie...
Spymemcached
https://code.google.com/p/spymemcached/
Xmemcached
https://code.google.com/p/xmemcached/
import net.spy.memcached.MemcachedClient;
public static void main(String[] args) throws Exception {
MemcachedClient client = new MemcachedClient(new
InetSocketAddress("192.168.56.56", 11211));
client.set("data", 600, new Date());
System.out.println(client.get("data"));
client.delete("data");
}
… lub serwery proxy...
twemproxy
moxi
M x N połaczeń
lub
„single point of failure”
...redis...
...to nie serwer cache...
...to baza NoSQL...
...a tak naprawdę to …
„data structure server”
- redis.io
...z możliwościa ustawienia czasu
wygaśnięcia...
...czy to czyni z niego serwer cache?...
ubuntu@ubuntu:~$ redis-cli
redis 127.0.0.1:6379> setex klucz 6000 wartosc
OK
redis 127.0.0.1:6379> get klucz
"wartosc"
redis 127.0.0.1:6379> del klucz
(integer) 1
redis 127.0.0.1:6379> get klucz
(nil)
redis 127.0.0.1:6379>
...replikacja...
...persystencja...
„append only file”
vs
„snapshotting”
...transakcje?...
...transakcje?...
Jedis
https://github.com/xetorthio/jedis
Jredis
https://github.com/alphazero/jredis
RJC
https://github.com/e-mzungu/rjc
Redis-protocol
https://github.com/spullara/redis-protocol
Lettuce
https://github.com/wg/lettuce
...high availability?...
...redis sentinel...
this autumn
coming soon
...ehcache...
...JVM...
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
public class LocalCache {
public static void main(String[] args) {
CacheManager cacheManager = CacheManager.create();
Ehcache cache = cacheManager.addCacheIfAbsent("users");
Element element = new Element("klucz", "wartosc");
element.setTimeToIdle(1000);
element.setTimeToLive(10000);
cache.put(element);
System.out.println(cache.get("klucz"));
cache.remove("klucz");
}
}
...replikacja, dystrybucja, masturbacja...
RMI, multicast, JGroups, JMS
...transakcyjny..
...cache offloading..
filesystem
...jeśli nie JVM?...
to co ?
import requests
print requests.get("http://.../ehcache/rest/sampleCache2/1").text
print requests.put("http://.../ehcache/rest/sampleCache2/1","Hello world!")
print requests.delete("http://.../ehcache/rest/sampleCache2/1")
BigMemory
DirectByteBuffer
sun.misc.Unsafe
...bye bye GC...
bitbucket://kcrimson/hipcache
Implementacja memcached na JVM, z
wykorzystaniem DirectByteBuffer
...infinispan...
...czy to cache...
...czy to „data grid”...
...transakcyjny...
JTA
...replikowany kontra rozproszony...
JGroups
...rozproszony...
hashOwners
...persystentny...
file
RDBMS
S3
…”cloud ready”...
…kolorowy zawrót głowy...
Tree API
Query API
Group API
…”HotRod server”...
binary
REST
memcached
…co więc warto...
…database cache...
…Hibernate, JPA i @Cache...
…session level cache...
hibernate.cache.provider_class
…second level cache...
hibernate.cache.use_second_level_cache=true
import javax.persistence.Cacheable;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity
@Table(name = "albums")
@Cacheable
@Cache(usage=CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Album implements Serializable {
@ManyToMany
@Cache(usage=
CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Artist> artists;
}
…query cache...
hibernate.cache.use_query_cache=true
Query query = …;
query.setCacheable(true);
List result = query.list();
…application cache...
if key is in cache:
return value
else:
value = method(key)
cache.put(key,value)
return value
JSR 107
||
Spring Declarative Cache
@Cacheable(value="books", key="isbn.rawNumber")
public Book findBook(ISBN isbn, boolean checkWarehouse,
boolean includeUsed)
@Cacheable(value="books", condition="name.length < 32",
unless="result.hardback")
public Book findBook(String name)
…frontend cache...
serwer czy klient?
Apache + mod_cache
Ngnix
Varnish
Squid
...a co gdy to aplikacja powinna mieć
kontrolę nad cache...
Conditional GET
ETag
304 Not Modified
public Response getOrder(@PathParam("id") String id,
@Context Request request) {
Order order = orderDAO.findOne(Long.valueOf(id));
if (order == null) {
return status(Status.NOT_FOUND).build();
}
EntityTag etag =
EntityTag.valueOf(md5Crypt(reflectionToString(order).getBytes()));
ResponseBuilder preconditions = request.evaluatePreconditions(etag);
if (preconditions != null) {
// response has not changed
return preconditions.build();
}
OrdersListResponseDTO orders = new OrdersListResponseDTO();
OrderDTO orderDTO = new OrderDTO(order);
orders.addOrder(orderDTO);
return ok(orders).entity(etag).build();
}
Q&A

More Related Content

Viewers also liked

Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014
Jaroslaw Palka
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architecture
Jaroslaw Palka
 

Viewers also liked (6)

We are crowd, we are anonymous
We are crowd, we are anonymousWe are crowd, we are anonymous
We are crowd, we are anonymous
 
Programming and architecture of NOSQL web at 33degree
Programming and architecture of NOSQL web at 33degreeProgramming and architecture of NOSQL web at 33degree
Programming and architecture of NOSQL web at 33degree
 
Systematyczny architekt na drodze ku planowanemu postarzaniu
Systematyczny architekt na drodze ku planowanemu postarzaniuSystematyczny architekt na drodze ku planowanemu postarzaniu
Systematyczny architekt na drodze ku planowanemu postarzaniu
 
Patterns for JVM languages JokerConf
Patterns for JVM languages JokerConfPatterns for JVM languages JokerConf
Patterns for JVM languages JokerConf
 
Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014Patterns for JVM languages - Geecon 2014
Patterns for JVM languages - Geecon 2014
 
Patterns for organic architecture
Patterns for organic architecturePatterns for organic architecture
Patterns for organic architecture
 

Similar to I ty też możesz mieć swoje dane w cache

Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
Divante
 
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz
 
Bezpieczeństwo w sieciach Windows
Bezpieczeństwo w sieciach WindowsBezpieczeństwo w sieciach Windows
Bezpieczeństwo w sieciach Windows
Wydawnictwo Helion
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
Wydawnictwo Helion
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery Windows
Wydawnictwo Helion
 

Similar to I ty też możesz mieć swoje dane w cache (20)

ETW w służbie programisty .NET
ETW w służbie programisty .NETETW w służbie programisty .NET
ETW w służbie programisty .NET
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
4Developers 2015: Frameworki jee vs cross-site scripting (xss) - Piotr Bucki
 
PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...
PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...
PLNOG22 - Leszek Miś - Symulacje zdarzeń i anomalii sieciowych jako proaktywn...
 
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
[WHUG] Wielki brat patrzy - czyli jak zbieramy dane o użytkownikach allegro
 
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
Monitoring systemu. Dlaczego mój kardiolog jest bogatym człowiekiem?
 
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof ŚlusarskiWJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
WJUG #257 Just-In-Time compiler - ukryty "przyjaciel" - Krzysztof Ślusarski
 
W3 Total Cache - skuteczne przyśpieszanie WordPressa
W3 Total Cache - skuteczne przyśpieszanie WordPressaW3 Total Cache - skuteczne przyśpieszanie WordPressa
W3 Total Cache - skuteczne przyśpieszanie WordPressa
 
Confitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów SparkowychConfitura 2018 - Sekretne życie jobów Sparkowych
Confitura 2018 - Sekretne życie jobów Sparkowych
 
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
 
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
[Quality Meetup #9] TestOps, QAOps - czy ktoś taki istnieje? - Aleksandra Kor...
 
HTML5: Atak i obrona
HTML5: Atak i obronaHTML5: Atak i obrona
HTML5: Atak i obrona
 
Space Wars Hack - Class #1
Space Wars Hack - Class #1Space Wars Hack - Class #1
Space Wars Hack - Class #1
 
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
Tomasz Kopacz MTS 2012 Azure - Co i kiedy użyć (IaaS vs paas vshybrid cloud v...
 
Bezpieczeństwo w sieciach Windows
Bezpieczeństwo w sieciach WindowsBezpieczeństwo w sieciach Windows
Bezpieczeństwo w sieciach Windows
 
Windows PowerShell. Podstawy
Windows PowerShell. PodstawyWindows PowerShell. Podstawy
Windows PowerShell. Podstawy
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiasto
 
BlackHat Analytics
BlackHat AnalyticsBlackHat Analytics
BlackHat Analytics
 
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena WojnarowskaAutomatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
Automatyzacja tworzenia maszyn wirtualnych Magdalena Wojnarowska
 
100 sposobów na serwery Windows
100 sposobów na serwery Windows100 sposobów na serwery Windows
100 sposobów na serwery Windows
 

I ty też możesz mieć swoje dane w cache