Published

Redis Notlarım

Yazar
  • avatar
    İsim
    Elif Nur Karakoç

Remote Dictionary Service kelimelerinin kısaltmasıdır. C ile yazılmıştır. Çıkış noktası hızdır. Key:value şeklinde tasarlanmış bir NoSQL türünde veri tabanıdır. In Memory Database yaklaşımına(Disk üzerine yazılabilme özelliği de opsiyonel) sahiptir. Redis gelişmiş bir key:value deposudur.

Veri Türleri

  • String
  • Hash
  • List
  • Set
  • Sorted Set
  • Geospatial index
  • HyperLogLog

Nerelerde kullanılır?

  • Database(Redis sakladığı veriyi disk üzerine de yazabilir)
  • Caching Layer(Redis çok hızlıdır.)
  • Message Broker(Redis sadece key-value store olarak çalışmaz. RabbitMQ gibi kullanılabilir.)

Redis Ne değildir?

  • Relational Database ya da Document bazlı Database Sistemlerinin bir alternatifi değildir.
  • Aksine bu DB türlerinin ilişkilerini tanımlayacak katman olarak kullanılabilir.
  • En iyi kullanım alanı ise; ön görülebilir DB boyutuyla hızla büyüyen veriler.
  • Twitter kendi içerisinde redisi kullanıyor.

Use Cases

  • Cache Mekanizmalarında
  • Pub/Sub (Publish–subscribe pattern)
  • Kuyrukların engellenmesi ve geciktirilmesinde
  • Kısa Canlı verilerde
    • Fraud Detection(Dolandırıcılık tespitlerinde)
    • Oturum kontrollerinde
    • Filtreleme servislerinde
  • Yorum sayımlarında
  • Gerçek verilerin analizlerinde
  • Her defasında unique bir verinin saklanmasında

Ne zaman Redis Kullanmalıyız?

  • Çok yüksek hıza ihtiyaç duyduğunda
  • Key-value çiftinden daha fazlası ihtiyacınız olduğunda
  • Dataset'in kritik olmadığı yerlerde(Default olarak inmemory çalışır, yani redis sunucusu kapandığı anda veriler silinir, herhangi bir yere veri yazmaz. Durability aktif hale getirilir ise sunucu kapandığında RAM üzerinden veriyi alır diske yazar. Sunucuyu açtığımızda diskten okumaya başlar.)

Kullanılırken dikkat edilmesi gerekenler

  • Redis bellek üzerinde verileri saklar, bundan dolayı çok fazla bellek kısıtlamaları vardır.
  • Boş bir instance ~1Mb bellek kullanır.
  • 1 milyon küçük key-value(string) çifti ~100 Mb kullanır.
  • 1 milyon küçük key-value(5 field'dan oluşan hash) çifti ~200 Mb bellek kullanır.

Performans?

  • Redis pipelined yazıldığında tüm işleri toplar hepsini bir anda yapar. 250 bin tane requesti 1ms altında yapıyor.

Scaling(Ölçeklendirme)

  • Persistance

    • Redis persistence için 2 farklı mekanizma sağlar.
    • RDB(Redis database snapshots)
    • AOF(Append only files)
  • Replication

    • 1 Redis instance master olarak kullanılır. Diğer instance'lar ise Slave olarak gelir ve bunlar Master'ın kopyalarıdır.
    • Client bu slave ya da master instance'lardan birine bağlanır.
    • Slave default olarak sadece okuma işlemi yaparlar.
  • Partitioning

    • Veriyi bölebilir ve paylaştırabilirsiniz.
  • Failover

    • (Örn: bir uygulamanın ağ akışının istenmeyen bir şekilde bölünmesi ile beraber nasıl davranıcağını belirten mekanizmalardır.)
    • Manuel
    • Otomatik(Redis Sentinel-master-slave topoloji için)
    • Otomatik(Redis Cluster-cluster topoloji için)

Redis-Cli

  • Tüm keyleri listeler.

    keys *

  • Keys tanımlaması yapılır.

    set name Elif

  • Keys çağırılır.

    get name

  • key var ise 1 yok ise 0 döner.

    exits name

  • key'i siler.

    del name

  • key'e ekleme yapar, key yok ise set gibi çalışır.

    append name Nur

  • hset user1 name Elif

  • hset user1 lastname Karakoc

  • hgeta user1

  • hget user1 name

  • 10 sn'ye sonra key expire olucak,silicek

    set silinicek 12132131241 EX 10

  • PUBLISH elifnurchannel "Hello"

  • SUBSCRIBE elifnurchannel

Docker ile kurulum

docker run --name redisapp -p 6379:6379 redis
docker run redis
docker exec -it redisapp redis-cli

Redis'in Node.js ile Kulanımı

npm  install --save  redis