1. 28 Oct, 2024 2 commits
  2. 27 Oct, 2024 2 commits
  3. 22 Oct, 2024 1 commit
  4. 18 Oct, 2024 1 commit
  5. 17 Oct, 2024 2 commits
    • hanhui365's avatar
      Optimize bitcount command by using popcnt (#13359) · 3788a055
      hanhui365 authored
      
      
      Nowadays popcnt instruction is almost supported by X86 machine, which is
      used to calculate "Hamming weight", it can bring much performance boost
      in redis bitcount comand.
      
      ---------
      
      Signed-off-by: hanhui365(hanhui@hygon.cn)
      Co-authored-by: default avatardebing.sun <debing.sun@redis.com>
      Co-authored-by: default avataroranagra <oran@redislabs.com>
      Co-authored-by: default avatarNugine <nugine@foxmail.com>
      3788a055
    • Yuan Wang's avatar
      Clean up .rediscli_history_test temporary file (#13601) · b71a610f
      Yuan Wang authored
      After running test in local, there will be a file named
      `.rediscli_history_test`, and it is not in `.gitignore` file, so this is
      considered to have changed the code base. It is a little annoying, this
      commit just clean up the temporary file.
      
      We should delete `.rediscli_history_test` in the end since the second
      server tests also write somethings into it, to make it corresponding, i
      put `set ::env(REDISCLI_HISTFILE) ".rediscli_history_test"` at the
      beginning.
      
      Maybe we also can add this file into `.gitignore`
      b71a610f
  6. 15 Oct, 2024 3 commits
  7. 12 Oct, 2024 1 commit
  8. 10 Oct, 2024 1 commit
    • guybe7's avatar
      Cleanups related to expiry/eviction (#13591) · a38c29b6
      guybe7 authored
      1. `dbRandomKey`: excessive call to `dbFindExpires` (will always return
      1 if `allvolatile` + anyway called inside `expireIfNeeded`
      2. Add `deleteKeyAndPropagate` that is used by both expiry/eviction
      3. Change the order of calls in `expireIfNeeded` to save redundant calls
      to `keyIsExpired`
      4. `expireIfNeeded`: move `OBJ_STATIC_REFCOUNT` to
      `deleteKeyAndPropagate`
      5. `performEvictions` now uses `deleteEvictedKeyAndPropagate`
      6. active-expire: moved `postExecutionUnitOperations` inside
      `activeExpireCycleTryExpire`
      7. `activeExpireCycleTryExpire`: less indentation + expire a key if `now
      == t`
      8. rename `lazy_expire_disabled` to `allow_access_expired`
      a38c29b6
  9. 08 Oct, 2024 5 commits
  10. 29 Sep, 2024 1 commit
    • Moti Cohen's avatar
      Add new SFLUSH command to cluster for slot-based FLUSH (#13564) · d092d64d
      Moti Cohen authored
      This PR introduces a new `SFLUSH` command to cluster mode that allows
      partial flushing of nodes based on specified slot ranges. Current
      implementation is designed to flush all slots of a shard, but future
      extensions could allow for more granular flushing.
      
      **Command Usage:**
      `SFLUSH <start-slot> <end-slot> [<start-slot> <end-slot>]* [SYNC|ASYNC]`
      
      This command removes all data from the specified slots, either
      synchronously or asynchronously depending on the optional SYNC/ASYNC
      argument.
      
      **Functionality:**
      Current imp of `SFLUSH` command verifies that the provided slot ranges
      are valid and cover all of the node's slots before proceeding. If slots
      are partially or incorrectly specified, the command will fail and return
      an error, ensuring that all slots of a node must be fully covered for
      the flush to proceed.
      
      The function supports both synchronous (default) and asynchronous
      flushing. In addition, if possible, SFLUSH SYNC will be run as blocking
      ASYNC as an optimization.
      d092d64d
  11. 26 Sep, 2024 2 commits
  12. 25 Sep, 2024 2 commits
  13. 23 Sep, 2024 2 commits
  14. 19 Sep, 2024 1 commit
    • Moti Cohen's avatar
      Extend modules API to read also expired keys and subkeys (#13526) · 3a3cacfe
      Moti Cohen authored
      The PR extends `RedisModule_OpenKey`'s flags to include
      `REDISMODULE_OPEN_KEY_ACCESS_EXPIRED`, which allows to access expired
      keys.
      
      It also allows to access expired subkeys. Currently relevant only for
      hash fields
      and has its impact on `RM_HashGet` and `RM_Scan`.
      3a3cacfe
  15. 18 Sep, 2024 1 commit
  16. 15 Sep, 2024 3 commits
  17. 13 Sep, 2024 2 commits
  18. 12 Sep, 2024 8 commits
    • Filipe Oliveira (Redis)'s avatar
      Optimize SSCAN command in case of listpack or intset encoding: avoid the usage... · f2f85ba3
      Filipe Oliveira (Redis) authored
      Optimize SSCAN command in case of listpack or intset encoding: avoid the usage of intermediate list. From 2N to N iterations (#13530)
      
      On SSCAN, in case of listpack and intset encoding we actually reply the
      entire set, and always reply with the cursor 0.
      
      For those cases, we don't need to accumulate the replies in a list and
      can completely avoid the overhead of list appending and then iterating
      over the list again -- meaning we do N iterations instead of 2N
      iterations over the SET and save intermediate memory as well.
      
      Preliminary benchmarks, `SSCAN set:100 0`, showcased an improvement of
      60% as visible bellow on a SET with 100 string elements (listpack
      encoded).
      f2f85ba3
    • Moti Cohen's avatar
      Add iterator capability to ebuckets DS (#13519) · c115c523
      Moti Cohen authored
      Add basic iterator API for ebuckets of start, next, nextBucket and stop.
      c115c523
    • Moti Cohen's avatar
      Correct spelling error at t_hash.c comment (#13540) · 65a87cb7
      Moti Cohen authored
      spell check error : ./src/t_hash.c:1141: RESOTRE ==> RESTORE
      65a87cb7
    • Moti Cohen's avatar
      HFE - Fix key ref by the hash on RENAME/MOVE/SWAPDB/RESTORE (#13539) · 9a89e32a
      Moti Cohen authored
      If the hash previously had HFEs (hash-fields with expiration) but later no longer
      does, the key ref in the hash might become outdated after a MOVE, COPY,
      RENAME or RESTORE operation. These commands maintain the key ref only
      if HFEs are present. That is, we can only be sure that key ref is valid as long as the
      hash has HFEs.
      9a89e32a
    • YaacovHazan's avatar
      Redis 8.0 M01 (#13538) · 5fe3e74a
      YaacovHazan authored
      ### New Features in binary distributions
      
      - 7 new data structures: JSON, Time series, Bloom filter, Cuckoo filter,
      Count-min sketch, Top-k, t-digest
      - Redis scalable query engine (including vector search)
      
      ### Potentially breaking changes
      
      - #12272 `GETRANGE` returns an empty bulk when the negative end index is
      out of range
      - #12395 Optimize `SCAN` command when matching data type
      
      ### Bug fixes
      
      - #13510 Fix `RM_RdbLoad` to enable AOF after RDB loading is completed
      - #13489 `ACL CAT` - return module commands
      - #13476 Fix a race condition in the `cache_memory` of `functionsLibCtx`
      - #13473 Fix incorrect lag due to trimming stream via `XTRIM` command
      - #13338 Fix incorrect lag field in `XINFO` when tombstone is after the
      `last_id` of the consume group
      - #13470 On `HDEL` of last field - update the global hash field
      expiration data structure
      - #13465 Cluster: Pass extensions to node if extension processing is
      handled by it
      - #13443 Cluster: Ensure validity of myself when loading cluster config
      - #13422 Cluster: Fix `CLUSTER SHARDS` command returns empty array
      
      ### Modules API
      
      - #13509 New API calls: `RM_DefragAllocRaw`, `RM_DefragFreeRaw`, and
      `RM_RegisterDefragCallbacks` - defrag API to allocate and free raw
      memory
      
      ### Performance and resource utilization improvements
      
      - #13503 Avoid overhead of comparison function pointer calls in listpack
      `lpFind`
      - #13505 Optimize `STRING` datatype write commands
      - #13499 Optimize `SMEMBERS` command
      - #13494 Optimize `GEO*` commands reply
      - #13490 Optimize `HELLO` command
      - #13488 Optimize client query buffer
      - #12395 Optimize `SCAN` command when matching data type
      - #13529 Optimize `LREM`, `LPOS`, `LINSERT`, and `LINDEX` commands
      - #13516 Optimize `LRANGE` and other commands that perform several
      writes to client buffers per call
      - #13431 Avoid `used_memory` contention when updating from multiple
      threads
      
      ### Other general improvements
      
      - #13495 Reply `-LOADING` on replica while flushing the db
      
      ### CLI tools
      
      - #13411 redis-cli: Fix wrong `dbnum` showed after the client
      reconnected
      
      ### Notes
      
      - No backward compatibility for replication or persistence.
      - Additional distributions, upgrade paths, features, and improvements
      will be introduced in upcoming pre-releases.
      - With the GA release of 8.0 we will deprecate Redis Stack.
      5fe3e74a
    • Oran Agra's avatar
      RED-129256, Fix TOUCH command from script in no-touch mode (#13512) · 610eb26c
      Oran Agra authored
      
      
      When a client in no-touch mode issues a TOUCH command on a key, the
      key’s access time should be updated, but in scripts, and module's
      RM_Call, it isn’t updated.
      Command proc should be matched to the executing client, not the current
      client.
      Co-authored-by: default avatarUdi Ron <udi@speedb.io>
      610eb26c
    • YaacovHazan's avatar
      Redis 8.0 M01 · 4955375e
      YaacovHazan authored
      4955375e
    • Steve's avatar
      Avoid cluster.nodes load corruption due to shard-id generation (#13468) · d265a614
      Steve authored
      
      
      PR #13428 doesn't fully resolve an issue where corruption errors can
      still occur on loading of cluster.nodes file - seen on upgrade where
      there were no shard_ids (from old Redis), 7.2.5 loading generated new
      random ones, and persisted them to the file before gossip/handshake
      could propagate the correct ones (or some other nodes unreachable).
      This results in a primary/replica having differing shard_id in the
      cluster.nodes and then the server cannot startup - reports corruption.
      
      This PR builds on #13428 by simply ignoring the replica's shard_id in
      cluster.nodes (if it exists), and uses the replica's primary's shard_id.
      Additional handling was necessary to cover the case where the replica
      appears before the primary in cluster.nodes, where it will first use a
      generated shard_id for the primary, and then correct after it loads the
      primary cluster.nodes entry.
      
      ---------
      Co-authored-by: default avatardebing.sun <debing.sun@redis.com>
      d265a614