示例#1
0
        /// <summary>
        /// 获取 Server 对象
        /// </summary>
        /// <returns></returns>
        private static IServer GetServer()
        {
            IServer server = null;

            try
            {
                //https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/KeysScan.md
                server = _client?.GetServer(_client?.GetEndPoints()?[0]);

#if DEBUG && RedisError
                server = null;
                throw new Exception("模拟Redis连接错误,手动抛出异常");
#endif
            }
            catch (Exception ex)
            {
                LogHelper.RuntimeLog(new {
                    ReqId      = string.Empty,
                    flag_type  = 4,
                    target     = string.Format("/{0}/{1}", System.Reflection.MethodBase.GetCurrentMethod().ReflectedType.FullName, new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name),
                    LogContent = $"【异常】:【{JSON.Serialize(ex)}】"
                });
            }

            return(server);
        }
示例#2
0
文件: Tests.cs 项目: mnjstwins/Rol
 public void Setup()
 {
     Connection.GetServer(Connection.GetEndPoints()[0]).FlushDatabase();
 }
示例#3
0
        public void ClearDb()
        {
            IServer server = _redis.GetServer(_redis.GetEndPoints()[0]);

            server.FlushDatabase();
        }
示例#4
0
 protected IServer GetServer(ConnectionMultiplexer muxer)
 {
     EndPoint[] endpoints = muxer.GetEndPoints();
     IServer result = null;
     foreach(var endpoint in endpoints)
     {
         var server = muxer.GetServer(endpoint);
         if (server.IsSlave || !server.IsConnected) continue;
         if(result != null) throw new InvalidOperationException("Requires exactly one master endpoint (found " + server.EndPoint + " and " + result.EndPoint + ")");
         result = server;
     }
     if(result == null) throw new InvalidOperationException("Requires exactly one master endpoint (found none)");
     return result;
 }
 public EndPoint[] GetEndPoints()
 {
     return(_redis.GetEndPoints());
 }
示例#6
0
 private void Init()
 {
     connection = ConnectionMultiplexer.Connect(settings.ConnectionString);
     database   = connection.GetDatabase();
     server     = connection.GetServer(connection.GetEndPoints().First());
 }
示例#7
0
 public static void Connect()
 {
     Redis   = ConnectionMultiplexer.Connect(string.Join(",", ConnectionStrings));
     Servers = Redis.GetEndPoints().Select(p => Redis.GetServer(p)).Where(p => p.IsConnected).ToList();
 }
示例#8
0
        internal static IServer GetServer(this ConnectionMultiplexer connection)
        {
            var endPoints = connection.GetEndPoints();

            return(connection.GetServer(endPoints[0]));
        }
示例#9
0
        public static IServer GetFirstServer(this ConnectionMultiplexer @this)
        {
            var endPoint = @this.GetEndPoints()[0];

            return(@this.GetServer(endPoint));
        }
示例#10
0
        static void Main(string[] args)
        {
            //Redis 有多db

            var first      = db.ListGetByIndex("order", 0);
            var firstOrder = db.ListLeftPop("order");



            for (int i = 0; i < 10; i++)
            {
                db.ListLeftPush("order", i);
            }

            //for (int i = 0; i < 10; i++)
            //{
            //    Console.WriteLine($"第{i}次,同步从Redis获取订单:{ db.ListLeftPop("order")}");
            //}

            //for (int i = 0; i < 10; i++)
            //{
            //    Console.WriteLine($"第{i}次,同步从内存列表获取订单:{list.FirstOrDefault()}");
            //    list.RemoveAt(0);
            //}

            for (int i = 0; i < 10000; i++)
            {
                db.ListLeftPush("order", i);
            }

            for (int i = 0; i < 10000; i++)
            {
                list.Add(i);
            }

            Thread.Sleep(5000);

            Parallel.For(0, 9999, i => GetOrder(i));

            //for (int i = 0; i < 10; i++)
            //{
            //    Thread thread1 = new Thread(GetOrder);
            //    thread1.Start();
            //}



            //string value = "console";
            //db.StringSet("mykey", value);
            //db.StringSet("mykey1", "111");
            //db.StringSet("mykey2", "11221");



            //IDatabase db1 = redis.GetDatabase(1);
            //db1.HashSet("myhash", "key1", "value1");
            //Console.WriteLine (db.StringGet("mykey"));


            //ISubscriber sub = redis.GetSubscriber();
            //sub.Subscribe("message", (channel, message) =>
            //{
            //    Console.WriteLine(message);
            //});

            ////获取单个服务
            //IServer redisServer = redis.GetServer("localhost", 6379);

            //foreach (var key in redisServer.Keys(pattern: "*key*"))
            //{
            //    Console.WriteLine(key);
            //}
            System.Net.EndPoint[] endpoints = redis.GetEndPoints();
            Console.ReadKey();
        }
