mirror of
https://github.com/HDT3213/godis.git
synced 2025-10-05 08:46:56 +08:00
Add randomkey command
This commit is contained in:
@@ -46,6 +46,7 @@ func makeRouter() map[string]CmdFunc {
|
||||
routerMap["incrbyfloat"] = defaultFunc
|
||||
routerMap["decr"] = defaultFunc
|
||||
routerMap["decrby"] = defaultFunc
|
||||
routerMap["randomkey"] = randomkey
|
||||
|
||||
routerMap["lpush"] = defaultFunc
|
||||
routerMap["lpushx"] = defaultFunc
|
||||
|
@@ -15,6 +15,10 @@ func info(cluster *Cluster, c redis.Connection, cmdLine CmdLine) redis.Reply {
|
||||
return cluster.db.Exec(c, cmdLine)
|
||||
}
|
||||
|
||||
func randomkey(cluster *Cluster, c redis.Connection, cmdLine CmdLine) redis.Reply {
|
||||
return cluster.db.Exec(c, cmdLine)
|
||||
}
|
||||
|
||||
/*----- utils -------*/
|
||||
|
||||
func makeArgs(cmd string, args ...string) [][]byte {
|
||||
|
@@ -827,6 +827,16 @@ func execBitPos(db *DB, args [][]byte) redis.Reply {
|
||||
return protocol.MakeIntReply(offset)
|
||||
}
|
||||
|
||||
// GetRandomKey Randomly return (do not delete) a key from the godis
|
||||
func getRandomKey(db *DB, args [][]byte) redis.Reply {
|
||||
k := db.data.RandomKeys(1)
|
||||
if len(k) == 0 {
|
||||
return &protocol.NullBulkReply{}
|
||||
}
|
||||
var key []byte
|
||||
return protocol.MakeBulkReply(strconv.AppendQuote(key, k[0]))
|
||||
}
|
||||
|
||||
func init() {
|
||||
RegisterCommand("Set", execSet, writeFirstKey, rollbackFirstKey, -3, flagWrite)
|
||||
RegisterCommand("SetNx", execSetNX, writeFirstKey, rollbackFirstKey, 3, flagWrite)
|
||||
@@ -852,5 +862,6 @@ func init() {
|
||||
RegisterCommand("GetBit", execGetBit, readFirstKey, nil, 3, flagReadOnly)
|
||||
RegisterCommand("BitCount", execBitCount, readFirstKey, nil, -2, flagReadOnly)
|
||||
RegisterCommand("BitPos", execBitPos, readFirstKey, nil, -3, flagReadOnly)
|
||||
RegisterCommand("Randomkey", getRandomKey, readAllKeys, nil, 1, flagReadOnly)
|
||||
|
||||
}
|
||||
|
@@ -802,3 +802,13 @@ func TestBitPos(t *testing.T) {
|
||||
actual = testDB.Exec(nil, utils.ToCmdLine("BitPos", key, "-1"))
|
||||
asserts.AssertErrReply(t, actual, "ERR bit is not an integer or out of range")
|
||||
}
|
||||
|
||||
func TestRandomkey(t *testing.T) {
|
||||
testDB.Flush()
|
||||
for i := 0; i < 10; i++ {
|
||||
key := utils.RandString(10)
|
||||
testDB.Exec(nil, utils.ToCmdLine2("SET", key, key))
|
||||
}
|
||||
actual := testDB.Exec(nil, utils.ToCmdLine("Randomkey"))
|
||||
asserts.AssertNotError(t, actual)
|
||||
}
|
||||
|
Reference in New Issue
Block a user