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

 

若是使用redis的頻次較高,那麼業務中常常會出現須要根據關鍵字進行批量查詢,因此總結一下StackExchange中使用批量查詢的方法(若是數據量很大,那麼在redis中模糊查詢很耗時,請慎用!)html

初始化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腳本進行模糊查詢的批量操做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 }
相關文章
相關標籤/搜索