Beispiel #1
0
        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();
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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]);
            }
        }