From b4e146fb6027a114dbb67e8fb52f462fdfaa198f Mon Sep 17 00:00:00 2001 From: Fijxu Date: Sun, 13 Apr 2025 02:05:13 -0400 Subject: [PATCH] redis: replace lib by jgaskins/redis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://github.com/jgaskins/redis It's faster and in active development, old one gave me this using a TCP connection: test 5.94k (168.34µs) (±56.73%) 144B/op fastest test 5.11k (195.76µs) (±58.89%) 144B/op fastest test 5.48k (182.33µs) (±73.39%) 144B/op fastest test 3.42k (292.56µs) (±66.19%) 144B/op fastest meanwhile, the jgaskins/redis one gives: test 6.96k (143.66µs) (±58.73%) 96.0B/op fastest test 6.36k (157.16µs) (±55.95%) 96.0B/op fastest test 7.06k (141.65µs) (±57.03%) 96.0B/op fastest --- config/config.example.yml | 3 +-- shard.lock | 21 +++++++++------------ shard.yml | 2 +- src/invidious/config.cr | 4 ++-- src/invidious/database/videos.cr | 17 ++++++++++------- 5 files changed, 23 insertions(+), 24 deletions(-) diff --git a/config/config.example.yml b/config/config.example.yml index 772e1a6a..33bda8cb 100644 --- a/config/config.example.yml +++ b/config/config.example.yml @@ -1072,8 +1072,7 @@ default_user_preferences: ## #extend_desc: false -# redis_url: 127.0.0.1:6379 -# redis_socket: /var/run/valkey/valkey.sock +# redis_url: redis://127.0.0.1:6379/0?initial_pool_size=1&max_pool_size=10&checkout_timeout=10&retry_attempts=2&retry_delay=0.5&max_idle_pool_size=50 # donation_url: "https://example.com/donate" # contact_url: "https://example.com/contact" # home_domain: "https://example.com/ diff --git a/shard.lock b/shard.lock index e4d8eeae..13636f78 100644 --- a/shard.lock +++ b/shard.lock @@ -2,15 +2,15 @@ version: 2.0 shards: ameba: git: https://github.com/crystal-ameba/ameba.git - version: 1.6.1 + version: 1.6.4 athena-negotiation: git: https://github.com/athena-framework/negotiation.git - version: 0.1.1 + version: 0.1.5 backtracer: git: https://github.com/sija/backtracer.cr.git - version: 1.2.2 + version: 1.2.4 db: git: https://github.com/crystal-lang/crystal-db.git @@ -20,13 +20,14 @@ shards: git: https://github.com/crystal-loot/exception_page.git version: 0.4.1 - inotify: - git: https://github.com/petoem/inotify.cr.git - version: 1.0.3 http_proxy: git: https://github.com/mamantoha/http_proxy.git version: 0.10.3 + inotify: + git: https://github.com/petoem/inotify.cr.git + version: 1.0.3 + kemal: git: https://github.com/kemalcr/kemal.git version: 1.6.0 @@ -35,10 +36,6 @@ shards: git: https://github.com/will/crystal-pg.git version: 0.28.0 - pool: - git: https://github.com/ysbaddaden/pool.git - version: 0.2.4 - protodec: git: https://github.com/iv-org/protodec.git version: 0.1.5 @@ -48,8 +45,8 @@ shards: version: 0.4.1 redis: - git: https://github.com/stefanwille/crystal-redis.git - version: 2.9.1 + git: https://github.com/jgaskins/redis.git + version: 0.11.3 spectator: git: https://github.com/icy-arctic-fox/spectator.git diff --git a/shard.yml b/shard.yml index fd61b6e9..bf2cf08e 100644 --- a/shard.yml +++ b/shard.yml @@ -25,7 +25,7 @@ dependencies: github: athena-framework/negotiation version: ~> 0.1.1 redis: - github: stefanwille/crystal-redis + github: jgaskins/redis inotify: github: petoem/inotify.cr version: 1.0.3 diff --git a/src/invidious/config.cr b/src/invidious/config.cr index eb77496a..23a7ca0d 100644 --- a/src/invidious/config.cr +++ b/src/invidious/config.cr @@ -107,8 +107,8 @@ class Config # Database configuration using 12-Factor "Database URL" syntax @[YAML::Field(converter: Preferences::URIConverter)] property database_url : URI = URI.parse("") - property redis_url : String? - property redis_socket : String? + @[YAML::Field(converter: Preferences::URIConverter)] + property redis_url : URI = URI.parse("") # Use polling to keep decryption function up to date property decrypt_polling : Bool = false # Used for crawling channels: threads should check all videos uploaded by a channel diff --git a/src/invidious/database/videos.cr b/src/invidious/database/videos.cr index 33d0a100..8c1fee36 100644 --- a/src/invidious/database/videos.cr +++ b/src/invidious/database/videos.cr @@ -97,21 +97,24 @@ module Invidious::Database::Videos end class Redis_ - @redis : Redis::PooledClient + @redis : Redis::Client def initialize - @redis = Redis::PooledClient.new(unixsocket: CONFIG.redis_socket || nil, url: CONFIG.redis_url || nil) + @redis = Redis::Client.new(CONFIG.redis_url) LOGGER.info "Video Cache: Using Redis compatible DB to store video cache" LOGGER.info "Connecting to Redis compatible DB" - if @redis.ping - LOGGER.info "Connected to Redis compatible DB via unix domain socket at '#{CONFIG.redis_socket}'" if CONFIG.redis_socket - LOGGER.info "Connected to Redis compatible DB via TCP socket at '#{CONFIG.redis_url}'" if CONFIG.redis_url + # #ping method is not available in this Redis library + # https://github.com/jgaskins/redis/issues/53 + # if @redis.ping + if @redis.run({"PING"}) == "PONG" + # LOGGER.info "Connected to Redis compatible DB via unix domain socket at '#{CONFIG.redis_socket}'" if CONFIG.redis_socket + LOGGER.info "Connected to Redis compatible DB at '#{CONFIG.redis_url}'" if CONFIG.redis_url end end def set(video : Video, expire_time) - @redis.set(video.id, video.info.to_json, expire_time) - @redis.set(video.id + ":time", video.updated, expire_time) + @redis.set(video.id, video.info.to_json, ex: expire_time) + @redis.set(video.id + ":time", video.updated.to_s, ex: expire_time) end def del(id : String)