Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commit 8106067

Browse files
committed
refactor(cron): clear cache in midinight & add expire option
1 parent ed98827 commit 8106067

File tree

6 files changed

+55
-2
lines changed

6 files changed

+55
-2
lines changed

config/config.exs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,11 @@ config :rihanna,
8181
producer_postgres_connection: {Ecto, GroupherServer.Repo}
8282

8383
# cron-like job scheduler
84-
config :groupher_server, Helper.Scheduler, jobs: []
84+
config :groupher_server, Helper.Scheduler,
85+
jobs: [
86+
# Every midnight
87+
{"@daily", {Helper.Scheduler, :clear_all_cache, []}}
88+
]
8589

8690
import_config "#{Mix.env()}.exs"
8791

lib/groupher_server/statistics/delegates/contribute.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ defmodule GroupherServer.Statistics.Delegate.Contribute do
8585
%Community{id: id}
8686
|> do_get_contributes()
8787
|> to_counts_digest(days: @community_contribute_days)
88-
|> done_and_cache(scope)
88+
|> done_and_cache(scope, expire: 60_000)
8989
end
9090

9191
defp update_contribute_record(%UserContribute{} = contribute) do

lib/helper/cache.ex

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,19 @@ defmodule Helper.Cache do
2727
Cachex.put(:site_cache, cache_key, cache_value)
2828
end
2929

30+
def put(cache_key, cache_value, expire: expire_time) do
31+
Cachex.put(:site_cache, cache_key, cache_value)
32+
Cachex.expire(:site_cache, cache_key, expire_time)
33+
end
34+
35+
@doc """
36+
clear all the cache
37+
## Example
38+
iex> Helper.Cache.clear()
39+
{:ok, 1}
40+
"""
41+
def clear_all(), do: Cachex.clear(:site_cache)
42+
3043
@doc """
3144
cache scope of community contributes digest
3245
"""

lib/helper/scheduler.ex

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,14 @@ defmodule Helper.Scheduler do
33
cron-like job scheduler
44
"""
55
use Quantum.Scheduler, otp_app: :groupher_server
6+
7+
alias Helper.Cache
8+
9+
@doc """
10+
clear all the cache in Cachex
11+
just in case the cache system broken
12+
"""
13+
def clear_all_cache do
14+
Cache.clear_all()
15+
end
616
end

lib/helper/utils.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,13 @@ defmodule Helper.Utils do
5252
# def done({:error, error}), do: {:error, error}
5353
def done(result), do: {:ok, result}
5454

55+
def done_and_cache(result, scope, expire: expire_time) do
56+
with {:ok, res} <- done(result) do
57+
Cache.put(scope, res, expire: expire_time)
58+
{:ok, res}
59+
end
60+
end
61+
5562
def done_and_cache(result, scope) do
5663
with {:ok, res} <- done(result) do
5764
Cache.put(scope, res)

test/helper/cache_test.exs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,24 @@ defmodule GroupherServer.Test.Helper.Cache do
2626
assert {:ok, true} = Cache.put("namespace.aaa.bbb", [1, %{a: "2"}])
2727
assert {:ok, [1, %{a: "2"}]} = Cache.get("namespace.aaa.bbb")
2828
end
29+
30+
@tag :wip2
31+
test "cache can be clear" do
32+
assert {:ok, true} = Cache.put(:data, "value")
33+
assert {:ok, "value"} = Cache.get(:data)
34+
35+
assert {:ok, _} = Cache.clear_all()
36+
assert {:error, nil} = Cache.get(:data)
37+
end
38+
39+
@tag :wip2
40+
test "cache expire should work" do
41+
assert {:ok, true} = Cache.put(:data, "value", expire: 1000)
42+
assert {:ok, "value"} = Cache.get(:data)
43+
Process.sleep(900)
44+
assert {:ok, "value"} = Cache.get(:data)
45+
Process.sleep(1200)
46+
assert {:error, nil} = Cache.get(:data)
47+
end
2948
end
3049
end

0 commit comments

Comments
 (0)