public void RemoveEvent(NewsfeedEventModel entry, IEnumerable <string> followers)
        {
            var activityEntry = MapToActivity(entry);
            var keys          = MapRedisKeys(entry.ReferencePostId, followers);
            var isPostRemoval = entry.ActionType == NewsfeedActionType.wallpost;


            var transaction = StackExchangeRedisConnectionProvider.GetTransaction();

            if (isPostRemoval)
            {
                foreach (var key in keys)
                {
                    transaction.SetRemoveAsync(key.PostFeedKey, entry.ReferencePostId);
                    transaction.KeyDeleteAsync(key.PostActionsKey);
                }
            }
            else
            {
                foreach (var key in keys)
                {
                    transaction.SortedSetDecrementAsync(key.PostActionsKey, activityEntry, 1);
                    transaction.SortedSetRemoveRangeByScoreAsync(key.PostActionsKey, -10, 0);
                }
            }
            transaction.Execute();
        }
예제 #2
0
        public void RefreshGroupWall(string groupId, IEnumerable <string> postIds)
        {
            var key         = GetEntryKey(FeedPrefix, groupId);
            var transaction = StackExchangeRedisConnectionProvider.GetTransaction();

            foreach (var postId in postIds)
            {
                transaction.SetAddAsync(key, postId);
            }
            transaction.Execute();
        }
        public void AddEvent(NewsfeedEventModel entry, IEnumerable <string> followers)
        {
            var activityEntry = MapToActivity(entry);
            var keys          = MapRedisKeys(entry.ReferencePostId, followers);

            var transaction = StackExchangeRedisConnectionProvider.GetTransaction();

            foreach (var key in keys)
            {
                transaction.SetAddAsync(key.PostFeedKey, entry.ReferencePostId);
                transaction.SortedSetIncrementAsync(key.PostActionsKey, activityEntry, 1);
            }
            transaction.Execute();
        }
        public void UpdateFeed(string userId, IEnumerable <NewsfeedEventModel> events)
        {
            var feedKey          = GetEntryKey(FeedPrefix, userId);
            var server           = StackExchangeRedisConnectionProvider.GetServer();
            var existingFeedKeys = server.Keys(pattern: feedKey).Select(p => (RedisKey)p).ToArray();

            var transaction = StackExchangeRedisConnectionProvider.GetTransaction();

            transaction.KeyDeleteAsync(existingFeedKeys);

            foreach (var userEvent in events)
            {
                var activityEntry = MapToActivity(userEvent);
                var actionKey     = GetEntryKey(FeedPrefix, string.Concat(userId, ":", userEvent.ReferencePostId));
                transaction.SetAddAsync(feedKey, userEvent.ReferencePostId);
                transaction.SortedSetIncrementAsync(actionKey, activityEntry, 1);
            }
            transaction.Execute();
        }