如果使用redis的頻次較高,那麼業務中經常會出現需要根據關鍵字進行批量查詢,所以總結一下StackExchange中使用批量查詢的方法(如果數據量很大,那麼在redis中模糊查詢很耗時,請慎用!)
初始化redis連接對象:
string _connectionString = ConfigurationManager.ConnectionStrings["RedisConnectionString"].ConnectionString;
ConnectionMultiplexer _connMultiplexer = ConnectionMultiplexer.Connect(_connectionString);
IDataBase _db = _connMultiplexer.GetDatabase(db);
通過 keys或scan查找出匹配的key,StackExchange.Redis 中調用 keys/scan/size/flush/save/集羣 等命令須使用 IServer 對象
var _server = _connMultiplexer.GetServer(_connMultiplexer.GetEndPoints()[0]); //默認一個服務器
var pattern = "keyword*";
var keys = _server.Keys(database: _db.Database, pattern: pattern); //StackExchange.Redis 會根據redis版本決定用keys還是 scan(>2.8)
return _db.KeyDelete(keys.ToArray()); //刪除一組key
如果數據量很大(比如幾十萬個key),爲了提高效率,可以通過Lua腳本進行模糊查詢的批量操作
var pattern = "keyword*";
var redisResult = _db.ScriptEvaluateAsync(LuaScript.Prepare(
//Redis的keys模糊查詢:
" local res = redis.call(‘KEYS‘, @keypattern) " +
" return res "), new { @keypattern = pattern });
if (!redisResult.IsNull) {
_db.KeyDelete((string[])redisResult); //刪除一組key
}