• Yanqi Lv's avatar
    Optimize DEL on expired keys (#13080) · 0a12f380
    Yanqi Lv authored
    
    
    If we call `DEL` on expired keys, keys may be deleted in
    `expireIfNeeded` and we don't need to call `dbSyncDelete` or
    `dbAsyncDelete` after, which repeat the deletion process(i.e. find keys
    in main db).
    
    In this PR, I refine the return values of `expireIfNeeded` to indicate
    whether we have deleted the expired key to avoid the potential redundant
    deletion logic in `delGenericCommand`. Besides, because both KEY_EXPIRED
    and KEY_DELETED are non-zero, this PR won't affect other functions
    calling `expireIfNeeded`.
    
    I also make a performance test. I first close active expiration by
    `debug set-active-expire 0` and write 1 million keys with 1ms TTL. Then
    I repeatedly delete 100 expired keys in one `DEL`. The results are as
    follow, which shows that this PR can improve performance by about 10% in
    this situation.
    **unstable**
    ```
    Summary:
      throughput summary: 10080.65 requests per second
      latency summary (msec):
              avg       min       p50       p95       p99       max
            0.953     0.136     0.959     1.215     1.335     2.247
    ```
    
    **This PR**
    ```
    Summary:			
      throughput summary: 11074.20 requests per second			
      latency summary (msec):			
              avg       min       p50       p95       p99       max			
            0.865     0.128     0.879     1.055     1.175     2.159			
    ```
    
    ---------
    Co-authored-by: default avatarViktor Söderqvist <viktor.soderqvist@est.tech>
    Co-authored-by: default avatarOran Agra <oran@redislabs.com>
    0a12f380
db.c 97.2 KB