Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(db/redis): cache CPE#Titles #186

Merged
merged 1 commit into from
Jun 25, 2024
Merged

feat(db/redis): cache CPE#Titles #186

merged 1 commit into from
Jun 25, 2024

Conversation

MaineK00n
Copy link
Collaborator

@MaineK00n MaineK00n commented Jun 21, 2024

If this Pull Request is work in progress, Add a prefix of “[WIP]” in the title.

What did you implement:

The current implementation retrieves 1508985 elements each time, every time.
It is known that the performance of SMEMBERS deteriorates when the set size becomes large.
In the case of this key, since the elements are determined at the time of fetching, performance can be improved by caching or other methods.

ts, err := r.conn.SMembers(ctx, titleListKey).Result()

$ go-cpe-dictionary fetch nvd --dbtype redis --dbpath "redis://127.0.0.1:6379/1"
$ go-cpe-dictionary fetch jvn --dbtype redis --dbpath "redis://127.0.0.1:6379/1"
$ redis-cli -n 1 SCARD CPE#Titles
(integer) 1508985

Type of change

  • New feature (non-breaking change which adds functionality)

How Has This Been Tested?

before

$ docker run --rm --name redis -d -p 127.0.0.1:6379:6379 redis
$ go-cpe-dictionary fetch nvd --dbtype redis --dbpath "redis://127.0.0.1:6379/1"
$ go-cpe-dictionary fetch jvn --dbtype redis --dbpath "redis://127.0.0.1:6379/1"
$ go-cpe-dictionary fetch vuls --dbtype redis --dbpath "redis://127.0.0.1:6379/1"
$ go-cpe-dictionary server --dbtype redis --dbpath "redis://127.0.0.1:6379/1"
INFO[06-24|17:30:24] Starting HTTP Server... 
INFO[06-24|17:30:24] Listening...                             URL=127.0.0.1:1328

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.12.0
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on 127.0.0.1:1328
EROR[06-24|17:31:35] Failed to GetSimilarCpesByTitle          err="Failed to SMembers Titles. err: read tcp 127.0.0.1:60800->127.0.0.1:6379: i/o timeout"
EROR[06-24|17:31:35] Failed to GetSimilarCpesByTitle          err="Failed to SMembers Titles. err: read tcp 127.0.0.1:60736->127.0.0.1:6379: i/o timeout"
{"time":"2024-06-24T17:31:35.926991918+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":500,"error":"","latency":14724941195,"latency_human":"14.724941195s","bytes_in":60,"bytes_out":3}
EROR[06-24|17:31:35] Failed to GetSimilarCpesByTitle          err="Failed to SMembers Titles. err: read tcp 127.0.0.1:60752->127.0.0.1:6379: i/o timeout"
{"time":"2024-06-24T17:31:35.927014502+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":500,"error":"","latency":14717912835,"latency_human":"14.717912835s","bytes_in":60,"bytes_out":3}
{"time":"2024-06-24T17:31:35.92705408+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":500,"error":"","latency":14724769948,"latency_human":"14.724769948s","bytes_in":60,"bytes_out":3}
EROR[06-24|17:31:35] Failed to GetSimilarCpesByTitle          err="Failed to SMembers Titles. err: read tcp 127.0.0.1:60732->127.0.0.1:6379: i/o timeout"
{"time":"2024-06-24T17:31:35.927134875+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":500,"error":"","latency":14722638465,"latency_human":"14.722638465s","bytes_in":60,"bytes_out":3}
EROR[06-24|17:31:35] Failed to GetSimilarCpesByTitle          err="Failed to SMembers Titles. err: read tcp 127.0.0.1:60780->127.0.0.1:6379: i/o timeout"
{"time":"2024-06-24T17:31:35.92725575+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":500,"error":"","latency":14718917429,"latency_human":"14.718917429s","bytes_in":60,"bytes_out":3}
EROR[06-24|17:31:35] Failed to GetSimilarCpesByTitle          err="Failed to SMembers Titles. err: read tcp 127.0.0.1:60746->127.0.0.1:6379: i/o timeout"
{"time":"2024-06-24T17:31:35.927377508+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":500,"error":"","latency":14720863920,"latency_human":"14.72086392s","bytes_in":60,"bytes_out":3}
EROR[06-24|17:31:35] Failed to GetSimilarCpesByTitle          err="Failed to SMembers Titles. err: read tcp 127.0.0.1:60804->127.0.0.1:6379: i/o timeout"
{"time":"2024-06-24T17:31:35.927452431+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":500,"error":"","latency":14719177314,"latency_human":"14.719177314s","bytes_in":60,"bytes_out":3}
EROR[06-24|17:31:35] Failed to GetSimilarCpesByTitle          err="Failed to SMembers Titles. err: read tcp 127.0.0.1:60756->127.0.0.1:6379: i/o timeout"
{"time":"2024-06-24T17:31:35.927520354+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":500,"error":"","latency":14719188097,"latency_human":"14.719188097s","bytes_in":60,"bytes_out":3}
EROR[06-24|17:31:35] Failed to GetSimilarCpesByTitle          err="Failed to SMembers Titles. err: read tcp 127.0.0.1:60786->127.0.0.1:6379: i/o timeout"
{"time":"2024-06-24T17:31:35.927574646+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":500,"error":"","latency":14717735652,"latency_human":"14.717735652s","bytes_in":60,"bytes_out":3}
EROR[06-24|17:31:35] Failed to GetSimilarCpesByTitle          err="Failed to SMembers Titles. err: read tcp 127.0.0.1:60772->127.0.0.1:6379: i/o timeout"
{"time":"2024-06-24T17:31:35.92760862+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":500,"error":"","latency":14724798790,"latency_human":"14.72479879s","bytes_in":60,"bytes_out":3}
{"time":"2024-06-24T17:33:55.689342525+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":5857070485,"latency_human":"5.857070485s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T17:33:55.69483099+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":5863814061,"latency_human":"5.863814061s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T17:33:55.862540414+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":6030049060,"latency_human":"6.03004906s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T17:33:55.952854161+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":6122338272,"latency_human":"6.122338272s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T17:33:55.956458502+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":6125630660,"latency_human":"6.12563066s","bytes_in":60,"bytes_out":976}

