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(); }
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(); }