Skip to content

Commit d048bf4

Browse files
authored
Merge pull request #311 from pareshios/remove_inmemory_cache
feat: Added support to remove only in memory cache
2 parents eeaf771 + de764f8 commit d048bf4

File tree

7 files changed

+30
-1
lines changed

7 files changed

+30
-1
lines changed

Source/Shared/Storage/DiskStorage.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,8 @@ extension DiskStorage: StorageAware {
145145
// Remove objects if storage size exceeds max size
146146
try removeResourceObjects(resourceObjects, totalSize: totalSize)
147147
}
148+
149+
public func removeInMemoryObject(forKey key: Key) throws { }
148150
}
149151

150152
extension DiskStorage {

Source/Shared/Storage/HybridStorage.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ extension HybridStorage: StorageAware {
5151

5252
notifyStorageObservers(about: .remove(key: key))
5353
}
54+
55+
public func removeInMemoryObject(forKey key: Key) throws {
56+
memoryStorage.removeObject(forKey: key)
57+
notifyStorageObservers(about: .removeInMemory(key: key))
58+
}
5459

5560
public func setObject(_ object: Value, forKey key: Key, expiry: Expiry? = nil) throws {
5661
var keyChange: KeyChange<Value>?

Source/Shared/Storage/MemoryStorage.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ extension MemoryStorage {
6767
cache.removeObject(forKey: WrappedKey(key))
6868
keys.remove(key)
6969
}
70+
71+
public func removeInMemoryObject(forKey key: Key) throws {
72+
cache.removeObject(forKey: WrappedKey(key))
73+
keys.remove(key)
74+
}
7075

7176
public func entry(forKey key: Key) throws -> Entry<Value> {
7277
guard let capsule = cache.object(forKey: WrappedKey(key)) else {

Source/Shared/Storage/Storage.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,10 @@ public final class Storage<Key: Hashable, Value> {
4343
}
4444

4545
extension Storage: StorageAware {
46+
public func removeInMemoryObject(forKey key: Key) throws {
47+
try self.syncStorage.removeInMemoryObject(forKey: key)
48+
}
49+
4650
public var allKeys: [Key] {
4751
self.syncStorage.allKeys
4852
}

Source/Shared/Storage/StorageAware.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ public protocol StorageAware {
7171
- Parameter key: Unique key to identify the object.
7272
*/
7373
func isExpiredObject(forKey key: Key) throws -> Bool
74+
/**
75+
Removes the object by the given key from cache in memory only.
76+
- Parameter key: Unique key to identify the object.
77+
*/
78+
func removeInMemoryObject(forKey key: Key) throws
7479
}
7580

7681
public extension StorageAware {

Source/Shared/Storage/StorageObservationRegistry.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,12 @@ public enum StorageChange<Key: Hashable>: Equatable {
2828
case remove(key: Key)
2929
case removeAll
3030
case removeExpired
31+
case removeInMemory(key: Key)
3132
}
3233

3334
public func == <Key : Hashable>(lhs: StorageChange<Key>, rhs: StorageChange<Key>) -> Bool {
3435
switch (lhs, rhs) {
35-
case (.add(let key1), .add(let key2)), (.remove(let key1), .remove(let key2)):
36+
case (.add(let key1), .add(let key2)), (.remove(let key1), .remove(let key2)), (.removeInMemory(let key1), .removeInMemory(let key2)):
3637
return key1 == key2
3738
case (.removeAll, .removeAll), (.removeExpired, .removeExpired):
3839
return true

Source/Shared/Storage/SyncStorage.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ extension SyncStorage: StorageAware {
6161
try innerStorage.removeExpiredObjects()
6262
}
6363
}
64+
65+
public func removeInMemoryObject(forKey key: Key) throws {
66+
try serialQueue.sync {
67+
try self.innerStorage.removeInMemoryObject(forKey: key)
68+
}
69+
}
70+
6471
}
6572

6673
public extension SyncStorage {

0 commit comments

Comments
 (0)