🔴 redis
Redis Cache Client - RESP Protocol
~450 satır
~60 fonksiyon
In-Memory
📖 Genel Bakış
Redis modülü, RESP (REdis Serialization Protocol) üzerinden tam özellikli Redis client sağlar. String, hash, list, set operations ve pub/sub desteği sunar.
🔑 Temel Özellikler
- String operations: GET, SET, INCR, DECR
- Hash operations: HSET, HGET, HGETALL
- List operations: LPUSH, RPUSH, LRANGE
- Set operations: SADD, SMEMBERS, SISMEMBER
- Key expiration: EXPIRE, TTL
- Pub/Sub messaging
- Pipelin & transactions
- Connection pooling
🚀 Hızlı Başlangıç
içe_aktar redis
// Connect
değişken client = redis.connect("127.0.0.1:6379")?
// String operations
client.set("user:1:name", "Alice")?
değişken name = client.get("user:1:name")?
io.println("Name: {}", name)
// With expiration (5 minutes)
client.setex("session:abc", 300, "user_data")?
client.close()
💡 Örnek: Session Management
içe_aktar redis, crypto, time, json
yapı SessionStore yap
redis: redis.Client
son
yapı Session yap
user_id: sayı,
username: yazı,
created_at: time.Instant,
data: Map[yazı, yazı]
son
fonksiyon session_store_new(redis_url: yazı) -> Sonuç[SessionStore, Hata] yap
dön Tamam(SessionStore yap
redis: redis.connect(redis_url)?
son)
son
fonksiyon create_session(store: SessionStore, user_id: sayı, username: yazı)
-> Sonuç[yazı, Hata] yap
// Generate session ID
değişken session_id = crypto.random_hex(32)
// Create session
değişken session = Session yap
user_id: user_id,
username: username,
created_at: time.now(),
data: Map.new()
son
// Store in Redis (1 hour TTL)
değişken key = "session:{}".formatla(session_id)
değişken value = json.encode(session)
store.redis.setex(key, 3600, value)?
dön Tamam(session_id)
son
fonksiyon get_session(store: SessionStore, session_id: yazı)
-> Sonuç[İsteğe_Bağlı[Session], Hata] yap
değişken key = "session:{}".formatla(session_id)
değişken value = store.redis.get(key)?
eğer value.is_none() ise yap
dön Tamam(Hiçbir)
son
değişken session: Session = json.decode(value.unwrap())?
dön Tamam(Bazı(session))
son
fonksiyon destroy_session(store: SessionStore, session_id: yazı) -> Sonuç[Hiçbir, Hata] yap
değişken key = "session:{}".formatla(session_id)
store.redis.del(key)?
dön Tamam(Hiçbir)
son
// Kullanım
fonksiyon ana() yap
değişken store = session_store_new("127.0.0.1:6379")?
// Login - create session
değişken session_id = create_session(store, 123, "alice")?
io.println("Session created: {}", session_id)
// Verify session
eğer session = get_session(store, session_id)? ise yap
io.println("User: {} (ID: {})", session.username, session.user_id)
son
// Logout - destroy session
destroy_session(store, session_id)?
son
💡 Örnek: Rate Limiting
içe_aktar redis, time
fonksiyon rate_limit_check(client: redis.Client, user_id: sayı, max_requests: sayı, window_secs: sayı)
-> Sonuç[mantıksal, Hata] yap
değişken key = "rate_limit:{}".formatla(user_id)
// Increment counter
değişken count = client.incr(key)?
// Set expiry on first request
eğer count == 1 ise yap
client.expire(key, window_secs)?
son
// Check limit
dön Tamam(count <= max_requests)
son
// API endpoint
fonksiyon handle_request(client: redis.Client, user_id: sayı) -> Sonuç[Hiçbir, Hata] yap
// 100 requests per minute
eğer rate_limit_check(client, user_id, 100, 60)? ise yap
// Process request
io.println("Request processed")
değilse yap
io.println("Rate limit exceeded")
son
dön Tamam(Hiçbir)
son
📊 Data Structures
// Hash (dictionary)
client.hset("user:1", "name", "Alice")?
client.hset("user:1", "email", "alice@example.com")?
değişken all = client.hgetall("user:1")?
// List (queue)
client.lpush("queue:tasks", "task1")?
client.lpush("queue:tasks", "task2")?
değişken task = client.rpop("queue:tasks")?
// Set (unique items)
client.sadd("tags", "python")?
client.sadd("tags", "rust")?
değişken members = client.smembers("tags")?
🔗 İlgili Modüller
msgpack- Binary serializationjson- JSON serializationpostgresql- Persistent storage