{
  "schema_version": 2,
  "id": "operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.0-release-notes",
  "title": "RedisTimeSeries 1.0 release notes",
  "url": "https://redis.io/docs/latest/operate/oss_and_stack/stack-with-enterprise/release-notes/redistimeseries/redistimeseries-1.0-release-notes/",
  "summary": "Downsampling/compaction. Secondary indexing. Aggregation at read time. Integration with Prometheus, Grafana, and Telegraph.",
  "tags": [
    "docs",
    "operate",
    "stack"
  ],
  "last_updated": "2026-09-21T16:36:33+01:00",
  "page_type": "content",
  "content_hash": "25992d48db9257a398d1c6222064cd1e7858346271cde8ae2e86141597f89069",
  "sections": [
    {
      "id": "requirements",
      "title": "Requirements",
      "role": "overview",
      "text": "RedisTimeSeries v1.0.3 requires:\n\n- Minimum Redis compatibility version (database): 5.0.0\n- Minimum Redis Enterprise Software version (cluster): 5.4.0"
    },
    {
      "id": "v103-september-2019",
      "title": "v1.0.3 (September 2019)",
      "role": "content",
      "text": "Update urgency: Medium\n\nThis is a maintenance release for version 1.0.\n\nThis release improves overall stability and provides fixes for issues found after the previous release.\n\nMain features:\n\n- #[143](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/143) Standard Deviation for Aggregations\n- #[163](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/163) `TS.RANGE` and `TS.MRANGE` can limit results via optional `COUNT` flag\n- #[161](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/161) Support for ARM architectures\n- #[160](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/160) Optional `TIMESTAMP` in `TS.INCRBY` and `TS.DECRBY`\n\nMain Fixes:\n\n- #[199](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/199) `RETENTION` is now 64bit\n- #[211](https://github.com/RedisTimeSeries/RedisTimeSeries/issues/211) write commands to return OOM error when redis reaches max memory\n\nMain Performance improvements:\n\n- #[3651](https://github.com/RedisTimeSeries/RedisTimeSeries/commit/3651ef8eb65b390e333053b91a64617fc2382f6e) Do not use `_union` if there's only 1 leaf in the index\n- #[0a68](https://github.com/RedisTimeSeries/RedisTimeSeries/commit/0a68d4eca95108595ac7dfbae68d3f0371e41470) Make _difference faster by iterating over the left dict (which is always smaller)"
    },
    {
      "id": "v101-july-2019",
      "title": "v1.0.1 (July 2019)",
      "role": "content",
      "text": "Update urgency: Minor\n\nThis is a maintenance release for version 1.0.\n\nSecondary index should work faster when a filter consists of a list of k=v predicates."
    },
    {
      "id": "v100-june-2019",
      "title": "v1.0.0 (June 2019)",
      "role": "content",
      "text": "This is the General Availability release of RedisTimeSeries!  Read the [full story here](https://redislabs.com/blog/redistimeseries-ga-making-4th-dimension-truly-immersive)"
    },
    {
      "id": "features",
      "title": "Features",
      "role": "content",
      "text": "In RedisTimeSeries, we are introducing a new data type that uses chunks of memory of fixed size for time series samples, indexed by the same [Radix Tree implementation](https://github.com/antirez/rax) as Redis Streams. With Streams, you can create a [capped stream](/commands/xadd), effectively limiting the number of messages by count. In RedisTimeSeries, you can apply a retention policy in milliseconds. This is better for time series use cases, because they are typically interested in the data during a given time window, rather than a fixed number of samples.\n\n#### Downsampling/compaction\n\nIf you want to keep all of your raw data points indefinitely, your data set will grow linearly over time. However, if your use case allows you to have less fine-grained data further back in time, downsampling can be applied. This allows you to keep fewer historical data points by aggregating raw data for a given time window using a given aggregation function. RedisTimeSeries supports downsampling with the following aggregations: avg, sum, min, max, range, count, first and last.  \n\n#### Secondary indexing\n\nWhen using Redis’ core data structures, you can only retrieve a time series by knowing the exact key holding the time series. Unfortunately, for many time series use cases (such as root cause analysis or monitoring), your application won’t know the exact key it’s looking for. These use cases typically want to query a set of time series that relate to each other in a couple of dimensions to extract the insight you need. You could create your own secondary index with core Redis data structures to help with this, but it would come with a high development cost and require you to manage edge cases to make sure the index is correct.\n\nRedisTimeSeries does this indexing for you based on `field value` pairs (a.k.a labels) you can add to each time series, and use to filter at query time (a full list of these filters is available in our documentation). Here’s an example of creating a time series with two labels (sensor_id and area_id are the fields with values 2 and 32 respectively) and a retention window of 60,000 milliseconds:\n\n[code example]\n\n#### Aggregation at read time\n\nWhen you need to query a time series, it’s cumbersome to stream all raw data points if you’re only interested in, say, an average over a given time interval. RedisTimeSeries follows the Redis philosophy to only transfer the minimum required data to ensure lowest latency. Below is an example of aggregation query over time buckets of 5,000 milliseconds with an aggregation function:  \n\n[code example]\n\n#### Integrations\n\nRedisTimeSeries comes with several integrations into existing time series tools. One such integration is our [RedisTimeSeries adapter for Prometheus](https://github.com/RedisTimeSeries/prometheus-redistimeseries-adapter), which keeps all your monitoring metrics inside RedisTimeSeries while leveraging the entire Prometheus ecosystem.\nFurthermore, we also created direct integration for [Grafana](https://github.com/RedisTimeSeries/grafana-redistimeseries). [This repository](https://github.com/RedisTimeSeries/prometheus-demos) contains a docker-compose setup of RedisTimeSeries, its remote write adaptor, Prometheus and Grafana. It also comes with a set of data generators and pre-built Grafana dashboards."
    }
  ],
  "examples": [
    {
      "id": "features-ex0",
      "language": "sh",
      "code": "TS.CREATE temperature RETENTION 60000 LABELS sensor_id 2 area_id 32",
      "section_id": "features"
    },
    {
      "id": "features-ex1",
      "language": "sh",
      "code": "127.0.0.1:6379> TS.RANGE temperature:3:32 1548149180000 1548149210000 AGGREGATION avg 5000\n1) 1) (integer) 1548149180000\n   2) \"26.199999999999999\"\n2) 1) (integer) 1548149185000\n   2) \"27.399999999999999\"\n3) 1) (integer) 1548149190000\n   2) \"24.800000000000001\"\n4) 1) (integer) 1548149195000\n   2) \"23.199999999999999\"\n5) 1) (integer) 1548149200000\n   2) \"25.199999999999999\"\n6) 1) (integer) 1548149205000\n   2) \"28\"\n7) 1) (integer) 1548149210000\n   2) \"20\"",
      "section_id": "features"
    }
  ]
}
