From 61391f5e810b1e6306ce3abdec34a3a622f1e605 Mon Sep 17 00:00:00 2001 From: Harmen Date: Wed, 24 Sep 2025 10:30:21 +0200 Subject: [PATCH] direct implementations for 2 commands --- direct.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/direct.go b/direct.go index 88ef361e..ff527b80 100644 --- a/direct.go +++ b/direct.go @@ -822,3 +822,41 @@ func (db *RedisDB) HllMerge(destKey string, sourceKeys ...string) error { func (m *Miniredis) Copy(srcDB int, src string, destDB int, dest string) error { return m.copy(m.DB(srcDB), src, m.DB(destDB), dest) } + +func (m *Miniredis) SCard(key string) (int, error) { + return m.DB(m.selectedDB).SCard(key) +} + +func (db *RedisDB) SCard(key string) (int, error) { + db.master.Lock() + defer db.master.Unlock() + if !db.exists(key) { + return 0, nil + } + if db.t(key) != "set" { + return 0, ErrWrongType + } + return len(db.setMembers(key)), nil +} + +// return "" if there were no members +func (m *Miniredis) SRandMember(key string) (string, error) { + return m.DB(m.selectedDB).SRandMember(key) +} + +func (db *RedisDB) SRandMember(key string) (string, error) { + db.master.Lock() + defer db.master.Unlock() + if !db.exists(key) { + return "", nil + } + if db.t(key) != "set" { + return "", ErrWrongType + } + members := db.setMembers(key) + if len(members) == 0 { + return "", nil + } + db.master.shuffle(members) + return members[0], nil +}