StackExchange.redis 實現模糊匹配批量查詢

如果使用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
}


 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章