# Changelog

<Update label="March 2026">
Added [Upstash Redis Search](/redis/search/introduction) feature, a new extension for searching Redis data. It works with JSON, Hash, and String data, automatically keeps indexes in sync with Redis writes, and supports full-text search, filtering, aggregations, aliases, highlighting, fuzzy matching, phrase queries, and regex matching.

Redis Search is available through the [@upstash/redis](/redis/sdks/ts/overview) and [upstash-redis](/redis/sdks/py/overview) SDKs. If you already use `node-redis` or `ioredis`, you can use the [`@upstash/search-redis`](/redis/search/adapters/node-redis) and [`@upstash/search-ioredis`](/redis/search/adapters/ioredis) wrappers without switching clients.

New Redis Search commands:
- [`SEARCH.CREATE`](/redis/commands/search/search-create): Create a search index
- [`SEARCH.DROP`](/redis/commands/search/search-drop): Remove a search index
- [`SEARCH.DESCRIBE`](/redis/commands/search/search-describe): Return metadata about a search index
- [`SEARCH.WAITINDEXING`](/redis/commands/search/search-waitindexing): Wait until pending index updates are visible to queries
- [`SEARCH.QUERY`](/redis/commands/search/search-query): Search documents with a JSON filter
- [`SEARCH.COUNT`](/redis/commands/search/search-count): Count matching documents without returning them
- [`SEARCH.AGGREGATE`](/redis/commands/search/search-aggregate): Compute analytics over matching documents
- [`SEARCH.ALIASADD`](/redis/commands/search/search-aliasadd), [`SEARCH.ALIASDEL`](/redis/commands/search/search-aliasdel), and [`SEARCH.LISTALIASES`](/redis/commands/search/search-listaliases): Manage search index aliases
</Update>

<Update label="December 2025">
Added [Redis Functions](https://redis.io/docs/latest/develop/programmability/functions-intro/) support. New commands are: 
- [`FCALL`](/redis/commands/functions/fcall): Call a function with read/write capabilities
- [`FCALL_RO`](/redis/commands/functions/fcall-ro): Call a function in read-only mode
- `FUNCTION DELETE`, `FUNCTION FLUSH`, `FUNCTION KILL`, `FUNCTION LIST`, `FUNCTION LOAD` and `FUNCTION STATS`

New Hash commands:
- [`HGETDEL`](/redis/commands/hash/hgetdel): Get and delete hash fields atomically
- [`HGETEX`](/redis/commands/hash/hgetex): Get hash fields with expiration support
- [`HSETEX`](/redis/commands/hash/hsetex): Set hash fields with expiration support
    
New Stream Commands:
- [`XDELEX`](/redis/commands/streams/xdelex): Extended delete for streams
- [`XACKDEL`](/redis/commands/streams/xackdel): Acknowledge and delete stream entries
  
New Bit operations added:
- `BITOP DIFF`: A bit is set only if it's set in all source bitmaps
- `BITOP DIFF1`: A bit is set if it's set in the first key but not in any of the other keys
- `BITOP ANDOR`: A bit is set if it's set in X and also in one or more of Y1, Y2, ...
- `BITOP ONE`: A bit is set if it's set in exactly one source key
</Update>

<Update label="April 2025">
Added HASH expiration support. New commands are:
- [`HEXPIRE`](/redis/commands/hash/hexpire): Set expiration time in seconds
- [`HPEXPIRE`](/redis/commands/hash/hpexpire): Set expiration time in milliseconds
- [`HEXPIREAT`](/redis/commands/hash/hexpireat): Set expiration time as Unix timestamp in seconds
- [`HPEXPIREAT`](/redis/commands/hash/hpexpireat): Set expiration time as Unix timestamp in milliseconds
- [`HTTL`](/redis/commands/hash/httl): Get remaining time to live in seconds
- [`HPTTL`](/redis/commands/hash/hpttl): Get remaining time to live in milliseconds
- [`HEXPIRETIME`](/redis/commands/hash/hexpiretime): Get absolute expiration time as Unix timestamp in seconds
- [`HPEXPIRETIME`](/redis/commands/hash/hpexpiretime): Get absolute expiration time as Unix timestamp in milliseconds
- [`HPERSIST`](/redis/commands/hash/hpersist): Remove expiration from hash fields
</Update>

<Update label="Feb 2025">
Added [`EVAL_RO`](/redis/commands/scripting/eval-ro) and [`EVALSHA_RO`](/redis/commands/scripting/evalsha-ro)
commands introduced in Redis 7. 
</Update>

<Update label="July 2024">
- Added REST API support for [`MONITOR`](/redis/commands/server/monitor) and [`SUBSCRIBE`](/redis/commands/pub-sub/subscribe)
commands using [SSE](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events). 
See [Monitor](../features/restapi#monitor-command) and [Subscribe](../features/restapi#subscribe-command) docs.
- Added [`JSON.MSET`](/redis/commands/json/json-mset) and [`JSON.MERGE`](/redis/commands/json/json-merge) commands.
- Introduced the `IP Allowlist` feature for enhanced security on newly created databases. By default, all IP addresses will be allowed. 
However, access can be restricted by specifying permitted IP addresses or CIDR ranges.
</Update>

<Update label="June 2024">
- Added AWS AP-NorthEast-1 Japan region.
- Added an option to return REST response in [`RESP2`](https://redis.io/docs/latest/develop/reference/protocol-spec/) format instead of `JSON`. 
See [REST API docs](/redis/features/restapi#resp2-format-responses) for more information.
</Update>

<Update label="April 2024">
- Implemented [`MONITOR`](/redis/commands/server/monitor) command
- Implemented Redis [keyspace notifications](/redis/howto/keyspacenotifications)
- Implemented [`WAIT`](/redis/commands/generic/wait) and [`WAITAOF`](/redis/commands/generic/waitaof) commands
- Added `lag` field to [`XINFO GROUPS`](/redis/commands/streams/xinfo-groups)
- Added [`CLIENT ID`](/redis/commands/connection/client-id) subcommand
- Added password strength check to [`ACL SETUSER`](/redis/commands/server/acl-setuser) command
</Update>

<Update label="February 2024">
- Fixed JSON commands with empty keys
- Fixed a panic on `XTRIM` and `XDEL`
- Added `CLIENT SETNAME/NAME/LIST` subcommands
- Implemented near exact trim for streams
</Update>

<Update label="September 2023">
- Implemented some missing Redis commands:
    - `DUMP` 
    - `RESTORE`
    - `ZMPOP` 
    - `BZMPOP`
    - `LMPOP` 
    - `BLMPOP`
    - `SINTERCARD`
- Added support for `BIT/BYTE` flag to `BITPOS` and `BITCOUNT` commands
- Added support for `XX`, `NX`, `GT`, and `LT` arguments to `EXPIRE` commands
- Allowed `NX` and `GET` args to be used together in `SET` command
</Update>
