Czy Redis to tylko cache?

Czytałem kilka dokumentów Redis i próbowałem tutoriala na http://try.redis-db.com / . Jak na razie nie widzę różnicy między Redis a technologiami buforowania, takimi jak Velocity czy Enterprise Library Caching Framework

Skutecznie dodajesz obiekty do przechowalni danych w pamięci za pomocą unikalnego klucza. Wydaje się, że nie ma żadnej semantyki relacyjnej...

Co mi umyka?

 221
Author: Matthew Evans, 2012-04-13

4 answers

Nie, Redis to coś więcej niż pamięć podręczna.

Podobnie jak pamięć podręczna, Redis przechowuje pary klucz=wartość. Ale w przeciwieństwie do pamięci podręcznej, Redis pozwala operować na wartościach. Istnieje 5 typów danych w Redis-ciągi, Zestawy, Hash, listy i sortowane Zestawy. Każdy typ danych naraża różne operacje.

Najlepszym sposobem na zrozumienie Redis jest modelowanie aplikacji bez myślenia o tym, jak zamierzasz przechowywać ją w bazie danych.

Powiedzmy, że chcemy budować StackOverflow.com. aby to uprościć, my potrzebujesz pytań, odpowiedzi, tagów i użytkowników.

Modelowanie pytań, użytkowników i odpowiedzi

Każdy obiekt może być modelowany jako Mapa. Na przykład, pytanie jest mapą z polami {id, title, date_asked, votes, asked_by, status}. Podobnie, odpowiedź jest mapą z polami {id, question_id, answer_text, answered_by, votes, status}. Podobnie możemy modelować obiekt użytkownika.

Każdy z tych obiektów może być bezpośrednio przechowywany w Redis jako Hash. Aby wygenerować unikalne identyfikatory, możesz użyć atomic polecenie increment. Coś takiego -

$ HINCRBY unique_ids question 1
(integer) 1
$ HMSET question:1 title "Is Redis just a cache?" asked_by 12 votes 0
OK

$ HINCRBY unique_ids answer 1
(integer) 1
$ HMSET answer:1 question_id 1 answer_text "No, its a lot more" answered_by 15 votes 1
OK

Obsługa Głosów

Teraz, za każdym razem, gdy ktoś wypowiada pytanie lub odpowiedź, musisz to zrobić

$ HINCRBY question:1 votes 1
(integer) 1
$ HINCRBY question:1 votes 1
(integer) 2

Lista pytań do strony głównej

Następnie chcemy zapisać najnowsze pytania do wyświetlenia na stronie głównej. Jeśli piszesz program. NET lub Java, przechowywałbyś pytania na liście. Okazuje się, że jest to najlepszy sposób na przechowywanie tego również w Redis.

Za każdym razem, gdy ktoś pyta pytanie, dodajemy jego id do listy.

$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1

Teraz, gdy chcesz renderować swoją stronę główną, zadajesz Redisowi ostatnie 25 pytań.

$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"

Teraz, gdy masz identyfikatory, pobieraj elementy z Redis za pomocą pipeliningu i pokazuj je użytkownikowi.

Pytania według tagów, posortowane według głosów

Następnie chcemy pobrać pytania dla każdego tagu. Ale tak pozwala zobaczyć najczęściej głosowane pytania, nowe pytania lub pytania bez odpowiedzi pod każdym tagiem.

Do modelu to, używamy Redis ' Sorted Set feature. Posortowany Zestaw pozwala powiązać wynik z każdym elementem. Następnie można pobierać elementy na podstawie ich wyników.

Lets go ahead and do this for the Redis tag

$ zadd questions_by_votes_tagged:redis 2 question:1 
(integer) 1
$ zadd questions_by_votes_tagged:redis 10 question:2 
(integer) 1
$ zadd questions_by_votes_tagged:redis 5 question:613 
(integer) 1
$ zrange questions_by_votes_tagged:redis 0 5 
1) "question:1"
2) "question:613"
3) "question:2"
$ zrevrange questions_by_votes_tagged:redis 0 5 
1) "question:2"
2) "question:613"
3) "question:1"
Co my tu robiliśmy? Dodaliśmy pytania do uporządkowanego zestawu i do każdego pytania przypisaliśmy wynik (liczbę głosów). Za każdym razem, gdy pytanie zostanie podniesione, zwiększymy jego wynik. A gdy użytkownik kliknie "pytania oznaczone Redis, posortowane według głosów", po prostu robimy zrevrange i wróć do najważniejszych pytań.

Pytania w czasie rzeczywistym bez odświeżania strony

I wreszcie bonus. Jeśli utrzymasz otwartą stronę z pytaniami, so powiadomi Cię o dodaniu nowego pytania. Jak Redis może pomóc?

Redis ma Model pub-sub. Możesz tworzyć kanały, na przykład "channel_questions_tagged_redis". Następnie użytkownik subscribe do określonego kanału. Gdy zostanie dodane nowe pytanie, wyświetlisz publish wiadomość na tym kanale. Wszyscy użytkownicy będą więc Odbierz wiadomość. Będziesz musiał użyć technologii internetowej, takiej jak web sockets lub comet, aby rzeczywiście dostarczyć wiadomość do przeglądarki, ale Redis pomaga Ci z całą instalacją po stronie serwera.

Wytrwałość, niezawodność itp.

W przeciwieństwie do pamięci podręcznej, Redis przechowuje dane na dysku twardym. Możesz mieć konfigurację master-slave, aby zapewnić lepszą niezawodność. Aby dowiedzieć się więcej, przejrzyj tematy dotyczące trwałości i replikacji tutaj - http://redis.io/documentation
 567
Author: Sripathi Krishnan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-07 10:05:20

Redis ma unikalne zdolności, takie jak ultraszybkie Skrypty lua. Jego czas wykonania jest równy czasowi wykonania polecenia C. Zapewnia to również atomiczność dla wyrafinowanej manipulacji danymi Redis wymaganej do pracy wielu zaawansowanych obiektów, takich jak zamki i semafory.

Istnieje Redis oparty na siatce danych pamięci o nazwie Redisson , który pozwala na łatwe zbudowanierozproszonej aplikacji na Javie . Dzięki rozpowszechnionemu Lock, Semaphore, ReadWriteLock, CountDownLatch, ConcurrentMap obiekty i wiele i inni

Doskonale działa w chmurze i obsługuje AWS Elasticache, AWS Elasticache Cluster and Azure Redis Cache support

 3
Author: Nikita Koksharov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-19 13:45:19

Nie tylko cache.

  • In memory key-value storage
  • Obsługa wielu typów danych (ciągów, skrótów, list, Zestawów, Zestawów posortowanych, bitmap i hiperlogów)
  • zapewnia możliwość przechowywania danych w pamięci podręcznej do fizycznej pamięci masowej (w razie potrzeby).
  • Wsparcie pub-sub model
  • Redis Cache zapewnia replikację zapewniającą wysoką dostępność (master / slave)
 2
Author: Pankaj Rawat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-08 14:48:17

W rzeczywistości nie ma zależności między relatywną reprezentacją danych (lub jakimkolwiek typem reprezentacji danych) a rolą bazy danych (cache, permanent persistence itp.).

Redis jest dobry dla cache to prawda, ale to znacznie więcej niż tylko cache. To szybka baza danych w pełni w pamięci. Zapisuje dane na dysku. To nie jest relacyjne, to magazyn klucz-wartość.

Używamy go w produkcji. Redis pomaga nam tworzyć oprogramowanie, które obsługuje tysiące żądań na sekundę i utrzymuje dane biznesowe klientów podczas całego naturalnego cyklu życia.

 1
Author: Denys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-01 18:58:55