KamoCRM

Presence bulk legge e la fermata di spazzamento stantio-presence utilizzando Redis KEYS

FixMediaService
Shipped
23 settembre 2026 alle ore 10:41 UTC
Author
Kamo
Commit
e696226

getBulkPresence/getBulkLastSeen ha eseguito KEYS PRESENCE:*/PRESENCE LAST SEEN:* su ogni chiamata - colpito su ogni supporto di presenza-socket e la messa a fuoco scheda - e la spazzata 30s corsa due volte di più, tutti contro lo stesso Redis che tiene ogni sessione. KEYS passeggiate e blocchi l'intero spazio chiave; a scala della piattaforma che è un full-Redis stalla su un percorso di richiesta, non uno per-org. Ognuno dei tre ora legge un indice mantenuto invece di scansione: - PRESENCE ORG INDEX:{orgId} - a ZSET of memberId segnato dall'ultimo battito cardiaco, scritto da handleConnect/handleHeartbeat, rimosso da handleDisconnect's grace-period delete. getBulkPresence lo legge direttamente (il punteggio diorg è di costruzione ora, non un controllo per-candidate orgId); la metà del membro della spazza lo legge con ZRANGEBYSCORE per trovare solo candidati plausibilmente-stale. - PRESENCE ACTIVE ORGS - un SET di org ids, così la spazzata può visitare ogni org indice senza scoprire org ids dai dati dei membri della scansione. - No, no. - un supporto SET getBulkLastSeen il Allo stesso modo. Non spazzato, come prima: la chiave individuale di 400 giorni TTL è ancora ciò che lo ritira. - PRESENCE PUBLIC INDEX - un ZSET piatto per le sessioni dei visitatori (senza concetto di org, nulla li legge in massa da org), alimentando la metà pubblica della spazzata. Ogni chiave per-id hash (PRESENCE:, PRESENCE PUBLIC:, PRESENCE LAST SEEN:) è invariato - stessi campi, stessi TTL - e rimane l'unica fonte di verità per il suo stato; un indice solo restringe che ids ottenere guardato; una lettura o il spazzare ancora controlla l'hash reale prima di fidarsi o segnalare nulla, e self-heals (drops l'indice) se l'hash ha già superato. A rinvigorito battito cardiaco (chiave scaduta midsession) ancora non può attribuire un org - lo stesso divario che il vecchio KEYS+HGET("orgId") scansione aveva, dal momento che quel percorso non ha mai scritto il campo o; solo la vista org-bulk è influenzata, invariata da prima. Coperto da PresenceBulkLookupTest (nuovo) e PresenceSweepTest (riscritto per il nuovo meccanismo di scoperta, stessi perni comportamentali come prima più un "mai chiama KEYS" controllo), mutazione-controllato: cadere l'indice scrivere in manigliaConnect, il ramo auto-guarigione in getBulkPresence, e la guardia hasKey nella spazzata ogni volta una specifica asserzione rossa.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing