Redis
 sql >> база данни >  >> NoSQL >> Redis

Производителност на Redis срещу Disk в приложение за кеширане

Това е сравнение между ябълки и портокали. Вижте http://redis.io/topics/benchmarks

Redis е ефективнодистанционно съхранение на данни. Всеки път, когато командата се изпълнява на Redis, се изпраща съобщение до сървъра на Redis и ако клиентът е синхронен, той блокира чакането на отговор. Така че освен цената на самата команда, вие ще платите за мрежово двупосочно пътуване или IPC.

При съвременния хардуер мрежовите двупосочни пътувания или IPC са изненадващо скъпи в сравнение с други операции. Това се дължи на няколко фактора:

  • необработената латентност на носителя (главно за мрежа)
  • латентността на планировчика на операционната система (не е гарантирана за Linux/Unix)
  • Пропуските в кеша на паметта са скъпи и вероятността от пропуски в кеша се увеличава, докато процесите на клиента и сървъра са планирани за влизане/излизане.
  • на кутии от висок клас, NUMA странични ефекти

Сега нека прегледаме резултатите.

Сравнявайки реализацията, използваща генератори, и тази, използваща извиквания на функции, те не генерират същия брой обръщания към Redis. С генератора просто имате:

    while time.time() - t - expiry < 0:
        yield r.get(fpKey)

Така че 1 двупосочно пътуване на итерация. С функцията имате:

if r.exists(fpKey):
    return r.get(fpKey)

Така че 2 двупосочни пътувания на итерация. Нищо чудно, че генераторът е по-бърз.

Разбира се, трябва да използвате повторно същата връзка Redis за оптимална производителност. Няма смисъл да се изпълнява бенчмарк, който систематично свързва/прекъсва.

И накрая, по отношение на разликата в производителността между извикванията на Redis и четенията на файла, вие просто сравнявате локално повикване с отдалечено. Четенията на файлове се кешират от файловата система на ОС, така че те са бързи операции за прехвърляне на памет между ядрото и Python. Тук няма дисков вход/изход. С Redis трябва да плащате за разходите за двупосочно пътуване, така че е много по-бавно.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ключ ioredis със съвпадащ шаблон

  2. Redistogo и Sidekiq на Heroku:Не мога да се свържа

  3. dial tcp [::1]:6397:connectex:Не може да се направи връзка, защото целевата машина активно я отказа

  4. Какво прави параметърът за свързване в Redis?

  5. Redis:Неуспешно отваряне на .rdb за запазване:Разрешението е отказано