MM-59932: Migrate remaining caches to Redis (#27880)

- We introduce 2 new APIs:
1. Scan: this allows incremental iteration
without blocking the Redis server and is the
recommended way to iterate over keys. With this,
we have entirely removed the need for Keys.
2. RemoveMulti: this allows deletion of multiple
keys in a single operation which optimizes
network round trips.

- While here, we make a small improvement to
GetStatusFromCache, where we remove the shallow
copy which wasn't necessary because we always
serialize the data from the cache.
- We do not use Redis for session cache because of
frequent requests to iterate the entire cache which leads
to a lot of `SCAN` calls.
- Avoid broadcasting status update messages for Redis case.
- Setting cache expiry for status cache
- Removing .Set method altogether to prevent
any chances of setting an item with no expiry.

https://mattermost.atlassian.net/browse/MM-59932

```release-note
NONE
```
Этот коммит содержится в:
Agniva De Sarker
2024-08-13 14:18:25 +05:30
коммит произвёл GitHub
родитель e5842e67a8
Коммит a1012d33eb
19 изменённых файлов: 437 добавлений и 212 удалений

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

@@ -18,15 +18,16 @@ func TestNewCache(t *testing.T) {
size := 1
c, err := p.NewCache(&CacheOptions{
Size: size,
Size: size,
DefaultExpiry: 0,
})
require.NoError(t, err)
err = c.Set("key1", "val1")
err = c.SetWithDefaultExpiry("key1", "val1")
require.NoError(t, err)
err = c.Set("key2", "val2")
err = c.SetWithDefaultExpiry("key2", "val2")
require.NoError(t, err)
err = c.Set("key3", "val3")
err = c.SetWithDefaultExpiry("key3", "val3")
require.NoError(t, err)
})
@@ -35,15 +36,16 @@ func TestNewCache(t *testing.T) {
size := 1
c, err := p.NewCache(&CacheOptions{
Size: size,
Size: size,
DefaultExpiry: 0,
})
require.NoError(t, err)
err = c.Set("key1", "val1")
err = c.SetWithDefaultExpiry("key1", "val1")
require.NoError(t, err)
err = c.Set("key2", "val2")
err = c.SetWithDefaultExpiry("key2", "val2")
require.NoError(t, err)
err = c.Set("key3", "val3")
err = c.SetWithDefaultExpiry("key3", "val3")
require.NoError(t, err)
})
@@ -91,14 +93,15 @@ func TestNewCache_Striped(t *testing.T) {
Size: size,
Striped: true,
StripedBuckets: 1,
DefaultExpiry: 0,
})
require.NoError(t, err)
err = c.Set("key1", "val1")
err = c.SetWithDefaultExpiry("key1", "val1")
require.NoError(t, err)
err = c.Set("key2", "val2")
err = c.SetWithDefaultExpiry("key2", "val2")
require.NoError(t, err)
err = c.Set("key3", "val3")
err = c.SetWithDefaultExpiry("key3", "val3")
require.NoError(t, err)
})
@@ -110,14 +113,15 @@ func TestNewCache_Striped(t *testing.T) {
Size: size,
Striped: true,
StripedBuckets: 1,
DefaultExpiry: 0,
})
require.NoError(t, err)
err = c.Set("key1", "val1")
err = c.SetWithDefaultExpiry("key1", "val1")
require.NoError(t, err)
err = c.Set("key2", "val2")
err = c.SetWithDefaultExpiry("key2", "val2")
require.NoError(t, err)
err = c.Set("key3", "val3")
err = c.SetWithDefaultExpiry("key3", "val3")
require.NoError(t, err)
})