static void Main(string[] args) { var host = args.Length > 0 ? args[0] : "localhost"; var port = args.Length > 1 ? int.Parse(args[1]) : 6379; var redisClient = new RedisClient(host, port); var before = DateTime.Now; for (var i = 0; i < Iterations; i++) { var key = KeyMaster + i; redisClient.Set(key, ValueMaster); //if (i % LogEveryTimes == 0) // Console.WriteLine("Time taken at {0}: {1}ms", i, (DateTime.Now - before).TotalMilliseconds); } for (int i = 0; i < Iterations; i++) { var key = KeyMaster + i; redisClient.Get<string>(key); //if (i % LogEveryTimes == 0) // Console.WriteLine("Time taken at {0}: {1}ms", i, (DateTime.Now - before).TotalMilliseconds); } Console.WriteLine("Total Time Taken: {0}ms", (DateTime.Now - before).TotalMilliseconds); }
/// <summary> /// 汇总输出 /// </summary> public static void OutPutData() { string host = "localhost"; using (RedisClient redisClient = new RedisClient(host)) { var locateCount = redisClient.ZCard("AllLocates"); var allLocateData = redisClient.ZRange("AllLocates", 0, (int)locateCount); List<string> allLocate = new List<string>(); for (int i = 0; i < allLocateData.Length; i++) { allLocate.Add(System.Text.Encoding.UTF8.GetString(allLocateData[i])); } allLocate = allLocate.OrderBy(p => p).ToList(); Console.WriteLine("开始输出时间序列数据"); FileStream fs = new FileStream(OutputPath, FileMode.Create); StreamWriter sw = new StreamWriter(fs, Encoding.UTF8); long total = 0; for (int h = 0; h < 24; h++) { for (int m = 0; m < 60; m += 5) { var pre = string.Format("2014-09-07-{0:D2}:{1:D2}", h, m); Console.WriteLine(string.Format("------------时段:{0}------------", pre)); for (int i = 0; i < allLocate.Count; i++) { string key = pre + "@" + allLocate[i]; var value = redisClient.Get(key); string count = (value == null ? "0" : System.Text.Encoding.Default.GetString(value)); total += int.Parse(count); sw.WriteLine(string.Format("{0},{1},{2}", pre, allLocate[i], count)); } } } sw.Close(); fs.Close(); Console.WriteLine(string.Format("------------总和:{0}------------", total)); } }
public RedisLock(RedisClient redisClient, string key, TimeSpan? timeOut) { this.redisClient = redisClient; this.key = key; ExecExtensions.RetryUntilTrue( () => { //This pattern is taken from the redis command for SETNX http://redis.io/commands/setnx //Calculate a unix time for when the lock should expire TimeSpan realSpan = timeOut ?? new TimeSpan(365, 0, 0, 0); //if nothing is passed in the timeout hold for a year DateTime expireTime = DateTime.UtcNow.Add(realSpan); string lockString = (expireTime.ToUnixTimeMs() + 1).ToString(); //Try to set the lock, if it does not exist this will succeed and the lock is obtained var nx = redisClient.SetEntryIfNotExists(key, lockString); if (nx) return true; //If we've gotten here then a key for the lock is present. This could be because the lock is //correctly acquired or it could be because a client that had acquired the lock crashed (or didn't release it properly). //Therefore we need to get the value of the lock to see when it should expire string lockExpireString = redisClient.Get<string>(key); long lockExpireTime; if (!long.TryParse(lockExpireString, out lockExpireTime)) return false; //If the expire time is greater than the current time then we can't let the lock go yet if (lockExpireTime > DateTime.UtcNow.ToUnixTimeMs()) return false; //If the expire time is less than the current time then it wasn't released properly and we can attempt to //acquire the lock. This is done by setting the lock to our timeout string AND checking to make sure //that what is returned is the old timeout string in order to account for a possible race condition. return redisClient.GetAndSetEntry(key, lockString) == lockExpireString; }, timeOut ); }