$ seq 1 15 | xargs -L 1 -P 10 curl -s -X POST -H "Accept: application/json" -H "Content-type: application/json" -d '{"query": "Go Programming Language amd64 go1.30.3", "n": 10}' http://127.0.0.1:1328/cpes/fuzzysearch
[]
[]
[]
[]
[]
[]
[]
[]
[]
[]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.5","cpes":["cpe:/a:golang:go:1.13.5::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.5","cpes":["cpe:/a:golang:go:1.13.5::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.5","cpes":["cpe:/a:golang:go:1.13.5::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.5","cpes":["cpe:/a:golang:go:1.13.5::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.5","cpes":["cpe:/a:golang:go:1.13.5::~~~~amd64~"]}]

after

$ docker run --rm --name redis -d -p 127.0.0.1:6379:6379 redis
$ go-cpe-dictionary fetch nvd --dbtype redis --dbpath "redis://127.0.0.1:6379/1"
$ go-cpe-dictionary fetch jvn --dbtype redis --dbpath "redis://127.0.0.1:6379/1"
$ go-cpe-dictionary fetch vuls --dbtype redis --dbpath "redis://127.0.0.1:6379/1"
$ go-cpe-dictionary server --dbtype redis --dbpath "redis://127.0.0.1:6379/1"
INFO[06-24|18:49:56] Starting HTTP Server... 
INFO[06-24|18:49:56] Listening...                             URL=127.0.0.1:1328

   ____    __
  / __/___/ /  ___
 / _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.12.0
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
                                    O\
⇨ http server started on 127.0.0.1:1328
{"time":"2024-06-24T18:50:05.228335437+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":4178279897,"latency_human":"4.178279897s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:50:05.229331906+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":4182048275,"latency_human":"4.182048275s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:50:05.239154124+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":4190775346,"latency_human":"4.190775346s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:50:05.364338898+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":4314164634,"latency_human":"4.314164634s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:50:05.433170899+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":4386317040,"latency_human":"4.38631704s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:50:05.434912404+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":4386733927,"latency_human":"4.386733927s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:50:05.45968456+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":4410588061,"latency_human":"4.410588061s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:50:05.467634951+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":4419776868,"latency_human":"4.419776868s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:50:05.494422052+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":4443178158,"latency_human":"4.443178158s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:50:05.550701528+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":4499094486,"latency_human":"4.499094486s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:52:23.423100697+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":3188339849,"latency_human":"3.188339849s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:52:23.460960475+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":3224016443,"latency_human":"3.224016443s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:52:23.495668361+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":3259948302,"latency_human":"3.259948302s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:52:23.495995184+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":3261761043,"latency_human":"3.261761043s","bytes_in":60,"bytes_out":976}
{"time":"2024-06-24T18:52:23.517335508+09:00","id":"","remote_ip":"127.0.0.1","host":"127.0.0.1:1328","method":"POST","uri":"/cpes/fuzzysearch","user_agent":"curl/7.81.0","status":200,"error":"","latency":3282865558,"latency_human":"3.282865558s","bytes_in":60,"bytes_out":976}

