public void TestHash() { ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(RedisServer.GetConnectionString()); Assert.NotNull(redis); IDatabase db = redis.GetDatabase(); Assert.NotNull(db); // 테스트를 위해 일단 키를 삭제 const string key = "test:worker:info:w12345"; db.KeyDelete(key); List <HashEntry> expectedValues = new List <HashEntry> { new HashEntry("Name", wi.Name), new HashEntry("LocationX", wi.Longitude), new HashEntry("LocationY", wi.Latitude), new HashEntry("UpdateTime", wi.UpdateTime), new HashEntry("IsOnline", wi.IsOnline) }; // 해시 엔트리 추가 db.HashSet(key, expectedValues.ToArray()); // 해시 엔트리 획득 HashEntry[] actualValues = db.HashGetAll(key); Assert.Equal(expectedValues, actualValues); // 특정 해시 엔트리 값 변경 expectedValues[3] = new HashEntry("UpdateTime", $"{DateTime.Now:yyyyMMddhhmmss}"); db.HashSet(key, "UpdateTime", expectedValues[3].Value); actualValues = db.HashGetAll(key); Assert.Equal(expectedValues, actualValues); // 특정 해시 엔트리 삭제 expectedValues.RemoveAt(0); db.HashDelete(key, "Name"); actualValues = db.HashGetAll(key); Assert.Equal(expectedValues, actualValues); }
public void TestTransaction() { ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(RedisServer.GetConnectionString()); Assert.NotNull(redis); IDatabase db = redis.GetDatabase(); Assert.NotNull(db); // '배송원 정보'와 '배송원 정보 동기화 시간'은 키가 따로 있음 // '배송원 정보 동기화 시간'을 먼저 조회한 다음, // 이 값을 기준으로 '배송원 정보'를 얻으려고 하는데, // 이때 다른 서버 또는 쓰레드에서 먼저 배송원 정보를 업데이트 해 버리면? // 해결책은 트랜잭션 처리를 도입하는 것 var tran = db.CreateTransaction(); }
public void TestList() { ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(RedisServer.GetConnectionString()); Assert.NotNull(redis); IDatabase db = redis.GetDatabase(); Assert.NotNull(db); // 테스트를 위해 일단 키를 삭제 const string key = "test:worker:payments:w12345"; db.KeyDelete(key); // 리스트 값 추가 db.ListRightPush(key, expectedValues.ToArray()); // 리스트 값 획득해서 검증 RedisValue[] actualValues = db.ListRange(key); Assert.Equal(expectedValues, actualValues); // 리스트 왼쪽 아이템 삭제 및 추가 RedisValue item = db.ListLeftPop(key); db.ListLeftPush(key, item); actualValues = db.ListRange(key); Assert.Equal(expectedValues, actualValues); // 리스트 오른쪽에 아이템 추가 expectedValues.Add("None"); db.ListRightPush(key, "None"); actualValues = db.ListRange(key); Assert.Equal(expectedValues, actualValues); // 특정 아이템 삭제 expectedValues.Remove("MannaPoint"); db.ListRemove(key, "MannaPoint"); actualValues = db.ListRange(key); Assert.Equal(expectedValues, actualValues); }
public void TestString() { ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(RedisServer.GetConnectionString()); Assert.NotNull(redis); IDatabase db = redis.GetDatabase(); Assert.NotNull(db); const string key = "test:worker:name:w12345"; db.KeyDelete(key); const string expectedValue = "Edward.MoonHwan.Lee"; db.StringSet(key, expectedValue); string actualValue = db.StringGet(key); Assert.Equal(expectedValue, actualValue); }
public void TestSortedSet() { ConnectionMultiplexer redis = ConnectionMultiplexer.Connect(RedisServer.GetConnectionString()); Assert.NotNull(redis); IDatabase db = redis.GetDatabase(); Assert.NotNull(db); RedisKey key = "sortedset-test"; RedisValue[] members = new RedisValue[] { "W00001", "W00002", "W00003", "W00004" }; double[] scores = new double[] { 1, 3, 2, 4 }; // // 멤버 모두 삭제 // db.SortedSetRemove(key, members); // // 단일 멤버 추가, 스코어 변경 테스트 // // 단일 멤버 추가 bool result = db.SortedSetAdd(key, members[0], scores[0]); Assert.True(result); // 단일 멤버 스코어 변경 (이때 메서드의 리턴값은 false) scores[0] = 5; result = db.SortedSetAdd(key, members[0], scores[0]); Assert.False(result); // 멤버 스코어 값 확인 double?actualScore = db.SortedSetScore(key, members[0]); Assert.True(actualScore != null); Assert.Equal(scores[0], actualScore); // // 다중 멤버 추가 // for (int i = 1; i < members.Length; i++) { result = db.SortedSetAdd(key, members[i], scores[i]); Assert.True(result); } // // Rank로 검색 // { RedisValue[] values = db.SortedSetRangeByRank(key); Assert.Equal(4, values.Length); Assert.Equal(members[2], values[0]); Assert.Equal(members[1], values[1]); Assert.Equal(members[3], values[2]); Assert.Equal(members[0], values[3]); } // // Score로 검색 // { RedisValue[] values = db.SortedSetRangeByScore(key, scores[3]); Assert.Equal(2, values.Length); Assert.Equal(members[3], values[0]); Assert.Equal(members[0], values[1]); } }