示例#11
0
 public void Dispose()
 {
     _multiplexer.GetServer(_multiplexer.GetEndPoints()[0]).FlushDatabase();
 }
示例#12
0
 public RedisTests()
 {
     _multiplexer = ConnectionMultiplexer.Connect("bafver.redis.cache.windows.net,ssl=true,password=een9I4OZKFi1sju6OEm9dJefqokLtLxNuVDc0CDzrY8=,allowAdmin=true");
     _multiplexer.GetServer(_multiplexer.GetEndPoints()[0]).FlushDatabase();
     _cacheEngine = new CacheEngine(new RedisCacheProvider(_multiplexer));
 }
示例#13
0
        public RedisCacheProvider(ConfigurationOptions options, MessagePack.MessagePackSerializerOptions mspOptions = null) : this()
        {
            Option     = mspOptions ?? MessagePack.Resolvers.ContractlessStandardResolver.Options;
            Connection = ConnectionMultiplexer.Connect(options);
            var server = Connection.GetServer(Connection.GetEndPoints()[0]);

            _LuaCache  = LuaScript.Prepare(@"redis.call('hset',@timerkey,'mode',@mode);
redis.call('hset',@timerkey,'counter',@timer);
redis.call('hset',@timerkey,'creation',@creation);
redis.call('set',@key,@value);");
            _LuaDel    = LuaScript.Prepare(@"redis.call('del',@timerkey);
redis.call('del',@key);
return nil;");
            _LuaGet    = LuaScript.Prepare($@"local mode = tonumber(redis.call('hget',@timerkey,'mode'));
if mode == nil then
    return nil;
end
if mode == {(byte)TimeOutMode.Never} then
    return redis.call('get',@key);
elseif mode == {(byte)TimeOutMode.AccessCount} then
    local cnt = tonumber(redis.call('hincrby',@timerkey,'counter',-1));
    if cnt > 0 then
        return redis.call('get',@key);
    elseif cnt == 0 then
        local tmp = redis.call('get',@key);
        redis.call('del',@timerkey);
        redis.call('del',@key);
        return tmp;
    else
        redis.call('del',@timerkey);
        redis.call('del',@key);
        return nil;
    end
elseif mode == {(byte)TimeOutMode.FromCreate} then
    local crt = tonumber(redis.call('hget',@timerkey,'creation'));
    if @now - crt < tonumber(redis.call('hget',@timerkey,'counter')) then
        return redis.call('get',@key);
    else
        redis.call('del',@timerkey);
        redis.call('del',@key);
        return nil;
    end
else
    local crt = tonumber(redis.call('hget',@timerkey,'creation'));
    if @now - crt < tonumber(redis.call('hget',@timerkey,'counter')) then
        redis.call('hset',@timerkey,'creation',@now);
        return redis.call('get',@key);
    else
        redis.call('del',@timerkey);
        redis.call('del',@key);
        return nil;
    end
end
");
            _LuaExists = LuaScript.Prepare($@"local mode = tonumber(redis.call('hget',@timerkey,'mode'));
if mode == nil then
    return 0;
end
if mode == {(byte)TimeOutMode.Never} then
    return 1
elseif mode == {(byte)TimeOutMode.AccessCount} then
    return 1
elseif mode == {(byte)TimeOutMode.FromCreate} then
    local crt = tonumber(redis.call('hget',@timerkey,'creation'));
    if @now - crt < tonumber(redis.call('hget',@timerkey,'counter')) then
        return 1
    else
        redis.call('del',@timerkey);
        redis.call('del',@key);
        return 0;
    end
else
    local crt = tonumber(redis.call('hget',@timerkey,'creation'));
    if @now - crt < tonumber(redis.call('hget',@timerkey,'counter')) then
        return 1
    else
        redis.call('del',@timerkey);
        redis.call('del',@key);
        return 0;
    end
end");


            _LuaCacheSub  = LuaScript.Prepare(@"redis.call('hset',@timerkey,'mode',@mode);
redis.call('hset',@timerkey,'counter',@timer);
redis.call('hset',@timerkey,'creation',@creation);
redis.call('hset',@key,@subkey,@value);");
            _LuaDelSub    = LuaScript.Prepare(@"redis.call('del',@timerkey);
redis.call('hdel',@key,@subkey);
return nil;");
            _LuaGetSub    = LuaScript.Prepare($@"local mode = tonumber(redis.call('hget',@timerkey,'mode'));
if mode == nil then
    return nil;
end
if mode == {(byte)TimeOutMode.Never} then
    return redis.call('hget',@key,@subkey);
elseif mode == {(byte)TimeOutMode.AccessCount} then
    local cnt = tonumber(redis.call('hincrby',@timerkey,'counter',-1));
    if cnt > 0 then
        return redis.call('hget',@key,@subkey);
    elseif cnt == 0 then
        local tmp = redis.call('hget',@key,@subkey);
        redis.call('del',@timerkey);
        redis.call('hdel',@key,@subkey);
        return tmp;
    else
        redis.call('del',@timerkey);
        redis.call('hdel',@key,@subkey);
        return nil;
    end
elseif mode == {(byte)TimeOutMode.FromCreate} then
    local crt = tonumber(redis.call('hget',@timerkey,'creation'));
    if @now - crt < tonumber(redis.call('hget',@timerkey,'counter')) then
        return redis.call('hget',@key,@subkey);
    else
        redis.call('del',@timerkey);
        redis.call('hdel',@key,@subkey);
        return nil;
    end
else
    local crt = tonumber(redis.call('hget',@timerkey,'creation'));
    if @now - crt < tonumber(redis.call('hget',@timerkey,'counter')) then
        redis.call('hset',@timerkey,'creation',@now);
        return redis.call('hget',@key,@subkey);
    else
        redis.call('del',@timerkey);
        redis.call('hdel',@key,@subkey);
        return nil;
    end
end");
            _LuaExistsSub = LuaScript.Prepare($@"local mode = tonumber(redis.call('hget',@timerkey,'mode'));
if mode == nil then
    return 0;
end
if mode == {(byte)TimeOutMode.Never} then
    return 1
elseif mode == {(byte)TimeOutMode.AccessCount} then
    return 1
elseif mode == {(byte)TimeOutMode.FromCreate} then
    local crt = tonumber(redis.call('hget',@timerkey,'creation'));
    if @now - crt < tonumber(redis.call('hget',@timerkey,'counter')) then
        return 1
    else
        redis.call('del',@timerkey);
        redis.call('hdel',@key,@subkey);
        return 0;
    end
else
    local crt = tonumber(redis.call('hget',@timerkey,'creation'));
    if @now - crt < tonumber(redis.call('hget',@timerkey,'counter')) then
        return 1;
    else
        redis.call('del',@timerkey);
        redis.call('hdel',@key,@subkey);
        return 0;
    end
end");
        }
示例#14
0
 public IServer FirstServer()
 {
     EndPoint[] endPoint = connection.GetEndPoints();
     return(this.GetConnection().GetServer(endPoint[0]));
 }
示例#15
0
 public IEnumerable <string> GetAllKeys() =>
 _conn.GetEndPoints().Select(endPoint => _conn.GetServer(endPoint))
 .SelectMany(server => server.Keys().ToStrings());
示例#16
0
 public List <string> Keys(string patten = "*")
 {
     return(_cnn.GetServer(_cnn.GetEndPoints()[0]).Keys(pattern: "*").Select(b => b.ToString()).ToList());
 }
示例#17
0
        private List <RedisKey> GetRemoveKeys(string pattern)
        {
            var endPoint = _connection.GetEndPoints().FirstOrDefault();

            return(_connection.GetServer(endPoint).Keys(pattern: $"*{pattern}*").ToList());
        }
示例#18
0
 /// <summary>
 /// 分页获取所有Keys
 /// </summary>
 /// <param name="database"></param>
 /// <param name="pageSize"></param>
 /// <param name="pageOffset"></param>
 /// <returns></returns>
 public IList <RedisKey> GetAllKeys(int database = 0, int pageSize = 10, int pageOffset = 0)
 {
     return(_redis.GetServer(_redis.GetEndPoints()[0]).Keys(database, pageSize: pageSize, pageOffset: pageOffset).ToList());
 }
示例#19
0
        /// <summary>
        /// 返回模式匹配的所有键,影响性能,慎用!!!
        /// </summary>
        /// <param name="p_patternKey"></param>
        /// <returns></returns>
        public static IEnumerable <RedisKey> Keys(string p_patternKey)
        {
            var server = _muxer.GetServer(_muxer.GetEndPoints(true)[0]);

            return(server.Keys(_muxer.GetDatabase().Database, p_patternKey));
        }
示例#20
0
 /// <summary>
 /// 获取全部终结点
 /// </summary>
 /// <returns></returns>
 public EndPoint[] GetEndPoints()
 {
     EndPoint[] endpoints = _conn.GetEndPoints();
     return(endpoints);
 }
示例#21
0
 public IServer GetServer()
 {
     return(_connectionMultiplexer.GetServer(_connectionMultiplexer.GetEndPoints()[0]));
 }
示例#22
0
 public void Setup()
 {
     connection.GetServer(connection.GetEndPoints()[0]).FlushAllDatabases();
 }
示例#23
0
        public static IServer GetServer()
        {
            ConnectionMultiplexer connection = GetConnection();

            return(connection.GetServer(connection.GetEndPoints()[0]));
        }
示例#24
0
 internal static IServer GetServer(ConnectionMultiplexer conn)
 {
     return(conn.GetServer(conn.GetEndPoints()[0]));
 }
示例#25
0
        public static IServer GetFirstServer(this ConnectionMultiplexer redis)
        {
            var endpoint = redis?.GetEndPoints()?.FirstOrDefault();

            return(endpoint == null ? null : redis.GetServer(endpoint));
        }
示例#26
0
        public static IServer GetCurrentServer()
        {
            ConnectionMultiplexer _manager = Manager;

            return(_manager.GetServer(_manager.GetEndPoints()[0]));
        }
示例#27
0
        public string[] Keys(string pattern)
        {
            var redisServer = _redis.GetServer(_redis.GetEndPoints().First());

            return(redisServer.Keys(0, pattern).Select(x => (string)x).ToArray());
        }
示例#28
0
 public RankViewComponent(ConnectionMultiplexer redis)
 {
     _db     = redis.GetDatabase();
     _redis  = redis;
     _server = redis.GetServer(redis.GetEndPoints()[0]);
 }
示例#29
0
 public RedisRepository FlushAll()
 {
     _Connecter.GetServer(_Connecter.GetEndPoints()[0]).FlushAllDatabases();
     return(this);
 }
示例#30
0
        private IServer GetServer()
        {
            var endpoint = _redis.GetEndPoints();

            return(_redis.GetServer(endpoint.First()));
        }
示例#31
0
 public override string ToString()
 {
     return(String.Format("redis://{0}/{1}", String.Join(",", ServerPool.GetEndPoints().Select(x => reg.Replace(x.ToString(), String.Empty))), Db));
 }