• zhaozhao.zz's avatar
    Make the sampling logic in eviction clearer (#12781) · 9ee1cc33
    zhaozhao.zz authored
    
    
    Additional optimizations for the eviction logic in #11695:
    
    To make the eviction logic clearer and decouple the number of sampled
    keys from the running mode (cluster or standalone).
    * When sampling in each database, we only care about the number of keys
    in the current database (not the dicts we sampled from).
    * If there are a insufficient number of keys in the current database
    (e.g. 10 times the value of `maxmemory_samples`), we can break out
    sooner (to avoid looping on a sparse database).
    * We'll never try to sample the db dicts more times than the number of
    non-empty dicts in the db (max 1 in non-cluster mode).
    
    And it also ensures that each database has a sufficient amount of
    sampled keys, so even if unsharded-cluster supports multiple databases,
    there won't be any issues.
    
    other changes:
    1. keep track of the number of non-empty dicts in each database.
    2. move key_count tracking into cumulativeKeyCountAdd rather than all
    it's callers
    
    ---------
    Co-authored-by: default avatarOran Agra <oran@redislabs.com>
    9ee1cc33
server.c 289 KB