如何使用排序集從redis獲取多個密鑰的值?REDIS - 獲取多個密鑰的值
zadd Users 0 David
zadd Users 5 John
zadd Users 15 Linda
zrevrange Users 0 -1 withscores
這將有兩個用戶在裏面。
如何在一個查詢中檢索帶'David'和'Linda'鍵的用戶?
如何使用排序集從redis獲取多個密鑰的值?REDIS - 獲取多個密鑰的值
zadd Users 0 David
zadd Users 5 John
zadd Users 15 Linda
zrevrange Users 0 -1 withscores
這將有兩個用戶在裏面。
如何在一個查詢中檢索帶'David'和'Linda'鍵的用戶?
有多種無需在Redis中引入新命令即可完成此操作。
例如,您可以填寫一個臨時一套與你有興趣,然後計算臨時設定和zset之間的交叉點的名稱:
multi
sadd tmp David Linda ... and more ...
zinterstore res 2 tmp Users weights 0 1
zrange res 0 -1 withscores
del tmp res
exec
隨着流水線,這樣只會產生一個往返和你可以在tmp中填入任意數量的輸入參數。
隨着Redis的2.6,你也可以換這些行到服務器端Lua的腳本,最終得到一個命令接受輸入列表,並返回結果你想要的:
eval "redis.call('sadd', 'tmp', unpack(KEYS));
redis.call('zinterstore', 'res', 2, 'tmp', 'Users', 'weights', 0, 1);
local res = redis.call('zrange', 'res', 0, -1, 'withscores');
redis.call('del', 'res', 'tmp') ;
return res
" 2 David Linda
你可以安全地假設沒有新命令將被添加到Redis,如果它可以很容易地使用腳本實現。
因爲要處理排序的項目,所以使用排序集。你要求的是不使用排序集合作爲排序集合。如果你不關心排序順序,那麼可能是一個有序集合不是你正在尋找的。您已經可以檢索多個密鑰,但不是任意的密鑰。
如果您的主要目標是檢索多個任意鍵,請使用散列和hmget。如果您的主要需求是訪問已排序的集合,請使用排序後的集合,然後執行腳本路徑或管道執行一系列zscore調用。
您可以使用Redis的MGET
redis> MGET key1 key2 nonexisting
1) "Hello"
2) "World"
3) (nil)
如何在shell中輸入多行lua腳本?我輸入了'eval'redis.call('sadd','tmp',unpack(KEYS));',敲回車,然後出現錯誤(無效的參數);我需要一個特殊字符或末尾的東西來輸入腳本的其餘部分? – raffian
不,我認爲Redis-cli不接受多行腳本。 –