$ seq 1 15 | xargs -L 1 -P 10 curl -s -X POST -H "Accept: application/json" -H "Content-type: application/json" -d '{"query": "Go Programming Language amd64 go1.30.3", "n": 10}' http://127.0.0.1:1328/cpes/fuzzysearch
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]
[{"title":"Go Programming Language amd64 go1.3.3","cpes":["cpe:/a:golang:go:1.3.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.3","cpes":["cpe:/a:golang:go:1.13.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.13","cpes":["cpe:/a:golang:go:1.13.13::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3","cpes":["cpe:/a:golang:go:1.3.0::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.2","cpes":["cpe:/a:golang:go:1.3.2::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.3.1","cpes":["cpe:/a:golang:go:1.3.1::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.20.3","cpes":["cpe:/a:golang:go:1.20.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.10.3","cpes":["cpe:/a:golang:go:1.10.3::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.10","cpes":["cpe:/a:golang:go:1.13.10::~~~~amd64~"]},{"title":"Go Programming Language amd64 go1.13.7","cpes":["cpe:/a:golang:go:1.13.7::~~~~amd64~"]}]

Checklist:

You don't have to satisfy all of the following.

  • Write tests
  • Write documentation
  • Check that there aren't other open pull requests for the same issue/feature
  • Format your source code by make fmt
  • Pass the test by make test
  • Provide verification config / commands
  • Enable "Allow edits from maintainers" for this PR
  • Update the messages below

Is this ready for review?: YES

Reference

@MaineK00n MaineK00n self-assigned this Jun 21, 2024
@MaineK00n MaineK00n force-pushed the MaineK00n/redis branch 3 times, most recently from a3f4c6c to ebb59c7 Compare June 24, 2024 08:22
@MaineK00n
Copy link
Collaborator Author

If you want to enable zstd

:100644 100644 c8dd734 0000000 M	db/redis.go
:100644 100644 74191c5 0000000 M	go.mod
:100644 100644 f7c7b29 0000000 M	go.sum

diff --git a/db/redis.go b/db/redis.go
index c8dd734..b549fc9 100644
--- a/db/redis.go
+++ b/db/redis.go
@@ -1,6 +1,7 @@
 package db
 
 import (
+	"bytes"
 	"context"
 	"encoding/json"
 	"errors"
@@ -12,6 +13,7 @@ import (
 	"github.com/cheggaaa/pb/v3"
 	"github.com/go-redis/redis/v8"
 	"github.com/hbollon/go-edlib"
+	"github.com/klauspost/compress/zstd"
 	"github.com/spf13/viper"
 	"golang.org/x/xerrors"
 
@@ -256,7 +258,13 @@ func (r *RedisDriver) GetSimilarCpesByTitle(query string, n int, algorithm edlib
 	var ts []string
 	bs, err := r.conn.Get(ctx, titleListCacheKey).Bytes()
 	if err == nil {
-		if err := json.Unmarshal(bs, &ts); err != nil {
+		d, err := zstd.NewReader(bytes.NewReader(bs))
+		if err != nil {
+			return nil, xerrors.Errorf("Failed to new zstd reader. err: %w", err)
+		}
+		defer d.Close()
+
+		if err := json.NewDecoder(d).Decode(&ts); err != nil {
 			return nil, xerrors.Errorf("Failed to Unmarshal JSON. err: %w", err)
 		}
 	} else {
@@ -402,7 +410,13 @@ func (r *RedisDriver) InsertCpes(fetchType models.FetchType, cpes models.Fetched
 	if err != nil {
 		return xerrors.Errorf("Failed to Marshal JSON. err: %w", err)
 	}
-	if err := r.conn.Set(ctx, titleListCacheKey, string(bs), 0).Err(); err != nil {
+	e, err := zstd.NewWriter(nil, zstd.WithEncoderLevel(zstd.SpeedBestCompression))
+	if err != nil {
+		return xerrors.Errorf("Failed to new zstd writer. err: %w", err)
+	}
+	defer e.Close()
+
+	if err := r.conn.Set(ctx, titleListCacheKey, e.EncodeAll(bs, make([]byte, 0, len(bs))), 0).Err(); err != nil {
 		return xerrors.Errorf("Failed to SET Titles Cache. err: %w", err)
 	}
 	bar.Increment()
diff --git a/go.mod b/go.mod
index 74191c5..70378ee 100644
--- a/go.mod
+++ b/go.mod
@@ -11,6 +11,7 @@ require (
 	github.com/google/go-cmp v0.6.0
 	github.com/hbollon/go-edlib v1.6.0
 	github.com/inconshreveable/log15 v3.0.0-testing.5+incompatible
+	github.com/klauspost/compress v1.17.9
 	github.com/knqyf263/go-cpe v0.0.0-20201213041631-54f6ab28673f
 	github.com/labstack/echo/v4 v4.12.0
 	github.com/mitchellh/go-homedir v1.1.0
diff --git a/go.sum b/go.sum
index f7c7b29..f973494 100644
--- a/go.sum
+++ b/go.sum
@@ -66,6 +66,8 @@ github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkr
 github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
 github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
+github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
+github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
 github.com/knqyf263/go-cpe v0.0.0-20201213041631-54f6ab28673f h1:vZP1dTKPOR7zSAbgqNbnTnYX77+gj3eu0QK+UmANZqE=
 github.com/knqyf263/go-cpe v0.0.0-20201213041631-54f6ab28673f/go.mod h1:4cVhzV/TndScEg4xMtSo3TTz3cMFhEAvhAA4igAyXZY=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=

@MaineK00n MaineK00n marked this pull request as ready for review June 24, 2024 09:29
@MaineK00n MaineK00n requested a review from shino June 24, 2024 09:30
@shino
Copy link
Contributor

shino commented Jun 25, 2024

Some measurement on the latency of GET CPE#Cache#Tiles: ~20msec by slowlog

% taskset -c 5 redis-server
% for i in {1..50}; do taskset -c 1 redis-cli get CPE#Cache#Titles > /dev/null ; done

% redis-cli --csv slowlog get 50 | sed 's/"",/\n/g' | grep 'CPE#Cache#Titles' | cut -d, -f3 | histogram.py -b 30 -m 10000 -x 90000
# NumSamples = 50; Min = 10000.00; Max = 90000.00
# Mean = 20371.620000; Variance = 92915706.475600; SD = 9639.279355; Median 18815.000000
# each ∎ represents a count of 1
10000.0000 - 12666.6667 [     0]:
12666.6667 - 15333.3333 [     0]:
15333.3333 - 18000.0000 [    14]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎
18000.0000 - 20666.6667 [    30]: ∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎∎
20666.6667 - 23333.3333 [     4]: ∎∎∎∎
23333.3333 - 26000.0000 [     1]: ∎
26000.0000 - 28666.6667 [     0]:
28666.6667 - 31333.3333 [     0]:
31333.3333 - 34000.0000 [     0]:
34000.0000 - 36666.6667 [     0]:
36666.6667 - 39333.3333 [     0]:
39333.3333 - 42000.0000 [     0]:
42000.0000 - 44666.6667 [     0]:
44666.6667 - 47333.3333 [     0]:
47333.3333 - 50000.0000 [     0]:
50000.0000 - 52666.6667 [     0]:
52666.6667 - 55333.3333 [     0]:
55333.3333 - 58000.0000 [     0]:
58000.0000 - 60666.6667 [     0]:
60666.6667 - 63333.3333 [     0]:
63333.3333 - 66000.0000 [     0]:
66000.0000 - 68666.6667 [     0]:
68666.6667 - 71333.3333 [     0]:
71333.3333 - 74000.0000 [     0]:
74000.0000 - 76666.6667 [     0]:
76666.6667 - 79333.3333 [     0]:
79333.3333 - 82000.0000 [     0]:
82000.0000 - 84666.6667 [     0]:
84666.6667 - 87333.3333 [     1]: ∎
87333.3333 - 90000.0000 [     0]:

Copy link
Contributor

@shino shino left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Absolutely Fantastic!!!

@MaineK00n MaineK00n merged commit 92597e2 into master Jun 25, 2024
4 of 5 checks passed
@MaineK00n MaineK00n deleted the MaineK00n/redis branch June 25, 2024 05:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants