Redis Sorted Set: Sort by Date (Detailed Guide w/ Code Examples)

Use Case(s)

Sorting items such as events, tasks, or messages by date using a Redis sorted set. This is useful for applications that need to display time-ordered data efficiently.

Code Examples

To store items with a timestamp in a Redis sorted set and retrieve them sorted by date:

Python

import redis from datetime import datetime # Connect to Redis r = redis.Redis(host='localhost', port=6379, db=0) # Add items with timestamps as scores r.zadd('events', {'event1': datetime(2023, 6, 1).timestamp()}) r.zadd('events', {'event2': datetime(2023, 6, 2).timestamp()}) # Get items sorted by date events = r.zrange('events', 0, -1, withscores=True) for event, score in events: print(event.decode(), datetime.fromtimestamp(score))

Node.js

const redis = require('redis'); const client = redis.createClient(); client.on('connect', function() { console.log('Connected to Redis'); }); // Add items with timestamps as scores client.zadd('events', new Date('2023-06-01').getTime() / 1000, 'event1'); client.zadd('events', new Date('2023-06-02').getTime() / 1000, 'event2'); // Get items sorted by date client.zrange('events', 0, -1, 'WITHSCORES', (err, events) => { if (err) throw err; for (let i = 0; i < events.length; i += 2) { console.log(events[i], new Date(events[i + 1] * 1000)); } });

Golang

package main import ( "fmt" "github.com/go-redis/redis/v8" "context" "time" ) func main() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", }) // Add items with timestamps as scores rdb.ZAdd(ctx, "events", &redis.Z{Score: float64(time.Date(2023, 6, 1, 0, 0, 0, 0, time.UTC).Unix()), Member: "event1"}) rdb.ZAdd(ctx, "events", &redis.Z{Score: float64(time.Date(2023, 6, 2, 0, 0, 0, 0, time.UTC).Unix()), Member: "event2"}) // Get items sorted by date events, _ := rdb.ZRangeWithScores(ctx, "events", 0, -1).Result() for _, event := range events { fmt.Println(event.Member, time.Unix(int64(event.Score), 0)) } }

FAQs

Q: Why use timestamps as scores in a sorted set? A: Timestamps provide a natural way to sort events chronologically, leveraging the efficient sorting capabilities of Redis sorted sets.

Q: How to handle time zones? A: Always store timestamps in UTC to avoid issues with time zones.

Q: What happens if two events have the same timestamp? A: Redis will maintain their insertion order relative to each other.

Was this content helpful?

Start building today

Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement.