Not içeriği yükleniyor...
// Markdown dosyası okunuyor
// İçerik işleniyor
// Syntax highlighting hazırlanıyor
// Markdown dosyası okunuyor
// İçerik işleniyor
// Syntax highlighting hazırlanıyor
Redis Bitmaps ile bit-level operations, analytics ve space-efficient storage. SETBIT, GETBIT komutları ile binary data manipulation.
Özellik | Açıklama | Örnek |
---|---|---|
Bit-level storage | Her bit 0 veya 1 değerini tutar | bit[123] = 1 (user 123 active) |
Extreme memory efficiency | Milyonlarca boolean değeri minimal memory ile | 1M user → ~125KB memory |
Fast bit operations | Set, get, count işlemleri O(1) zamanda | SETBIT active_users 123 1 |
Bitwise operations | AND, OR, XOR, NOT işlemleri desteklenir | BITOP AND result bitmap1 bitmap2 |
Population count | Set edilmiş bit sayısını hızla hesaplar | BITCOUNT daily_active_users |
Range operations | Belirli aralıklarda işlem yapabilir | BITCOUNT users 0 100 |
Sparse bitmap support | Boş alanlar için memory optimizasyonu | Sadece set bitler memory kullanır |
String compatibility | String komutları ile de manipüle edilebilir | GET , SET komutları çalışır |
Kullanım Alanı | Açıklama | Redis Komutu Örneği |
---|---|---|
Daily Active Users (DAU) | Günlük aktif kullanıcı takibi | SETBIT dau:2024-01-20 user_123 1 |
Feature flags | Kullanıcı bazlı özellik kontrolü | SETBIT feature:premium user_456 1 |
Permission systems | Role-based access control | SETBIT perm:admin user_789 1 |
A/B testing | Test gruplarını belirleme | SETBIT test:group_a user_111 1 |
Real-time analytics | Instant user activity tracking | SETBIT active:now user_222 1 |
Bloom filter implementation | Probabilistic membership testing | Custom bloom filter logic |
Session tracking | Online/offline status tracking | SETBIT online:users user_333 1 |
Content engagement | Like, view, share tracking | SETBIT likes:post123 user_444 1 |
Inventory management | Available/unavailable product tracking | SETBIT available:products product_555 1 |
Rate limiting | Request tracking per user/IP | SETBIT requests:hour:user123 minute_30 1 |
BITOP
komutu ile birden fazla bitmap üzerinde AND, OR, XOR ve NOT işlemlerini milyonlarca bit için saniyeler içinde gerçekleştirebilirsiniz. Bu özellik, complex analytics queries ve multi-criteria filtering işlemleri için muazzam avantaj sağlar. Örneğin, "bugün aktif olan ve premium member olan kullanıcıları bul" gibi bir sorguyu iki bitmap'in AND işlemi ile anlık olarak çözebilirsiniz.Bitmap
, bit array olarak çalışan, her pozisyonda 0 veya 1 değeri saklayan veri yapısıdır. Aslında Redis string'i olarak tutulur ancak bit düzeyinde manipülasyon için özel komutlar sunar. Her bit pozisyonu genellikle bir user ID, product ID veya time slot gibi benzersiz identifier'ı temsil eder.Komut | Açıklama | Örnek |
---|---|---|
SETBIT | Belirli pozisyondaki biti set eder | SETBIT users 123 1 |
GETBIT | Belirli pozisyondaki bit değerini getirir | GETBIT users 123 |
BITCOUNT | Set edilmiş bit sayısını hesaplar | BITCOUNT users |
BITPOS | İlk 0 veya 1 bitinin pozisyonunu bulur | BITPOS users 1 |
BITOP | Bitwise operations (AND, OR, XOR, NOT) | BITOP AND result bitmap1 bitmap2 |
BITFIELD | Multiple bit operations in single command | BITFIELD mykey SET u8 0 100 |
STRLEN | Bitmap'in byte cinsinden boyutunu verir | STRLEN users |
text127.0.0.1:6379> SETBIT active_users 123 1 // User 123'ü aktif olarak işaretle. (integer) 0 // Önceki değer (0 = daha önce set edilmemiş). 127.0.0.1:6379> SETBIT active_users 456 1 // User 456'yı aktif olarak işaretle. (integer) 0 // Önceki değer. 127.0.0.1:6379> SETBIT active_users 123 0 // User 123'ü pasif yap. (integer) 1 // Önceki değer (1 = daha önce aktifti). 127.0.0.1:6379> SETBIT active_users 789 1 // User 789'u aktif yap. (integer) 0 // İlk kez set ediliyor.
SETBIT
komutu ile yeni bitmap oluşturulur.text127.0.0.1:6379> SETBIT test 1000000 1 // 1 milyon pozisyonunda bit set ediyoruz. (integer) 0 // Bitmap 125KB memory kullanacak. 127.0.0.1:6379>
text127.0.0.1:6379> SETBIT users 5000 1 // Yüksek pozisyon. 127.0.0.1:6379> SETBIT users 10 1 // Düşük pozisyon.
text127.0.0.1:6379> GETBIT active_users 123 // User 123'ün durumunu kontrol et. (integer) 0 // 0 = pasif (daha önce 0'a set ettik). 127.0.0.1:6379> GETBIT active_users 456 // User 456'nın durumunu kontrol et. (integer) 1 // 1 = aktif. 127.0.0.1:6379> GETBIT active_users 999 // Hiç set edilmemiş pozisyon. (integer) 0 // Default değer 0. 127.0.0.1:6379> GETBIT nonexistent_bitmap 100 // Var olmayan bitmap. (integer) 0 // Yine 0 döner.
text127.0.0.1:6379> SETBIT dau:2024-01-20 100 1 // Günlük aktif kullanıcı bitmapia veri ekliyoruz. (integer) 0 127.0.0.1:6379> SETBIT dau:2024-01-20 200 1 (integer) 0 127.0.0.1:6379> SETBIT dau:2024-01-20 300 1 (integer) 0 127.0.0.1:6379> SETBIT dau:2024-01-20 150 1 (integer) 0 127.0.0.1:6379> BITCOUNT dau:2024-01-20 // Günlük aktif kullanıcı sayısı. (integer) 4 // 4 aktif kullanıcı. 127.0.0.1:6379> BITCOUNT dau:2024-01-20 0 10 // İlk 10 byte'taki aktif kullanıcı sayısı. (integer) 2 // İlk aralıktaki kullanıcılar. 127.0.0.1:6379> BITCOUNT empty_bitmap // Boş bitmap. (integer) 0 // Hiç set bit yok.
BITCOUNT key 0 10
→ ilk 11 byte'ı kontrol eder (0-10 inclusive).text127.0.0.1:6379> SETBIT test_bitmap 10 1 // Test verisi ekliyoruz. (integer) 0 127.0.0.1:6379> SETBIT test_bitmap 20 1 (integer) 0 127.0.0.1:6379> SETBIT test_bitmap 30 1 (integer) 0 127.0.0.1:6379> BITPOS test_bitmap 1 // İlk 1 bitinin pozisyonu. (integer) 10 // 10. pozisyonda ilk 1 bulundu. 127.0.0.1:6379> BITPOS test_bitmap 0 // İlk 0 bitinin pozisyonu. (integer) 0 // 0. pozisyon 0 değerinde. 127.0.0.1:6379> BITPOS test_bitmap 1 2 // 2. byte'tan itibaren ilk 1. (integer) 20 // 20. pozisyonda bulundu. 127.0.0.1:6379> BITPOS all_ones_bitmap 0 // Tüm bitler 1 olan bitmap'te 0 ara. (integer) -1 // Bulunamadı.
text127.0.0.1:6379> SETBIT group_a 100 1 // A grubu kullanıcıları. 127.0.0.1:6379> SETBIT group_a 200 1 127.0.0.1:6379> SETBIT group_a 300 1 127.0.0.1:6379> SETBIT premium_users 100 1 // Premium kullanıcılar. 127.0.0.1:6379> SETBIT premium_users 150 1 127.0.0.1:6379> SETBIT premium_users 200 1 127.0.0.1:6379> BITOP AND premium_group_a group_a premium_users // A grubundaki premium kullanıcılar. (integer) 38 // Sonuç bitmap'in byte boyutu. 127.0.0.1:6379> BITCOUNT premium_group_a // Kaç premium A grubu kullanıcısı var? (integer) 2 // 100 ve 200 pozisyonları. 127.0.0.1:6379> BITOP OR all_target_users group_a premium_users // A grubu VEYA premium kullanıcılar. (integer) 38 127.0.0.1:6379> BITCOUNT all_target_users // Toplam hedef kullanıcı sayısı. (integer) 4 // Tüm benzersiz kullanıcılar. 127.0.0.1:6379> BITOP XOR exclusive_users group_a premium_users // Sadece birinde olan kullanıcılar. (integer) 38 127.0.0.1:6379> BITCOUNT exclusive_users // Exclusive kullanıcı sayısı. (integer) 2 // 150 ve 300 pozisyonları. 127.0.0.1:6379> BITOP NOT inverted_group_a group_a // A grubunun tersi. (integer) 38
127.0.0.1:6379> BITOP AND result bitmap1 bitmap2 bitmap3 // 3 bitmap'in kesişimi.
text127.0.0.1:6379> BITFIELD metrics SET u8 0 100 SET u8 8 200 // 8-bit unsigned değerleri set et. 1) (integer) 0 // İlk SET'in önceki değeri. 2) (integer) 0 // İkinci SET'in önceki değeri. 127.0.0.1:6379> BITFIELD metrics GET u8 0 GET u8 8 // Değerleri geri oku. 1) (integer) 100 // İlk 8-bit değer. 2) (integer) 200 // İkinci 8-bit değer. 127.0.0.1:6379> BITFIELD metrics INCRBY u8 0 50 // İlk değeri 50 artır. 1) (integer) 150 // Yeni değer (100 + 50). 127.0.0.1:6379> BITFIELD counters SET u16 0 1000 INCRBY u16 16 500 // 16-bit operations. 1) (integer) 0 // SET önceki değeri. 2) (integer) 500 // INCRBY sonucu.
u8
= 8-bit unsigned, i16
= 16-bit signed, etc.text127.0.0.1:6379> BITFIELD test SET u8 0 255 INCRBY u8 0 1 // Overflow durumu. 1) (integer) 0 2) (integer) 0 // Wrap-around behavior.
text127.0.0.1:6379> SETBIT dau:2024-01-20 user_123 1 // 20 Ocak'ta aktif olan kullanıcılar. 127.0.0.1:6379> SETBIT dau:2024-01-20 user_456 1 127.0.0.1:6379> SETBIT dau:2024-01-20 user_789 1 127.0.0.1:6379> SETBIT dau:2024-01-21 user_123 1 // 21 Ocak'ta aktif olan kullanıcılar. 127.0.0.1:6379> SETBIT dau:2024-01-21 user_999 1 127.0.0.1:6379> SETBIT dau:2024-01-21 user_456 1 127.0.0.1:6379> BITCOUNT dau:2024-01-20 // 20 Ocak DAU. (integer) 3 127.0.0.1:6379> BITCOUNT dau:2024-01-21 // 21 Ocak DAU. (integer) 3 127.0.0.1:6379> BITOP AND returning_users:2024-01-21 dau:2024-01-20 dau:2024-01-21 // Arka arkaya gelen kullanıcılar. (integer) 125 127.0.0.1:6379> BITCOUNT returning_users:2024-01-21 // Returning user sayısı. (integer) 2 // user_123 ve user_456. 127.0.0.1:6379> BITOP OR mau:2024-01 dau:2024-01-20 dau:2024-01-21 // Monthly active users. (integer) 125 127.0.0.1:6379> BITCOUNT mau:2024-01 // MAU sayısı. (integer) 4 // Tüm benzersiz kullanıcılar.
text127.0.0.1:6379> SETBIT feature:new_ui user_100 1 // Yeni UI özelliğine erişimi olan kullanıcılar. 127.0.0.1:6379> SETBIT feature:new_ui user_200 1 127.0.0.1:6379> SETBIT feature:new_ui user_300 1 127.0.0.1:6379> SETBIT test:group_a user_100 1 // A test grubundaki kullanıcılar. 127.0.0.1:6379> SETBIT test:group_a user_150 1 127.0.0.1:6379> SETBIT test:group_a user_200 1 127.0.0.1:6379> GETBIT feature:new_ui user_100 // User 100'ün yeni UI erişimi var mı? (integer) 1 // Evet, erişimi var. 127.0.0.1:6379> BITOP AND feature_a_users feature:new_ui test:group_a // A grubunda yeni UI'ya erişimi olan kullanıcılar. (integer) 38 127.0.0.1:6379> BITCOUNT feature_a_users // Kaç kullanıcı hem A grubunda hem yeni UI'ya erişiyor? (integer) 2 // user_100 ve user_200. 127.0.0.1:6379> SETBIT premium:users user_100 1 // Premium kullanıcılar. 127.0.0.1:6379> SETBIT premium:users user_400 1 127.0.0.1:6379> BITOP AND premium_feature_users feature:new_ui premium:users // Premium kullanıcılarda yeni UI. (integer) 50 127.0.0.1:6379> BITCOUNT premium_feature_users // Premium'da yeni UI kullanan sayısı. (integer) 1 // Sadece user_100.
text127.0.0.1:6379> SETBIT perm:read user_123 1 // Read permission. 127.0.0.1:6379> SETBIT perm:read user_456 1 127.0.0.1:6379> SETBIT perm:read user_789 1 127.0.0.1:6379> SETBIT perm:write user_123 1 // Write permission. 127.0.0.1:6379> SETBIT perm:write user_456 1 127.0.0.1:6379> SETBIT perm:admin user_123 1 // Admin permission. 127.0.0.1:6379> GETBIT perm:admin user_123 // User 123 admin mi? (integer) 1 // Evet, admin. 127.0.0.1:6379> GETBIT perm:write user_789 // User 789 yazabilir mi? (integer) 0 // Hayır, write yetkisi yok. 127.0.0.1:6379> BITOP AND read_write_users perm:read perm:write // Hem okuyup hem yazabilen kullanıcılar. (integer) 99 127.0.0.1:6379> BITCOUNT read_write_users // Kaç kullanıcının hem read hem write yetkisi var? (integer) 2 // user_123 ve user_456. 127.0.0.1:6379> BITOP AND full_access_users perm:read perm:write perm:admin // Tüm yetkilere sahip kullanıcılar. (integer) 99 127.0.0.1:6379> BITCOUNT full_access_users // Full access kullanıcı sayısı. (integer) 1 // Sadece user_123.
text127.0.0.1:6379> SETBIT engagement:like:post123 user_100 1 // Post 123'ü beğenen kullanıcılar. 127.0.0.1:6379> SETBIT engagement:like:post123 user_200 1 127.0.0.1:6379> SETBIT engagement:like:post123 user_300 1 127.0.0.1:6379> SETBIT engagement:share:post123 user_100 1 // Post 123'ü paylaşan kullanıcılar. 127.0.0.1:6379> SETBIT engagement:share:post123 user_200 1 127.0.0.1:6379> SETBIT engagement:comment:post123 user_100 1 // Post 123'e yorum yapan kullanıcılar. 127.0.0.1:6379> SETBIT engagement:comment:post123 user_400 1 127.0.0.1:6379> BITCOUNT engagement:like:post123 // Kaç kişi beğendi? (integer) 3 127.0.0.1:6379> BITCOUNT engagement:share:post123 // Kaç kişi paylaştı? (integer) 2 127.0.0.1:6379> BITCOUNT engagement:comment:post123 // Kaç kişi yorum yaptı? (integer) 2 127.0.0.1:6379> BITOP AND high_engagement:post123 engagement:like:post123 engagement:share:post123 engagement:comment:post123 // Üçünü de yapan kullanıcılar. (integer) 50 127.0.0.1:6379> BITCOUNT high_engagement:post123 // High engagement kullanıcı sayısı. (integer) 1 // Sadece user_100. 127.0.0.1:6379> BITOP OR total_engagement:post123 engagement:like:post123 engagement:share:post123 engagement:comment:post123 // Herhangi bir şekilde engage olan kullanıcılar. (integer) 50 127.0.0.1:6379> BITCOUNT total_engagement:post123 // Toplam engage olan kullanıcı sayısı. (integer) 4 // Tüm benzersiz kullanıcılar.
SETBIT
, GETBIT
, BITCOUNT
, BITPOS
gibi temel komutları; BITOP
ile powerful set operations'ları; ve BITFIELD
ile advanced multi-bit operations'ları detaylı örneklerle öğrendik.
Bitmap'in extreme memory efficiency, fast bit operations, bitwise operations ve sparse optimization özellikleri özellikle: