Class: DiscordRDA::EntityCache
- Inherits:
-
Object
- Object
- DiscordRDA::EntityCache
- Defined in:
- lib/discord_rda/cache/entity_cache.rb
Overview
Typed entity cache with automatic invalidation. Provides methods for caching and retrieving Discord entities.
Constant Summary collapse
- TTL =
Entity TTLs in seconds
{ user: 300, guild: 60, channel: 300, message: 60, role: 300, member: 120 }.freeze
Instance Attribute Summary collapse
-
#logger ⇒ Logger
readonly
Logger instance.
-
#store ⇒ CacheStore
readonly
Cache store.
Instance Method Summary collapse
-
#cache_channel(channel) ⇒ void
Cache a channel.
-
#cache_guild(guild) ⇒ void
Cache a guild.
-
#cache_member(member, guild_id) ⇒ void
Cache a member.
-
#cache_message(message) ⇒ void
Cache a message.
-
#cache_role(role) ⇒ void
Cache a role.
-
#cache_user(user) ⇒ void
Cache a user.
-
#channel(channel_id) ⇒ Channel?
Get a cached channel.
-
#clear ⇒ void
Clear all cached entities.
-
#guild(guild_id) ⇒ Guild?
Get a cached guild.
-
#initialize(store, logger: nil) ⇒ EntityCache
constructor
Initialize entity cache.
-
#invalidate(type, id) ⇒ void
Invalidate an entity.
-
#invalidate_guild(guild_id) ⇒ void
Invalidate by guild ID.
-
#member(user_id, guild_id) ⇒ Member?
Get a cached member.
-
#message(message_id) ⇒ Message?
Get a cached message.
-
#role(role_id) ⇒ Role?
Get a cached role.
-
#stats ⇒ Hash
Get cache statistics.
-
#user(user_id) ⇒ User?
Get a cached user.
Constructor Details
#initialize(store, logger: nil) ⇒ EntityCache
Initialize entity cache
27 28 29 30 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 27 def initialize(store, logger: nil) @store = store @logger = logger end |
Instance Attribute Details
#logger ⇒ Logger (readonly)
Returns Logger instance.
12 13 14 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 12 def logger @logger end |
#store ⇒ CacheStore (readonly)
Returns Cache store.
9 10 11 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 9 def store @store end |
Instance Method Details
#cache_channel(channel) ⇒ void
This method returns an undefined value.
Cache a channel
63 64 65 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 63 def cache_channel(channel) cache(:channel, channel.id, channel) end |
#cache_guild(guild) ⇒ void
This method returns an undefined value.
Cache a guild
49 50 51 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 49 def cache_guild(guild) cache(:guild, guild.id, guild) end |
#cache_member(member, guild_id) ⇒ void
This method returns an undefined value.
Cache a member
106 107 108 109 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 106 def cache_member(member, guild_id) key = "#{guild_id}:#{member.id}" cache(:member, key, member) end |
#cache_message(message) ⇒ void
This method returns an undefined value.
Cache a message
77 78 79 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 77 def () cache(:message, .id, ) end |
#cache_role(role) ⇒ void
This method returns an undefined value.
Cache a role
91 92 93 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 91 def cache_role(role) cache(:role, role.id, role) end |
#cache_user(user) ⇒ void
This method returns an undefined value.
Cache a user
35 36 37 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 35 def cache_user(user) cache(:user, user.id, user) end |
#channel(channel_id) ⇒ Channel?
Get a cached channel
70 71 72 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 70 def channel(channel_id) get(:channel, channel_id) end |
#clear ⇒ void
This method returns an undefined value.
Clear all cached entities
155 156 157 158 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 155 def clear @store.clear @logger&.info('Cleared entity cache') end |
#guild(guild_id) ⇒ Guild?
Get a cached guild
56 57 58 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 56 def guild(guild_id) get(:guild, guild_id) end |
#invalidate(type, id) ⇒ void
This method returns an undefined value.
Invalidate an entity
124 125 126 127 128 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 124 def invalidate(type, id) key = build_key(type, id) @store.delete(key) @logger&.debug('Invalidated cache', type: type, id: id) end |
#invalidate_guild(guild_id) ⇒ void
This method returns an undefined value.
Invalidate by guild ID
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 133 def invalidate_guild(guild_id) guild_key = guild_id.to_s deleted_count = 0 # Delete the guild itself @store.delete("guild:#{guild_key}") deleted_count += 1 # Delete all members associated with this guild if @store.respond_to?(:keys) member_keys = @store.keys("member:#{guild_key}:*") member_keys.each do |key| @store.delete(key) deleted_count += 1 end end @logger&.debug('Invalidated guild cache', guild_id: guild_id, deleted: deleted_count) end |
#member(user_id, guild_id) ⇒ Member?
Get a cached member
115 116 117 118 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 115 def member(user_id, guild_id) key = "#{guild_id}:#{user_id}" get(:member, key) end |
#message(message_id) ⇒ Message?
Get a cached message
84 85 86 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 84 def () get(:message, ) end |
#role(role_id) ⇒ Role?
Get a cached role
98 99 100 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 98 def role(role_id) get(:role, role_id) end |
#stats ⇒ Hash
Get cache statistics
162 163 164 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 162 def stats @store.respond_to?(:stats) ? @store.stats : {} end |
#user(user_id) ⇒ User?
Get a cached user
42 43 44 |
# File 'lib/discord_rda/cache/entity_cache.rb', line 42 def user(user_id) get(:user, user_id) end |