diff --git a/hlrdb-core.cabal b/hlrdb-core.cabal
--- a/hlrdb-core.cabal
+++ b/hlrdb-core.cabal
@@ -1,5 +1,5 @@
 name:                hlrdb-core
-version:             0.1.3.0
+version:             0.1.4.0
 synopsis:            High-level Redis Database Core API
 description:         A library for type-driven interaction with Redis
 license:             MIT
@@ -31,8 +31,8 @@
   build-depends: base >= 4.9 && < 5.0
                , bytestring ^>= 0.10.8.2
                , hashable (>= 1.2.6.1 && < 1.2.7.0) || ^>= 1.2.7.0
-               , hedis (>= 0.10.1 && <= 0.11.0) || ^>= 0.11.0
-               , lens (>= 4.16 && <= 4.17) || ^>= 4.17
+               , hedis (>= 0.10.1 && <= 0.12.4) || ^>= 0.12.4
+               , lens (>= 4.16 && <= 4.17.1) || ^>= 4.17.1
                , mtl ^>= 2.2.2
                , profunctors (>= 5.2.2 && <= 5.3) || ^>= 5.3
                , random ^>= 1.1
diff --git a/src/HLRDB/Core.hs b/src/HLRDB/Core.hs
--- a/src/HLRDB/Core.hs
+++ b/src/HLRDB/Core.hs
@@ -45,6 +45,7 @@
        , srem
        , scard
        , srandmember
+       , srandmemberN
        , sscan
 
          -- * SSet
diff --git a/src/HLRDB/Structures/Set.hs b/src/HLRDB/Structures/Set.hs
--- a/src/HLRDB/Structures/Set.hs
+++ b/src/HLRDB/Structures/Set.hs
@@ -43,12 +43,20 @@
   . Redis.scard
   . primKey p
 
--- | Retrieve a random element from a set
+-- | Retrieve a random element from a set. The underlying Redis primitive uses a poor but efficient distribution, biased by the underlying hash bucket allocation.
 srandmember :: MonadRedis m => RedisSet a b -> a -> m (Maybe b)
 srandmember p@(RSet (E _ _ d)) =
     (fmap . fmap) (d . pure)
   . unwrap
   . Redis.srandmember
+  . primKey p
+
+-- | Retrieve up to N unique random elements, limited by the cardinality of the set.
+srandmemberN :: MonadRedis m => RedisSet a b -> Integer -> a -> m [ b ]
+srandmemberN p@(RSet (E _ _ d)) n =
+    (fmap . fmap) (d . pure)
+  . unwrap
+  . flip Redis.srandmemberN n
   . primKey p
 
 -- | Use a cursor to iterate a collection
