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?
Similar Code Examples
- Redis Sorted Set: Get Highest Score
- Redis Sorted Set: Create
- Redis Sorted Set: Get by Key
- Redis Sorted Set: Limit Size
- Redis Sorted Set: Same Score
- Redis Sorted Set: Sorting by Multiple Fields
- Redis Sorted Set TTL
- Redis Sorted Set: Expire Key
- Redis Sorted Set: Check Exists
- Redis Sorted Set: Remove by Score
- Redis Sorted Set: Rate Limit
- Redis Sorted Set: Custom Order
Free System Design on AWS E-Book
Download this early release of O'Reilly's latest cloud infrastructure e-book: System Design on AWS.
Switch & save up to 80%
Dragonfly is fully compatible with the Redis ecosystem and requires no code changes to implement. Instantly experience up to a 25X boost in performance and 80% reduction in cost