Adding caching to get channel member (#5518)

Этот коммит содержится в:
Christopher Speller
2017-02-24 09:15:36 -05:00
коммит произвёл Corey Hulen
родитель 7fc5dc236a
Коммит ba028ed74b
8 изменённых файлов: 67 добавлений и 13 удалений

Просмотреть файл

@@ -28,6 +28,9 @@ const (
ALL_CHANNEL_MEMBERS_NOTIFY_PROPS_FOR_CHANNEL_CACHE_SIZE = model.SESSION_CACHE_SIZE
ALL_CHANNEL_MEMBERS_NOTIFY_PROPS_FOR_CHANNEL_CACHE_SEC = 1800 // 30 mins
CHANNEL_MEMBER_CACHE_SIZE = model.SESSION_CACHE_SIZE
CHANNEL_MEMBER_CACHE_SEC = 900 // 15 mins
CHANNEL_MEMBERS_COUNTS_CACHE_SIZE = model.CHANNEL_CACHE_SIZE
CHANNEL_MEMBERS_COUNTS_CACHE_SEC = 1800 // 30 mins
@@ -43,6 +46,7 @@ var allChannelMembersForUserCache = utils.NewLru(ALL_CHANNEL_MEMBERS_FOR_USER_CA
var allChannelMembersNotifyPropsForChannelCache = utils.NewLru(ALL_CHANNEL_MEMBERS_NOTIFY_PROPS_FOR_CHANNEL_CACHE_SIZE)
var channelCache = utils.NewLru(model.CHANNEL_CACHE_SIZE)
var channelByNameCache = utils.NewLru(model.CHANNEL_CACHE_SIZE)
var channelMemberCache = utils.NewLru(CHANNEL_MEMBER_CACHE_SIZE)
func ClearChannelCaches() {
channelMemberCountsCache.Purge()
@@ -50,6 +54,7 @@ func ClearChannelCaches() {
allChannelMembersNotifyPropsForChannelCache.Purge()
channelCache.Purge()
channelByNameCache.Purge()
channelMemberCache.Purge()
}
func NewSqlChannelStore(sqlStore *SqlStore) ChannelStore {
@@ -776,11 +781,36 @@ func (s SqlChannelStore) GetMembers(channelId string, offset, limit int) StoreCh
return storeChannel
}
func (s SqlChannelStore) GetMember(channelId string, userId string) StoreChannel {
func (s SqlChannelStore) InvalidateMember(channelId string, userId string) {
channelMemberCache.Remove(channelId + userId)
}
func (s SqlChannelStore) GetMember(channelId string, userId string, allowFromCache bool) StoreChannel {
storeChannel := make(StoreChannel, 1)
go func() {
result := StoreResult{}
metrics := einterfaces.GetMetricsInterface()
if allowFromCache {
if cacheItem, ok := channelMemberCache.Get(channelId + userId); ok {
if metrics != nil {
metrics.IncrementMemCacheHitCounter("Channel Member")
}
result.Data = cacheItem.(*model.ChannelMember)
storeChannel <- result
close(storeChannel)
return
} else {
if metrics != nil {
metrics.IncrementMemCacheMissCounter("Channel Member")
}
}
} else {
if metrics != nil {
metrics.IncrementMemCacheMissCounter("Channel Member")
}
}
var member model.ChannelMember
@@ -792,6 +822,8 @@ func (s SqlChannelStore) GetMember(channelId string, userId string) StoreChannel
}
} else {
result.Data = &member
channelMemberCache.AddWithExpiresInSecs(channelId+userId, &member, CHANNEL_MEMBER_CACHE_SEC)
}
storeChannel <- result