• debing.sun's avatar
    Implement defragmentation for pubsub kvstore (#13058) · ad127303
    debing.sun authored
    
    
    After #13013
    
    ### This PR make effort to defrag the pubsub kvstore in the following
    ways:
    
    1. Till now server.pubsub(shard)_channels only share channel name obj
    with the first subscribed client, now change it so that the clients and
    the pubsub kvstore share the channel name robj.
    This would save a lot of memory when there are many subscribers to the
    same channel.
    It also means that we only need to defrag the channel name robj in the
    pubsub kvstore, and then update
    all client references for the current channel, avoiding the need to
    iterate through all the clients to do the same things.
        
    2. Refactor the code to defragment pubsub(shard) in the same way as
    defragment of keys and EXPIRES, with the exception that we only
    defragment pubsub(without shard) when slot is zero.
    
    
    ### Other
    Fix an overlook in #11695, if defragment doesn't reach the end time, we
    should wait for the current
    db's keys and expires, pubsub and pubsubshard to finish before leaving,
    now it's possible to exit
    early when the keys are defragmented.
    
    ---------
    Co-authored-by: default avataroranagra <oran@redislabs.com>
    ad127303
memefficiency.tcl 30.8 KB