Antirez powiedział, patrz https://news.ycombinator.com/item?id=1171423
Jest kilka powodów:
- Nie wymagają dużej ilości pamięci. Zasadniczo zależy to od Ciebie. Zmiana parametrów dotyczących prawdopodobieństwa, że węzeł będzie miał określoną liczbę poziomów, spowoduje, że będzie mniej obciążony pamięcią niż btrees.
- Posortowany zestaw jest często celem wielu operacji ZRANGE lub ZREVRANGE, to znaczy przechodzenia przez listę pomijania jako listę połączoną. Dzięki tej operacji lokalizacja pamięci podręcznej list pomijania jest co najmniej tak dobra, jak w przypadku innych zrównoważonych drzew.
- Są prostsze do wdrożenia, debugowania i tak dalej. Na przykład dzięki prostocie listy pominięć otrzymałem łatkę (już w masterze Redis) z rozszerzonymi listami pominięć implementujących ZRANK w O(log(N)). Wymagało to niewielkich zmian w kodzie.
O trwałości i szybkości dołączania tylko, nie sądzę, aby zoptymalizować Redis kosztem większej ilości kodu i większej złożoności w przypadku użycia, w którym IMHO powinien być rzadki dla celu Redis (fsync() przy każdym poleceniu) . Prawie nikt nie używa tej funkcji, nawet w przypadku baz danych ACID SQL, ponieważ wskazówka dotycząca wydajności i tak jest duża.
O wątkach:nasze doświadczenie pokazuje, że Redis jest głównie związany z I/O. Używam wątków do obsługi rzeczy z pamięci wirtualnej. Długoterminowym rozwiązaniem pozwalającym na wykorzystanie wszystkich rdzeni, zakładając, że łącze jest tak szybkie, że można nasycić pojedynczy rdzeń, jest uruchamianie wielu instancji Redis (bez blokad, prawie w pełni skalowalne liniowo z liczbą rdzeni) i korzystanie z „klastra Redis” " rozwiązanie, które planuję opracować w przyszłości.