Method Signature
zcard(
key: string
): Promise<number>
Parameters
The key of the sorted set
Response
The cardinality (number of members) of the sorted set.Returns 0 if the key does not exist.
Examples
Get the number of members
import { Redis } from '@upstash/redis';
const redis = new Redis({
url: process.env.UPSTASH_REDIS_REST_URL!,
token: process.env.UPSTASH_REDIS_REST_TOKEN!,
});
// Add members to a leaderboard
await redis.zadd(
'leaderboard',
{ score: 100, member: 'player1' },
{ score: 85, member: 'player2' },
{ score: 92, member: 'player3' }
);
// Get the total number of players
const count = await redis.zcard('leaderboard');
console.log(count); // 3
Check if sorted set is empty
const count = await redis.zcard('leaderboard');
if (count === 0) {
console.log('Leaderboard is empty');
} else {
console.log(`Leaderboard has ${count} players`);
}
Get count for non-existing key
const count = await redis.zcard('nonexistent');
console.log(count); // 0
Track member count changes
// Get initial count
const initialCount = await redis.zcard('leaderboard');
console.log(`Initial count: ${initialCount}`);
// Add new members
await redis.zadd(
'leaderboard',
{ score: 78, member: 'player4' },
{ score: 95, member: 'player5' }
);
// Get updated count
const newCount = await redis.zcard('leaderboard');
console.log(`New count: ${newCount}`);
console.log(`Added ${newCount - initialCount} members`);
Calculate percentile rank
const totalMembers = await redis.zcard('leaderboard');
const rank = await redis.zrank('leaderboard', 'player1');
if (rank !== null && totalMembers > 0) {
const percentile = ((totalMembers - rank - 1) / totalMembers) * 100;
console.log(`player1 is in the top ${percentile.toFixed(1)}%`);
}
Validate sorted set size
const maxMembers = 1000;
const currentCount = await redis.zcard('leaderboard');
if (currentCount >= maxMembers) {
console.log('Leaderboard is full');
// Maybe remove lowest scoring members
await redis.zrange('leaderboard', 0, currentCount - maxMembers);
} else {
console.log(`Can add ${maxMembers - currentCount} more members`);
}
Display sorted set statistics
const count = await redis.zcard('leaderboard');
if (count > 0) {
// Get score range
const [lowest] = await redis.zrange('leaderboard', 0, 0, { withScores: true });
const [highest] = await redis.zrange('leaderboard', -1, -1, { withScores: true });
console.log('Leaderboard Statistics:');
console.log(` Total players: ${count}`);
console.log(` Lowest score: ${lowest?.[1] ?? 'N/A'}`);
console.log(` Highest score: ${highest?.[1] ?? 'N/A'}`);
}
Monitor sorted set growth
// Useful for metrics and monitoring
const counts = await Promise.all([
redis.zcard('daily_leaderboard'),
redis.zcard('weekly_leaderboard'),
redis.zcard('monthly_leaderboard'),
]);
console.log('Active players:');
console.log(` Today: ${counts[0]}`);
console.log(` This week: ${counts[1]}`);
console.log(` This month: ${counts[2]}`);
- ZADD - Add members to a sorted set
- ZREM - Remove members from a sorted set
- ZRANGE - Return a range of members
- ZCOUNT - Count members in a score range