Skip to content

Commit 3f960ee

Browse files
committed
direct implementations for 2 commands
1 parent 20a81e7 commit 3f960ee

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

direct.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -822,3 +822,41 @@ func (db *RedisDB) HllMerge(destKey string, sourceKeys ...string) error {
822822
func (m *Miniredis) Copy(srcDB int, src string, destDB int, dest string) error {
823823
return m.copy(m.DB(srcDB), src, m.DB(destDB), dest)
824824
}
825+
826+
func (m *Miniredis) SCard(key string) (int, error) {
827+
return m.DB(m.selectedDB).SCard(key)
828+
}
829+
830+
func (db *RedisDB) SCard(key string) (int, error) {
831+
db.master.Lock()
832+
defer db.master.Unlock()
833+
if !db.exists(key) {
834+
return 0, nil
835+
}
836+
if db.t(key) != "set" {
837+
return 0, ErrWrongType
838+
}
839+
return len(db.setMembers(key)), nil
840+
}
841+
842+
// return "" if there were no members
843+
func (m *Miniredis) SRandMember(key string) (string, error) {
844+
return m.DB(m.selectedDB).SRandMember(key)
845+
}
846+
847+
func (db *RedisDB) SRandMember(key string) (string, error) {
848+
db.master.Lock()
849+
defer db.master.Unlock()
850+
if !db.exists(key) {
851+
return "", nil
852+
}
853+
if db.t(key) != "set" {
854+
return "", ErrWrongType
855+
}
856+
members := db.setMembers(key)
857+
if len(members) == 0 {
858+
return "", nil
859+
}
860+
db.master.shuffle(members)
861+
return members[0], nil
862+
}

0 commit comments

Comments
 (0)