17. LIST
redis> LPUSH list a
redis> LPUSH list b
redis> RPUSH list c
redis> LRANGE list 0 2
1) "b"
2) "a"
3) "c
18. LIST
redis> LPUSH list a
redis> LPUSH list b
redis> RPUSH list c
redis> RPOPLPUSH list other:list
"a"
redis> LRANGE list 0 3
1) "c"
2) "b"
redis> LRANGE other:list 0 3
1) "a"
82. -- hello.lua
-- the first program in every language
io.write("Hello world, from ",_VERSION,"!n")
83. redis = Redis.new
script = <<LUA
local value = tonumber(redis.call('get',
KEYS[1]))
if value == nil then return {err = "Value at
key is not integer"} end
if value > tonumber(ARGV[1])
then
value = value - 1
redis.call('set', KEYS[1], value)
end
return value
LUA
redis.set :x, 4
5.times { puts(redis.eval(script, 1, :x, 0)) }
dlaczego go nie potrzebujesz dzisiaj, ale je&#x15B;li masz szcz&#x119;&#x15B;cie - mo&#x17C;esz potrzebowa&#x107; go jutro\nnie chce was zniechecic - raczej pokazac dlaczego jest to trudne\n
dzi&#x119;kuj&#x119; za zaproszenie, 100% ruby, okolice Javy, Freeport Metrics, pozosta&#x142;e 100% obj-c\njestem praktykiem, nie teoretykiem - nie jestem z wykszta&#x142;cenia informatykiem w prezentacji b&#x119;dzie du&#x17C;o skr&#xF3;t&#xF3;w, uproszcze&#x144; i za&#x142;o&#x17C;e&#x144; a priori - bo to zbyt szeroki temat na nieca&#x142;e p&#xF3;&#x142; godziny, a ja nie jestem a&#x17C; tak m&#x105;dry ;-)\n
\n
redis to nosql\nplotki o &#x15B;mierci SQL-a s&#x105; mocno przesadzone\nbo i skala problem&#xF3;w wymagaj&#x105;cych nosqla jest ograniczone\n
bo mo&#x17C;e dzia&#x142;a&#x107; jak klucz warto&#x15B;&#x107;, optymalizuje warto&#x15B;ci, jest szybki i milusi\n\n
bo warto&#x15B;ci&#x105; mo&#x17C;e by&#x107; tak&#x17C;e jedna ze struktur, kt&#xF3;re istniej&#x105; w Redisie\nnie tylko proste &#x142;a&#x144;cuchy tekstowe\n
\n
\n
to nie b&#x119;dzie &#x142;atwa prezentacja - redis, mimo, &#x17C;e to jeden system to ze wzgl&#x119;de na liczne ga&#x142;&#x119;zie i eksperymentalne funkcje\nwymaga czasu na jego poznanie i dostosowanie\nten ekran jest ju&#x17C; dawno nieaktualny - prezentacj&#x119; zacz&#x105;&#x142;em przygotowywa&#x107; miesi&#x105;c temu\n
A system rozwija si&#x119; ci&#x105;gle. to jest wiadomo&#x15B;&#x107; z wczorajszego poranka\nwarto &#x15B;ledzi&#x107; jego rozw&#xF3;j\n
\n
\n
\n
w redisie mo&#x17C;emy te&#x17C; trzyma&#x107; (jako stringi) integery. i wykonywa&#x107; na nich operacje\n
sorted by insertion order\nlisty z blokowaniem warto&#x15B;ci, rpoplpush\nbodaj najpopularniejsze zastosowanie redisa w sferze us&#x142;ug - kolejki wiadomo&#x15B;ci\n
mo&#x17C;na mie&#x107; zastrze&#x17C;enia co do wydajno&#x15B;ci\n
\n
sortowane zbiory\nrzecz, kt&#xF3;ra wykorzystali&#x15B;my w Blipie\n
\n
\n
\n
protok&#xF3;&#x142; Redisa zwraca podstawowe warto&#x15B;ci\nzak&#x142;ada obs&#x142;ug&#x119; tego po stronie klienta\n
\n
\n
\n
\n
\n
\n
\n
\n
snapshot - tworzony jest fork, redis zapisuje stan swojej bazy do pliku binarnego\naof - zapisuje ka&#x17C;d&#x105; komend&#x119; do pliku - 100% pewno&#x15B;ci odzyskania danych, bardzo d&#x142;ugi proces &#x142;adowania\naof - mo&#x17C;liwy jest rewrite\n
dla snapshotu\nna &#x17C;&#x105;danie - komendy SAVE lub BGSAVE\nokresowa - je&#x15B;li w okre&#x15B;lonym przedziale czasu dosz&#x142;o do zmian w X kluczy\n
po co replikacja? - zabezpieczenie przed padem\nskalowanie ci&#x119;&#x17C;kich operacji - SORT\nreplikacja nie blokuje mastera - replikacja blokuje slave&#x2019;a\n
master mo&#x17C;e mie&#x107; wiele slave&#x2019;&#xF3;w\nslave mo&#x17C;e by&#x107; masterem dla kolejnego zestawu slave&#x2019;&#xF3;w\nprzyk&#x142;adowo - mamy zestaw master / slave-slave / slave-slave - zapisujemy dane tylko na ostatnim etapie\n
\n
bez pipeliningu - czekamy na odpowied&#x17A; na ka&#x17C;de &#x17C;&#x105;danie\nwk&#x142;adamy dane - odpowied&#x17A;, wk&#x142;adamy - odpowied&#x17A;\n
ale pr&#x119;dzej czy p&#xF3;&#x17A;niej to mo&#x17C;e by&#x107; za ma&#x142;o - wydajno&#x15B;&#x107; b&#x119;dzie spada&#x107;\n
bez pipeliningu - czekamy na odpowied&#x17A; na ka&#x17C;de &#x17C;&#x105;danie\nwk&#x142;adamy dane - odpowied&#x17A;, wk&#x142;adamy - odpowied&#x17A;\n
\n
minimalne wymaganie redisa - wszystkie klucze zawsze musz&#x105; by&#x107; w pami&#x119;ci\nale ca&#x142;&#x105; reszt&#x119; mo&#x17C;na trzyma&#x107; w pami&#x119;ci wirtualnej\nwarto si&#x119; zastanowi&#x107; czy lepiej nie skorzysta&#x107; z hashy\nale je&#x15B;&#x142;i nie zale&#x17C;y nam na wydajno&#x15B;ci - mo&#x17C;na ustawi&#x107; zerow&#x105; pami&#x119;&#x107; dla warto&#x15B;ci\n
\n
\n
poszczeg&#xF3;lny w&#x119;z&#x142;y w klastrze rozmawiaj&#x105; ze sob&#x105; protoko&#x142;em binarnym\nnormalnie redis korzysta z protoko&#x142;u tekstowego - tutaj zosta&#x142;o to zoptymalizowane\n
klaster redisa jest dzielony na 4096 slot&#xF3;w na hashe\nw momencie tworzenia klastra nale&#x17C;y sloty do poszczeg&#xF3;lnych instancji\n
tutaj dla u&#x142;atwienia - podzielimy sobie na 6 slot&#xF3;w, kt&#xF3;re zostan&#x105; roz&#x142;o&#x17C;one na 3 w&#x119;z&#x142;ach\n
klastrowanie - dummy client\n
klastrowanie - sprytny klient\n
automatyczne zarz&#x105;dzanie klastrem\nnarz&#x119;dzie pomagaj&#x105;ce w tworzeniu klastra\nsprawdzenie zgodno&#x15B;ci klastra\ndodawanie nowych element&#xF3;w do klastra\n
jak si&#x119; to ma do memcached?\nzale&#x17C;y od zastosowania.\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
\n
ka&#x17C;dy z test&#xF3;w to 100000 operacji\n
\n
Resque is a Redis-backed Ruby library for creating background jobs, placing those jobs on multiple queues, and processing them later.\nJedno z pierwszych narz&#x119;dzie powsta&#x142;ych dzi&#x119;ki Redisowi.\nU&#x17C;ywane w GitHubie\n
\n
\n
\n
\n
\n
\n
\n
bill gates twierdzi, &#x17C;e powiedzia&#x142; wiele g&#x142;upich rzeczy\nale tego nie,\nfragmentacja kt&#xF3;ra jest rozwi&#x105;zywana za pomoc&#x105; r&#xF3;&#x17C;nych malloc&#xF3;w\n
redis bardzo dobrze optymalizuje liczby - nie trzyma ich w pami&#x119;ci jako stringi\n
w zale&#x17C;no&#x15B;ci od potrzeb - lepiej skompilowa&#x107; Redisa w 32bitowej architekturze\n
monitoruj, naucz si&#x119;\nto nowa zabawka, zwykle dzia&#x142;a - problemem nie jest stabilno&#x15B;&#x107;, bo ta jest wy&#x15B;mienita.\n
j&#x119;zyk skryptowy pierwotnie zaprojektowany dla rozszerzenia funkcjonalno&#x15B;ci r&#xF3;&#x17C;nych aplikacji, jednak cz&#x119;sto u&#x17C;ywany jako samodzielny j&#x119;zyk.\n