class Ollama::Documents::RedisCache

def [](key)

def [](key)
  JSON(redis.get(pre(key)), object_class: Ollama::Documents::Record)
end

def []=(key, value)

def []=(key, value)
  redis.set(pre(key), JSON(value))
end

def clear

def clear
  redis.scan_each(match: "#@prefix*") { |key| redis.del(key) }
  self
end

def delete(key)

def delete(key)
  redis.del(pre(key)) == 1
end

def each(&block)

def each(&block)
  redis.scan_each(match: "#@prefix*") { |key| block.(key, self[unpre(key)]) }
  self
end

def initialize(prefix:, url: ENV['REDIS_URL'])

def initialize(prefix:, url: ENV['REDIS_URL'])
  url or raise ArgumentError, 'require redis url'
  @prefix, @url = prefix, url
end

def key?(key)

def key?(key)
  !!redis.exists?(pre(key))
end

def pre(key)

def pre(key)
  [ @prefix, key ].join
end

def redis

def redis
  @redis ||= Redis.new(url: @url)
end

def size

def size
  s = 0
  redis.scan_each(match: "#@prefix*") { |key| s += 1 }
  s
end

def unpre(key)

def unpre(key)
  key.sub(/\A#@prefix/, '')
end